Loadbalancing działa tak jak się tego spodziewałem czyli równoważy obciążenie obu łącz dlatego podzielę się swoją konfiguracją z krótkim opisem.
Na początku dzięki pomocy Cezarego udało się wydzielić dodatkowy port ze switcha w WNDR3700v2, który stał się drugim WANem. Oryginalna konfiguracja /etc/config/network znajduje się w pierwszym poście a poniżej już po zmianach:
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'interface' 'lan'
option 'ifname' 'eth0.1'
option 'type' 'bridge'
option 'proto' 'static'
option 'ipaddr' '192.168.1.1'
option 'netmask' '255.255.255.0'
option 'dns' '194.204.159.1 194.204.152.34'
config 'interface' 'wan'
option 'ifname' 'eth1'
option 'proto' 'dhcp'
option 'macaddr' '00:00:00:00:00:01'
option 'dns' '194.204.159.1 194.204.152.34'
config 'interface' 'wan2'
option 'ifname' 'eth0.2'
option 'proto' 'dhcp' #w tej sekcji został dodany interfejs wan2
option 'macaddr' '00:00:00:00:00:02'
option 'dns' '194.204.159.1 194.204.152.34'
config 'switch'
option 'name' 'rtl8366s'
option 'reset' '1'
option 'enable_vlan' '1'
option 'blinkrate' '2'
config 'switch_vlan'
option 'device' 'rtl8366s'
option 'vlan' '1' #w tej sekcji z domyślnie skonfigurowanego switcha został zabrany 3 port(fizycznie jest to pierwszy port czyli ten najbliżej portu WAN) – interfejs bez zmian czyli eth0.1
option 'ports' '0 1 2 5t'
config 'switch_vlan'
option 'device' 'rtl8366s'
option 'vlan' '2' #w tej sekcji został utworzony dodatkowy vlan składający się tylko z 3 portu switcha, za który będzie odpowiadał nowy interfejs eth0.2
option 'ports' '3 5t'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '1'
option 'led' '6'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '2'
option 'led' '9'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '5'
option 'led' '2'
Jak widać na obu portach wan, adresy IP od ISP dostaję z DHCP po MACach. I tu ważna informacja – oba adresy ip muszą być z różnych puli adresowych. Multiwan nie będzie działał na łączach w tej samej sieci z taką samą bramką, chyba że postawimy dodatkowego NATa na jednym z łącz.
W konfiguracji /etc/config/firewall dodałem jeszcze do opcji ‘network’ wan2
config 'zone'
option 'name' 'wan'
option 'input' 'REJECT'
option 'output' 'ACCEPT'
option 'forward' 'REJECT'
option 'masq' '1'
option 'mtu_fix' '1'
option 'network' 'wan wan2'
Po skonfigurowaniu wszystkiego warto zrobić restart urządzenia.
P uruchomieniu można przejść do instalacji pakietu multiwan:
opkg update
opkg install multiwan
Plik konfiguracyjny znajduje się oczywiście w /etc/config/multiwan
config 'multiwan' 'config'
option 'default_route' 'balancer' #domyślna ścieżka dla ruchu, który nie będzie pasował do żadnej reguły
config 'interface' 'wan'
option 'weight' '10'
option 'health_interval' '10'
option 'icmp_hosts' 'dns'
option 'timeout' '3'
option 'health_fail_retries' '3'
option 'health_recovery_retries' '5'
option 'failover_to' 'balancer'
option 'dns' '194.204.159.1 194.204.152.34'
config 'interface' 'wan2'
option 'weight' '10'
option 'health_interval' '10'
option 'icmp_hosts' 'dns'
option 'timeout' '3'
option 'health_fail_retries' '3'
option 'health_recovery_retries' '5'
option 'failover_to' 'balancer'
option 'dns' '194.204.159.1 194.204.152.34'
#config 'mwanfw' to jest przykład reguły
# option 'src' '192.168.1.0/24'
# option 'proto' 'udp'
# option 'port_type' 'source-ports'
# option 'ports' '5060,16384:16482'
# option 'wanrule' 'wan' cały ten ruch zawsze będzie szedł przez interfejs wan (abstrahując oczywiście od tego ze jest zakomentowany :) )
config 'mwanfw'
option 'wanrule' 'balancer' #ta reguła cały pozostały ruch będzie kierowała na wan lub wan2 w zależności od obciążenie łącza, prawdopodobnie można to wyrzucić bo na początku ustawione zostało option 'default_route' 'balancer'
/etc/init.d/multiwan enable
/etc/init.d/multiwan start
Niestety ciężko jest z dokumentacją do multiwan ale udało mi się odnaleźć informację o tym, że jeśli więcej niż jedna reguła pasuje do danego zapytania to zastosowana będzie ostatnia z nich.
W option 'wanrule' dopuszczalne wartości to balancer/fastbalancer/<interface> jednak jaka jest różnica między balancer i fastbalancer wie chyba tylko autor skryptu.
A tu trochę listingu działania i ustawień:
# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:01
inet addr:192.168.0.122 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1803997 errors:0 dropped:0 overruns:0 frame:0
TX packets:894955 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2485092566 (2.3 GiB) TX bytes:51976422 (49.5 MiB)
Interrupt:5
# ifconfig eth0.2
eth0.2 Link encap:Ethernet HWaddr 00:00:00:00:00:02
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2060806 errors:0 dropped:0 overruns:0 frame:0
TX packets:1137626 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3013729579 (2.8 GiB) TX bytes:71093905 (67.7 MiB)
# ip route
192.168.1.0/24 dev br-lan proto kernel scope link src 192.168.1.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.122
192.168.10.0/24 dev eth0.2 proto kernel scope link src 192.168.10.100
default via 192.168.10.1 dev eth0.2
default via 192.168.0.2 dev eth1
# route –n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.2
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0.2
0.0.0.0 192.168.0.2 0.0.0.0 UG 0 0 0 eth1
Żeby nie było tak kolorowo teraz o nie rozwiązanych jeszcze problemach:
- w statystykach widocznych w Gargoyle 1.3.16 widać obciążenie tylko pierwszego interfejsu WAN
- bez jawnego podania DNSów w /etc/config/multiwan w option 'dns' '194.204.159.1 194.204.152.34' nazwy stron nie są rozwiązywane czyli dla zwykłego użytkownika = brak internetu. Natomiast użycie option 'resolv_conf' '/tmp/resolv.conf.auto' w sekcji config 'multiwan' 'config' powoduje wyczyszczenie pliku /tmp/resolv.conf.auto i też strony nie chodzą
- QOS dostępny w Gargoyle jest włączony jednak teraz zawsze cały ruch wrzuca w klasę Slow czyli tak jakby nie działał
Sugestie i poprawki mile widziane szczególnie jeśli chodzi o qos.
Pozdrawiam
TL-WR1043ND v1 @420MHz + 16MB FlashMOD + 64MB RAMMOD
WNDR3700 v2 + 128MB RAMMOD