Tekst dla zaawansowanych !!!
Na początku było jedno łącze, gdy przestało wystarczać zainteresowałem się load balancing,
przyspiesza ona ładowanie danych, ale działa ona tak: jeden plik jednym łączem, drugi plik drugim łączem.
Niesatysfakcjonujące dla mnie rozwiązanie, wolałbym rozłożyć transfer po równo, czyli należy zejść niżej,
na poziom protokołu i tu z pomocą przychodzi na Bonding (inaczej zwany link aggregatorem).
Co musimy posiadać :
- serwer z wirtualizacją XEN (zwykły vps z openvz nie będzie działać, wymagany jest dostęp do iptables), może być taki za 20zł
- router (ja używam mr3420), hub usb aktywny (w końcu podłączam kilka modemów)
- modemy co najmniej 2 szt.
Przygotowanie serwera:
- ściągnąć i zainstalować vtund
- ściągnąć i zainstalować ifenslave
- modprobe bonding miimon=150
Przygotowanie routera:
- extroot
- podłączamy modemy i je konfigurujemy, włączamy multiwan (ja do tego preferuje luci)
- ściągnąć i zainstalować vtund oraz obsługę ipv6 (powód dla którego wymagany jest ten moduł jest dla mnie zagadką)
- ściągnąć i zainstalować moduł bonding
- ściągnąć i zainstalować ifenslave
- w /etc/modules.d/40-bonding dodać bonding miimon=150
na serwerze oraz routerze edytujemy pliki vtund.conf, są one odpowiednio opisane --- cute server --- oraz -- cute client ---
Czyli usuwamy na serwerze elementy odnośnie klienta, a na kliencie te które odnoszą się do serwera.
Zawartość pliku serwera vtund.conf:
options {
port 5000; # Listen on this port.
timeout 5;
# bindaddr { iface eth0; }; # Listen only on loopback device.
# Syslog facility
syslog daemon;
# Path to various programs
ppp /usr/sbin/pppd;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/ipchains;
ip /sbin/ip;
}
# Default session options
default {
compress no; # Compression is off by default
speed 0; # By default maximum speed, NO shaping
}
# TUN example. Session 'cobra'.
cobra1 {
passwd haslo; # Password
type tun; # IP tunnel
device tun0;
proto tcp; # UDP protocol
compress no; # LZO compression level 9
encrypt no; # Encryption
keepalive yes; # Keep connection alive
#multi yes;
stat yes;
up {
# Connection is Up
# 10.3.0.1 - local, 10.3.0.2 - remote
ifconfig "%% 10.3.0.1 netmask 255.255.255.0";
};
down {
ifconfig "%% down";
ifconfig "%% delete";
};
}
Zawartość pliku klienta vtund.conf:
options {
port 5000; # Connect to this port.
timeout 5; # General timeout
# Path to various programs
ppp /usr/sbin/pppd;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/ipchains;
ip /sbin/ip;
}
# Ethernet example. Session 'lion'.
cobra1 {
passwd haslo; # Password
type tun; # Ethernet tunnel
device tun0; # Device tap1
srcaddr {
iface 3g-3g;
};
up {
# Connection is Up
# Assign IP address and netmask.
ifconfig "%% 10.3.0.2 netmask 255.255.255.0";
};
down {
# Connection is Down
# Shutdown tap device
ifconfig "%% down";
};
}
uruchomienie połączenia
- Serwer
vtund -s -f sciezka
- Klient (jedno połączenie)
vtund -f sciezka cobra1 adres_serwera
A teraz kilka słów wyjaśnień jak to działa:
cobra1 - nazwa połączenia jaką sobie wybierzemy.
device tun0 - interfejs tunelu
srcaddr {
iface 3g-3g;
};
Jako wyjście użyć interfejsu modemu podłączonego do 3g-3g,
oczywiście konfiguracje należy wkopiować odpowiednią ilość razy (tyle ile mamy modemów),
dla każdego połączenia nadać inny numer IP np.
- pierwsze połączenie 10.1.0.1 - 10.1.0.2
- drugie połączenie 10.2.0.1 - 10.2.0.2
- trzecie połączenie 10.3.0.1 - 10.3.0.2
po połączeniu tunelu, po wydaniu polecenia ifconfig naszym oczom ukaże się nowy interfejs tun0 po jednej i drugiej stronie (serwer, router).
A po wydaniu polecenia ping 10.3.0.1 powinniśmy otrzymać odpowiedź oznacza to że tunel działa prawidłowo.
Gdy połączymy wystarczającą ilość tuneli, przystąpimy do właściwego łączenia tuneli czyli bonding.
Najpierw podnosimy interfejs bond0 na serwerze:
ifconfig bond0 192.168.2.1 netmask 255.255.255.0 up
ifconfig bond0 hw ether 00:11:22:33:44:55
ifenslave bond0 tun0 tun1 tun2 - wykonać tyle razy ile mamy tuneli
na kliencie:
ifconfig bond0 192.168.2.2 netmask 255.255.255.0 up
ifconfig bond0 hw ether 00:11:22:33:44:66
ifenslave bond0 tun0 tun1 tun2 - wykonać tyle razy ile mamy tuneli
po pomyślnym wykonaniu operacji wykonujemy standardowego pinga na drugą stronę tunelu.
po przesłaniu powiedzmy 4 - 6 pingów, przerywamy wydajemy polecenie ifconfig i sprawdzamy
czy na interfejsach tuneli liczba przesłanych pakietów rozłożona jest równo.
Teraz wystarczy już przepuścić ruch poprzez nowo otwarte połączenie (192.168.2.1) i cieszyc się szybszym połączeniem.
W ten sposób można połączyć wiele technologii np. operatorzy infrastrukturalni (czyli orange, play, plus, t-mobile, aero2 i ich polsat)
to już jest 5 źródeł do tego dochodzi cdma z orange i plusa czyli w sumie 7, jeszcze można skorzystać z wimax'a - w rezultacie można otrzymać łącze o całkiem przyzwoitym transferze przychodzącym jak i wychodzącym.