Bonding unter FreeBSD

Das selbe was es unter Linux gibt funktioniert auch bei FreeBSD (ab 4.2).
Allerdings nur die Variante mit der man die Bandbreite vergrößert. Leider
nicht die active-backup Variante.

 

Ich gehe hier von Intel-NICs (fxp) aus.
Es würde aber auch mit verschiedenen NICs (3Com, Realtec oder sonstwas) funktionieren. Auch kann man beliebig viele Interfaces zusammenfassen.

 

Zuerst löscht man die Netzwerkkonfig aus der rc.conf da diese sich sonst logischerweise beissen täte.

ifconfig_fxp0=“inet 192.168.1.10 netmask 255.255.255.0″
ifconfig_fxp1=“inet 192.168.1.11 netmask 255.255.255.0″
defaultrouter=“192.168.1.1″

Wenn ich mehr als zwei NICs hätte und davon aber nur zwei bündeln wollte müsste die „defaultrouter“-Zeile drin bleiben!

 

Kernelmodul ng_ether(.ko) laden und das Bonding händisch aktivieren:
# kldload ng_ether
# ngctl mkpeer fxp0: one2many upper one
# ngctl connect fxp0: fxp0:upper lower many0
# ngctl connect fxp1: fxp0:upper lower many0
# ngctl msg fxp1: setpromisc 1
# ngctl msg fxp1: setautosrc 0
# ngctl msg fxp0:upper setconfig „{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 ] }“
# ifconfig fxp0 192.168.1.10 netmask 255.255.255.0

 

Konfig anzeigen lassen:
# ngctl

+ show fxp0

  Name: fxp0            Type: ether           ID: 00000008   Num hooks: 2
  Local hook      Peer name       Peer type    Peer ID         Peer hook
  ----------      ---------       ---------    -------         ---------
  lower                  one2many     0000000d        many0
  upper                  one2many     0000000d        one

+ show fxp1

  Name: fxp1             Type: ether           ID: 00000009   Num hooks: 1
  Local hook      Peer name       Peer type    Peer ID         Peer hook
  ----------      ---------       ---------    -------         ---------
  lower                  one2many     0000000d        many1

+ quit

Bei
# tcpdump -i fxp0
# tcpdump -i fxp1
sollte man sehen wie der Traffic gleichmässig verteilt über beide Interfaces geht.

 

Wenn man das nun rebootfest/dauerhaft haben möchte braucht man ein Script welches nach dem booten ausgeführt wird:
# vi /etc/rc.bonding

#!/bin/sh
/sbin/ifconfig fxp0 up
/sbin/ifconfig fxp1 up
/sbin/kldload ng_ether
/usr/sbin/ngctl mkpeer fxp0: one2many upper one
/usr/sbin/ngctl connect fxp0: fxp0:upper lower many0
/usr/sbin/ngctl connect fxp1: fxp0:upper lower many0
/usr/sbin/ngctl msg fxp1: setpromisc 1
/usr/sbin/ngctl msg fxp1: setautosrc 0
/usr/sbin/ngctl msg fxp0:upper setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 ] }"
/sbin/ifconfig fxp0 192.168.1.10 netmask 255.255.255.0
# Wenn die Defaultroute aus /etc/rc.conf geloescht wurde
#/sbin/route add default 192.168.1.1


# chmod +x /etc/rc.bonding

# vi /etc/rc.local

/etc/rc.bonding

 

Und auch dies wäre erledigt.