Unlike when using NetworkManager or Wicd this setup allows uninterrupted switching between wired and wireless, no connections will be interrupted in the switch.
As of this writing (Summer 2012) neither NetworkManager nor Wicd handle this kind of setup.
bond0, enslave lan and wifi interfaces. (Nowadays usually optional) Tell
wpa_supplicant packets enter through
# modprobe -v bonding # ifenslave bond0 wlan1 # ifconfig wlan1 up # ifconfig bond0 up # wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan1 -b bond0 # ifenslave bond0 eth1 # ifconfig eth1 up # echo eth1 > /sys/class/net/bond0/bonding/primary # dhclient -v bond0
# dhclient -v -r bond0 # ifconfig bond0 down # ifconfig eth1 down # ifconfig wlan1 down # killall wpa_supplicant # Is there a "clean" way? # ifenslave -d bond0 eth1 # ifenslave -d bond0 wlan1 # modprobe -v -r bonding
In Debian this can be achieved directly through
allow-hotplug bond0 # or "auto bond0" iface bond0 inet dhcp bond-primary eth1 bond-slaves eth1 wlan1 bond-mode active-backup # or bond-mode 1 bond-miimon 150 allow-bond0 wlan1 #allow-hotplug wlan1 iface wlan1 inet manual bond-master bond0 bond-primary eth1 bond-mode active-backup bond-miimon 150 # Usually optional: set wlan1 as active temporarily, tell wpa_supplicant to use bond0 #bond-give-a-chance 10 #wpa-bridge bond0 # # Single Wireless location/access point: #wpa-ssid "#MY SSID#" #wpa-psk #MY KEY# # Multiple wireless locations wpa-roam /etc/wpa_supplicant/wpa-roam.conf # And set-up wpa-roam.conf with SSIDs and Keys allow-bond0 eth1 #allow-hotplug eth1 iface eth1 inet manual bond-master bond0 bond-primary eth1 bond-miimon 150 bond-mode active-backup
bond0will use the master MAC
wpa-pskcan be set to a hashed value, obtained with
$ wpa_passphrase <SSID> <actual passphrase>
# ifup bond0. Release a enslaved interface with
# ifdown interface.
With cable connected,
eth1 is used. Without,
wlan1 is used.
See status with
$ cat /proc/net/bonding/bond0:
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008) Bonding Mode: fault-tolerance (active-backup) Primary Slave: eth1 Currently Active Slave: eth1 MII Status: up MII Polling Interval (ms): 150 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 1 Permanent HW addr: 00:aa:bb:cc:dd:ee Slave Interface: wlan1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:11:22:33:44:55
Disabling wifi through rfkill (using laptop's switch or touch-sensitive button) removes it from the bond *BUT* re-enabling it won't re-add it. Re-inserting the module after enabling it does add it (e.g. switch on, run
# rmmod iwlagn ; modprobe iwlagn).
I set up a new computer recently and had to use a couple tricks to get it working. Both the wireless and wired interfaces only worked when the bond was configured to their respective MAC address. My solution was to use the wireless MAC for the bond and put the wired interface in promiscuous mode.
# ifconfig bond0 hw ether 00:11:22:33:44:55 # ifconfig eth1 promisc
iface bond0 inet dhcp # ... pre-up ifconfig bond0 hw ether 00:11:22:33:44:55 pre-up ifconfig eth1 promisc post-down ifconfig eth1 -promisc