Conexión de red dual

9

Tengo un módem celular usb y una conexión LAN doméstica en mi caja Ubuntu 10.10.

Ambos trabajan de forma independiente.

Quiero saber cómo tener ambos conectados al mismo tiempo y poder especificar qué aplicación usa qué dispositivo para conectarse a Internet.

¿Alguien sabe como hacer esto?

Justin Alexander
fuente

Respuestas:

11

Hay varias posibilidades, según cómo desee decidir qué paquetes van a dónde. La mayoría de ellos requerirá cierta comprensión de cómo funciona la red TCP / IP en Linux. Las principales herramientas que deberá conocer para hacer cosas complejas son iptables(Ubuntu: iptables Instalar iptables ) e iproute2 ( ipcomando) (Ubuntu: iproute Instalar iproute , iproute-doc Instalar iproute-doc ).

Si puede discriminar completamente por la dirección IP de destino, es simple: enrute las direcciones IP de acuerdo con sus deseos. Por ejemplo, los siguientes comandos generarán todos los paquetes para 1.2.3. x y 1.2.4.2 para pasar ppp0, y otros paquetes para pasar 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

Para requisitos más complejos, debe comenzar a usar iptablesy ip route. Por ejemplo, los siguientes comandos configuran tablas de enrutamiento especiales para que todos los paquetes marcados con 1 salgan por eth0y todos los paquetes marcados con 2 salgan por ppp0(excepto los paquetes destinados a localhostadherirse a la interfaz de bucle invertido).

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

Ahora puede usar iptablespara "destrozar" paquetes salientes, agregando una marca que decidirá qué ruta tomarán. Por ejemplo, a continuación se explica cómo enviar todo el tráfico SMTP saliente (puerto 25) a través de eth0, y todo el tráfico originado por una aplicación que se ejecuta a proxytravés del usuario 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

Consulte también 2 interfaces de red conectadas a internet. Elija el que usará de acuerdo con el nombre de dominio y vincular el software a diferentes interfaces de red .


Deberá organizar estos comandos para que se ejecuten cuando ambas interfaces estén conectadas. Le recomiendo que escriba un script llamado /etc/network/if-up.d/0justin-routesque ejecute los comandos que desee. Este script se ejecutará siempre que aparezca una interfaz de red; como su nombre comienza con a 0, se ejecutará al principio de ese proceso, antes de la configuración específica de la aplicación que podría esperar que las rutas estén en su lugar. Hay una simétrica /etc/network/if-down.d/en caso de que también desee hacer cosas cuando una de las interfaces se cae. (Todas las rutas asociadas se borrarán automáticamente, lo que puede dejar algunos paquetes varados cuando desee que vuelvan a la otra interfaz).

Los scripts ifup están documentados en el interfaces(5) man page. Lo principal que debe saber es que el nombre de la interfaz que se activa o desactiva se encuentra en la variable de entorno IFACE. Puede averiguar si la otra interfaz ya está funcionando if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then ….

Gilles 'SO- deja de ser malvado'
fuente
@Justin: Esto no es algo que tengo mucha experiencia con, por lo que por favor, dar retroalimentación de lo que funcionó, lo que no hizo el trabajo, lo que no entiende, etc
'SO siendo parada del mal' Gilles
1
Tengo dos adiciones que hacer: Primero, esto envía tráfico en ppp0 con la dirección de origen de eth0. Puede cambiar esto usando:, iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ipdonde ppp_ipestá la dirección IP de ese adaptador. En segundo lugar, deberá desactivar estrictamente rp_filtera las /proc/sys/net/ipv4/config/ppp0/rp_filter. Funciona cuando se configura en modo de relajación, que es 2.
Karalga