Ich arbeite schon seit Wochen an einer Internetbündelung im Round Robin-Modus (mode=0). Die Bündelung funktioniert tadellos bei einem Linux-Rechner als Zielrechner, jedoch nicht bei einem Windows-Rechner:
Ich möchte die Internetverbindungen zweier UMTS-Sticks bündeln. Zu Testzwecken bündel ich jedoch erst einmal nur 1x UMTS und 1x WLAN. Dazu habe ich bei Amazon AWS eine Ubuntu Server Instanz zu laufen und gebe dessen schnelle Internetverbindung an ein bond0-Interface frei (IP-Adresse 10.10.0.1). Dieses bond0-Interface bündelt die TAP-Interfaces tap0 und tap1, die durch OpenVPN erzeugt werden.
Skript auf dem Amazon Server:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/bin/bash modprobe bonding mode=0 arp_interval=100 arp_ip_target=10.10.0.2 openvpn --mktun --dev-type tap --dev tap0 openvpn --mktun --dev-type tap --dev tap1 ifconfig bond0 10.10.0.1 netmask 255.255.255.252 broadcast 10.10.0.3 ip addr add 10.10.10.1/24 dev tap0 scope link ip addr add 10.10.11.1/24 dev tap1 scope link ifenslave bond0 tap0 tap1 service openvpn start bond-server1 bond-server2 ## vorhandene Regeln und Ketten zuerst löschen iptables -F iptables -X iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren iptables -A FORWARD -o eth0 -i bond0 -s 10.10.0.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sysctl -w net.ipv4.ip_forward=1 |
Bei mir zu Hause habe ich ein Notebook mit Ubuntu, das ebenfalls die zwei von OpenVPN erzeugten TAP-Interfaces tap0 und tap1 zu bond0 bündelt (IP-Adresse 10.10.0.2) und dessen Internetverbindung an die Ethernet-Schnittstelle freigibt (IP-Adresse 192.168.3.1). An die Ethernet-Schnittstelle soll dann ein Rechner mit Windows 7 angeschlossen werden (IP-Adresse 192.168.3.10).
Skript auf dem Notebook:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #!/bin/bash ### Bonding- und Tunnel-Interfaces einrichten modprobe bonding mode=0 arp_interval=100 arp_ip_target=10.10.0.1 sleep 1 ifconfig bond0 10.10.0.2 netmask 255.255.255.252 broadcast 10.10.0.3 openvpn --mktun --dev-type tap --dev tap0 openvpn --mktun --dev-type tap --dev tap1 ifconfig tap0 down ifconfig tap1 down ip addr add 10.10.10.2/24 dev tap0 ip addr add 10.10.11.2/24 dev tap1 ifenslave bond0 tap0 tap1 ip route del default # Routing-Tabelle Surfstick anlegen und füllen ip rule add from <IP-Adresse Surfstick> table 100 ip route add <Gateway-Adresse Surfstick> dev ppp0 scope link src <IP-Adresse Surfstick> table 100 ip route add default dev ppp0 scope link table 100 # Routing-Tabelle WLAN anlegen und füllen ip rule add from 192.168.178.38 table 102 ip route add 192.168.178.0/24 dev eth1 src 192.168.178.38 scope link table 102 ip route add default via 192.168.178.1 dev eth1 table 102 ip route flush cache # Tunnelverbindung aufbauen openvpn --config /etc/openvpn/bond-client1.conf --local <IP-Adresse Surfstick> --remote <Server IP-Adresse> 1194 & openvpn --config /etc/openvpn/bond-client2.conf --local 192.168.178.38 --remote <Server IP-Adresse> 1195 & # Neue Default-Route für Internetzugriff ip route add default via 10.10.0.1 dev bond0 ### Internetfreigabe über die eth0-Schnittstelle ## vorhandene Regeln und Ketten zuerst löschen iptables -F iptables -X iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren iptables -A FORWARD -o bond0 -i eth0 -s 192.168.3.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE sysctl -w net.ipv4.ip_forward=1 |
Nun zu meinem eigentlichen Problem:
Wenn ich auf dem Windows 7 Rechner eine Ubuntu Live CD laufen lasse, funktioniert die Internetbündelung wie ein Traum! Bei einem FTP-Upload erreiche ca. 500 KB/s. Mit Windows 7 erhalte ich jedoch keinen Geschwindigkeitsgewinn (<=150 KB/s). Die Verbindung wird sogar schneller, wenn ich ein Interface aus dem Verbund rausnehme. Dann kann ich die volle Geschwindigkeit eines einzelnen Interfaces nutzen. Wenn ich wieder ein 2. Interface hinzufüge, sinkt die Geschwindigkeit.
Aufgefallen ist mir noch, dass im Netzwerkmonitor "bmon" bei Nutzung von Ubuntu als Zielrechner die Geschwindigkeiten der TAP-Interfaces etwa doppelt so hoch sind wie die der realen Interfaces (ergibt eigentlich keinen Sinn). Bei Windows 7 als Zielrechner ist die Datenrate der TAP-Interfaces "nur" so groß wie die Datenrate der realen Interfaces.
Was ich bereits versucht habe:
Diverse OpenVPN-Konfigurationen ausprobiert, u.A. tun anstatt tap
Anderen Windows Rechner
Anstatt Ubuntu Notebook ein Raspberry Pi verwendet mit selben Ergebnis
Ein zusätzlicher Ubuntu-Rechner als "Puffer" zwischen dem bond0-Adaper und Windows
MTU-Werte von bond0, tap0 und tap1 variiert
txqueuelen von bond0, tap0 und tap1 erhöht
Umstellung der Enthernet-Schnittstelle des Notebooks von Half-Duplex auf Full-Duplex
Ich habe schon zu viel Zeit reingesteckt, um das Thema Bündelung jetzt aufzugeben. Aber meine Ideen sind mir ausgegangen. Kann mir jemand weiter helfen? Schon für eine ungefähre Eingrenzung des Problems wäre ich sehr dankbar!