Conexão de rede dupla

9

Eu tenho um modem USB e uma conexão LAN doméstica na minha caixa Ubuntu 10.10.

Ambos trabalham de forma independente.

Eu quero saber como ter ambos conectados ao mesmo tempo e ser capaz de especificar qual aplicativo usa qual dispositivo conectar à internet.

Alguém sabe como fazer isso?

    
por Justin Alexander 21.11.2010 / 21:00

1 resposta

11

Existem várias possibilidades, dependendo de como você deseja decidir quais pacotes vão para onde. A maioria deles exigirá algum entendimento de como a rede TCP / IP funciona no Linux. As principais ferramentas que você precisa saber para fazer coisas complexas são iptables (Ubuntu: iptables ) e iproute2 (comando ip ) (Ubuntu: iproute , iproute-doc ).

Se você puder discriminar totalmente pelo endereço IP de destino, é simples: rotear os endereços IP de acordo com seus desejos. Por exemplo, os seguintes comandos farão com que todos os pacotes para 1.2.3. x e 1.2.4.2 passem por ppp0 , e outros pacotes passem por 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 mais complexos, você precisa começar a usar iptables e ip route . Por exemplo, os seguintes comandos configuram tabelas de roteamento especiais para que todos os pacotes marcados com 1 saiam por eth0 e todos os pacotes marcados com 2 saiam por ppp0 (exceto que os pacotes destinados a localhost permanecem na interface de 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

Agora você pode usar iptables para "mangle" pacotes de saída, adicionando uma marca que decidirá qual rota tomar. Por exemplo, aqui está como enviar todo o tráfego SMTP de saída (porta 25) via eth0 e todo o tráfego originado por um aplicativo em execução como o usuário proxy via 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

Veja também 2 interfaces de rede conectadas à internet. Escolha o que usar de acordo com o nome de domínio e ligue o software a diferentes interfaces de rede .

Você precisará organizar esses comandos para serem executados quando as duas interfaces estiverem conectadas. Eu recomendo que você escreva um script chamado /etc/network/if-up.d/0justin-routes que executa os comandos que você quer. Este script será executado sempre que uma interface de rede for ativada; como seu nome começa com 0 , ele será executado no início desse processo, antes da configuração específica do aplicativo, que pode esperar que as rotas estejam no lugar. Há um /etc/network/if-down.d/ simétrico caso você também queira fazer alguma coisa quando uma das interfaces é desativada. (Todas as rotas associadas serão automaticamente apagadas, o que pode deixar alguns pacotes retidos quando você quiser que eles voltem para a outra interface.)

Os scripts do ifup estão documentados no interfaces(5) man page . A principal coisa a saber é que o nome da interface que está sendo ativada ou desativada está na variável de ambiente IFACE . Você pode descobrir se a outra interface já está com if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then … .

    
por 21.11.2010 / 22:11