Bridge wlan0 and eth0 on Alpine Linux


I originally posted this on the Alpine Linux wiki on 27 June, 2020.

This wiki describes methods to bridge a wired and wireless interface to enable network communication between hosts reachable via either interface. This allows one or more wired hosts to share the wireless interface on the bridge host.

In my use case, I have a desk with a wired switch with multiple hosts connected. All wired devices on this switch can access my home wifi network via the bridge host’s wireless interface.

I am only going to document the proxy ARP method as that’s what I’m currently using.

Proxy ARP

These steps result in a working solution where hosts on the wired side and hosts on the wireless side are all in the same ip network. There are no frills added, such as dhcp or automatic route entries for the wired hosts. Each wired host needs to have a manually configured IP address and an entry manually added to the bridge host’s routing table.

Note: For your wired hosts, use IP addresses in the same IP range as the rest of your network but outside of the scope used by a local DHCP server, if applicable. You may need to reduce your DHCP scope to free up IP addresses for this purpose.

Configure the network interfaces on your bridge host:

Contents of /etc/network/interfaces

auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet dhcp
    hostname wyse3030-3

auto eth0
iface eth0 inet manual
    pre-up ifconfig $IFACE up
    pre-down ifconfig $IFACE down

Notice that the wireless interface (wlan0) uses dhcp from the home network as usual and that an IP address is not used at all on the wired interface (eth0).

Enable and create a local start-up script to add route entries at boot:

 # rc-update add local default
 # touch /etc/local.d/RouteAdd.start
 # chmod +x /etc/local.d/RouteAdd.start

Add route statements for each host on the wired side of the bridge:

Contents of /etc/local.d/RouteAdd.start

ip route add dev eth0
ip route add dev eth0
ip route add dev eth0

Enable proxy arp:

Contents of /etc/sysctl.d/local.conf

net.ipv4.conf.all.proxy_arp = 1
net.ipv4.ip_forward = 1