Duale Netzwerkverbindung


9

Ich habe ein USB-Mobilfunkmodem und eine Heim-LAN-Verbindung auf meiner Ubuntu 10.10-Box.

Beide arbeiten unabhängig voneinander.

Ich möchte wissen, wie beide gleichzeitig verbunden werden können, und ich möchte angeben können, welche Anwendung welches Gerät verwendet, um eine Verbindung zum Internet herzustellen.

Weiß jemand, wie man das macht?

Antworten:


11

Es gibt verschiedene Möglichkeiten, je nachdem, wie Sie entscheiden möchten, welche Pakete wohin gehen. Die meisten von ihnen erfordern ein gewisses Verständnis der Funktionsweise von TCP / IP-Netzwerken unter Linux. Die wichtigsten Tools, die Sie kennen müssen, um komplexe Aufgaben zu erledigen, sind iptables(Ubuntu: iptables Installieren Sie iptables ) und iproute2 ( ipBefehl) (Ubuntu: iproute Installieren Sie iproute , iproute-doc Installieren Sie iproute-doc ).

Wenn Sie die Ziel-IP-Adresse vollständig unterscheiden können, ist es ganz einfach: Leiten Sie die IP-Adressen gemäß Ihren Wünschen weiter. Beispielsweise verursachen die folgenden Befehle alle Pakete für 1.2.3. x und 1.2.4.2 gehen über ppp0und andere Pakete gehen über eth0.

route add -net 1.2.3.4/24 ppp0
route add -host 1.2.4.2 ppp0
route add -net 0.0.0.0/0 eth0

Für komplexere Anforderungen müssen Sie mit iptablesund beginnen ip route. Mit den folgenden Befehlen werden beispielsweise spezielle Routing-Tabellen eingerichtet, sodass alle mit 1 gekennzeichneten Pakete über eth0und alle mit 2 gekennzeichneten Pakete über ausgehen ppp0(mit Ausnahme der Pakete, die zum localhostFesthalten an der Loopback-Schnittstelle bestimmt sind).

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth0
ip rule add fwmark 2 table 2
ip route add 127.0.0.0/8 table 2 dev lo
ip route add 0.0.0.0/0 table 2 dev ppp0

Jetzt können Sie iptablesausgehende Pakete „entstellen“ und eine Markierung hinzufügen, die entscheidet, welchen Weg sie einschlagen. Hier erfahren Sie beispielsweise, wie Sie den gesamten ausgehenden SMTP-Verkehr (Port 25) über eth0und den gesamten Verkehr senden , der von einer Anwendung stammt, die als Benutzer proxyüber ausgeführt wird ppp0.

iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner proxy -j MARK --set-mark 2

Siehe auch 2 mit dem Internet verbundene Netzwerkschnittstellen. Wählen Sie die zu verwendende entsprechend dem Domänennamen aus und binden Sie die Software an verschiedene Netzwerkschnittstellen .


Sie müssen dafür sorgen, dass diese Befehle ausgeführt werden, wenn beide Schnittstellen verbunden sind. Ich empfehle Ihnen, ein Skript mit dem Namen zu schreiben /etc/network/if-up.d/0justin-routes, das die gewünschten Befehle ausführt. Dieses Skript wird immer dann ausgeführt, wenn eine Netzwerkschnittstelle aufgerufen wird. Da der Name mit a beginnt 0, wird er zu Beginn dieses Prozesses ausgeführt, bevor ein anwendungsspezifisches Setup durchgeführt wird, bei dem die Routen möglicherweise vorhanden sind. Es gibt eine Symmetrie /etc/network/if-down.d/für den Fall, dass Sie auch Dinge tun möchten, wenn eine der Schnittstellen ausfällt. (Alle zugehörigen Routen werden automatisch gelöscht, wodurch einige Pakete möglicherweise gestrandet bleiben, wenn Sie möchten, dass sie auf die andere Schnittstelle zurückgreifen.)

Die ifup-Skripte sind in der dokumentiert interfaces(5) man page. Das Wichtigste ist, dass der Name der Schnittstelle, die hoch- oder runtergefahren wird, in der Umgebungsvariablen steht IFACE. Sie können herausfinden, ob die andere Schnittstelle bereits verfügbar ist if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then ….


@Justin: Das ist nichts, mit dem ich viel Erfahrung habe, also gib bitte Feedback darüber, was funktioniert hat, was nicht funktioniert hat, was du nicht verstehst usw.
Gilles 'SO - hör auf böse zu sein'

1
Ich muss zwei Ergänzungen vornehmen: Erstens sendet dies Datenverkehr auf ppp0 mit der Quelladresse von eth0. Sie können dies ändern mit : iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ip, wo ppp_ipist die IP-Adresse dieses Adapters. Zweitens müssen Sie aus streng drehen rp_filteran /proc/sys/net/ipv4/config/ppp0/rp_filter. Es funktioniert, wenn der Entspannungsmodus auf 2
eingestellt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.