Doppia connessione di rete


9

Ho un modem cellulare USB e una connessione LAN domestica sulla mia scatola Ubuntu 10.10.

Entrambi lavorano in modo indipendente.

Voglio sapere come avere entrambi connessi contemporaneamente ed essere in grado di specificare quale applicazione utilizza quale dispositivo connettersi a Internet.

Qualcuno sa come fare questo?

Risposte:


11

Esistono diverse possibilità, a seconda di come si desidera decidere quali pacchetti vanno dove. La maggior parte richiederà una certa comprensione del funzionamento della rete TCP / IP in Linux. Gli strumenti principali che devi sapere per fare cose complesse sono iptables(Ubuntu: iptables Installa iptables ) e iproute2 ( ipcomando) (Ubuntu: iproute Installa iproute , iproute-doc Installa iproute-doc ).

Se riesci a discriminare completamente in base all'indirizzo IP di destinazione, è semplice: indirizza gli indirizzi IP in base ai tuoi desideri. Ad esempio, i seguenti comandi causeranno tutti i pacchetti per 1.2.3. x e 1.2.4.2 per passare ppp0, e altri pacchetti per passare 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

Per requisiti più complessi, è necessario iniziare a utilizzare iptablese ip route. Ad esempio, i seguenti comandi impostano tabelle di routing speciali in modo che tutti i pacchetti contrassegnati con 1 vengano espulsi tramite eth0e tutti i pacchetti contrassegnati con 2 vengano disattivati ​​tramite ppp0(tranne che i pacchetti intesi per localhostaderire all'interfaccia di loopback).

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

Ora puoi usare iptablesper "manipolare" i pacchetti in uscita, aggiungendo un segno che deciderà quale percorso prendere. Ad esempio, ecco come inviare tutto il traffico SMTP in uscita (porta 25) via eth0e tutto il traffico originato da un'applicazione in esecuzione come utente proxyvia 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

Vedi anche 2 interfacce di rete connesse a Internet. Scegli quello da utilizzare in base al nome di dominio e associa il software a diverse interfacce di rete .


Dovrai disporre che questi comandi vengano eseguiti quando entrambe le interfacce sono collegate. Ti consiglio di scrivere uno script chiamato /etc/network/if-up.d/0justin-routesche esegua i comandi desiderati. Questo script verrà eseguito ogni volta che viene visualizzata un'interfaccia di rete; poiché il suo nome inizia con un 0, verrà eseguito all'inizio del processo, prima della configurazione specifica dell'applicazione che potrebbe prevedere che le route siano in atto. C'è una simmetria /etc/network/if-down.d/nel caso in cui si desideri fare anche le cose quando una delle interfacce si disattiva. (Tutti i percorsi associati verranno automaticamente cancellati, il che potrebbe lasciare alcuni pacchetti bloccati quando si desidera che ricadano sull'altra interfaccia.)

Gli script ifup sono documentati in interfaces(5) man page. La cosa principale da sapere è che il nome dell'interfaccia che viene attivata o disattivata si trova nella variabile di ambiente IFACE. Puoi scoprire se l'altra interfaccia è già compatibile if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then ….


@Justin: Questo non è roba che ho molta esperienza con, quindi si prega di dare valutazioni di cosa ha funzionato, cosa non ha funzionato, che cosa non si capisce, ecc
Gilles 'SO-tappa è male'

1
Ho due aggiunte da fare: in primo luogo, questo invia traffico su ppp0 con indirizzo di origine da eth0. Puoi cambiarlo usando :, iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ipdove si ppp_iptrova l'indirizzo IP di quell'adattatore. In secondo luogo, dovrai disattivare rigorosamente rp_filtera /proc/sys/net/ipv4/config/ppp0/rp_filter. Funziona quando impostato sulla modalità relax, che è 2.
Karalga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.