Linux – How to have two network interfaces wifi and ethernet (as a backup) working together

ethernetlinuxnetworkingwifi

I have a raspberry 2 with a wifi interface and an ethernet interface. wifi is my main connection with the ability to just plug in the ethernet as a backup method. I want to assign different static address for each interface.

What I want is to be able :

  1. to boot with only the USB wifi connected on the first address
  2. to boot with only the ethernet connected on the second address
  3. to boot with both wifi and ethernet and be able to use both addresses
  4. to boot with only the wifi; then hotplug the ethernet and be able to use both addresses.
  5. when both wifi and Ethernet are connected, to be able to keep the other connection when one of them is down for a reason or anothe.

I couldn't manage to do this. If someone could help me I would be very thankful.

Here's my /etc/network/interfaces file :

auto lo
iface lo inet loopback

auto wlan0
#allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
wpa-ssid my-network
wpa-bssid XX:XX:XX:XX:XX:XX
wpa-psk  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1

Best Answer

I would use device bonding, meaning you are creating a new virtual device for which you assign the network settings (e.g. IP address, mask, etc.) and then you enslave both the ethernet and wifi interfaces to that interface.

Something like:

 $ sudo modprobe bonding
 $ sudo ifconfig bond0 192.168.0.1 netmask 255.255.0.0
 $ sudo ifenslave bond0 eth0 wlan0

This has the advantage of covering all your scenarios from 1 to 5 with one exception: you have only 1 IP address. If that would be a problem, then you could always create an "alias" (e.g. bond0:0) and give a different IP address for that one. Then you would always have both IP addresses reachable even if only 1 interface is active.

More details can be found online. E.g.: http://www.codekoala.com/posts/bonding-eth0-and-wlan0-arch-linux/

Related Question