conecta-se a vários roteadores ethernet com um adaptador [duplicado]

1

Estou procurando a melhor abordagem para conectar-se a vários roteadores através de um único adaptador Ethernet e seus efeitos colaterais.
Eu tenho um PC Linux com uma porta ethernet, conectado a um switch. esta chave está conectada a vários roteadores com redes diferentes (por exemplo, 192.168.1.1, 192.168.2.1, 192.168.3.1) Eu quero poder, então, ligar um soquete a um "dispositivo" específico, então eu usarei o roteador relevante para essa conexão.
Acredito que isso pode ser conseguido através da criação de uma interface eth virtual para cada roteador e definir o ip / subnet / gw adequado para cada um. as perguntas são: isso é correto? , como fazer isso? , devo suspeitar de efeitos colaterais estranhos.
* a velocidade total da rede de todos os roteadores juntos não passará nem 10M.

    
por RoeeK 19.08.2012 / 09:38

1 resposta

2

Não há necessidade de interfaces virtuais aqui. O que você deseja é vários endereços IP no mesmo dispositivo e boas tabelas de roteamento com o roteamento de políticas para selecionar a tabela de roteamento a ser usada. Agora, na parte de configuração. Vamos configurar seus endereços IP com um / 32, para que possamos criar nossas rotas no próprio link

ip addr flush dev eth0
ip addr add 192.168.1.yourhost/32 dev eth0
ip addr add 192.168.2.yourhost/32 dev eth0
ip addr add 192.168.3.yourhost/32 dev eth0

Agora, para a tabela de roteamento. A primeira tabela de roteamento irá corresponder aos pacotes que vão para seus lans.

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.2.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.3.0/24 dev eth0 src 192.168.1.yourhost table 2

table 2 especifica qual tabela de roteamento deve ser usada. 2 é um número arbitrário. números podem ser mapeados para nomes editando / etc / iproute2 / rt_tables. Vamos adicionar 2 lan a esse arquivo, agora você pode simplesmente usar table lan .

Agora, vamos usar essa tabela de roteamento por padrão:

ip rule add table lan

Agora, se você observar a saída de ip rule , verá algo assim:

0:      from all lookup local 
99:     from all lookup lan
32766:  from all lookup main 
32767:  from all lookup default

local é uma tabela reservada usada para que o kernel possa verificar se um endereço IP é seu próprio endereço IP, lan é nossa tabela, main é a tabela de roteamento usual que você conhece e default é uma tabela especial para pacotes que não podemos rotear. Basicamente, o kernel tentará essas regras começando do primeiro e, se não encontrar uma rota nessa tabela, irá para a próxima regra.

Então, adicionamos outra tabela de roteamento onde colocamos nossas rotas para a LAN, que é testada antes da tabela main . Agora vamos adicionar uma rota padrão no main: Quando você não liga um socket a um endereço IP, você só usará esta rota padrão. Vamos escolher 192.168.1.1:

ip route add default via 192.168.1.1 src 192.168.1.yourhost

Agora, se você vincular seu soquete ao 192.168.2.yourhost, não desejará usar essa rota padrão, mas outra. Vamos adicionar essa rota padrão a outra tabela de roteamento:

ip route add default via 192.168.2.1 src 192.168.2.yourhost dev eth0 table 3
# and while we are at it, let's do this for 192.168.3.1 as well
ip route add default via 192.168.3.1 src 192.168.3.yourhost dev eth0 table 4

Agora você deseja usar essas tabelas de roteamento, mas somente se o seu soquete estiver vinculado a esses outros endereços IP.

ip rule add from 192.168.2.yourhost iif lo table 3
ip rule add from 192.168.3.yourhost iif lo table 4

from 192.168.2.yourhost fará com que o kernel tente apenas a tabela se o endereço IP no pacote for 192.168.2.yourhost. iif permite especificar de qual interface o pacote foi recebido (o que é útil quando você encaminha o tráfego) com uma exceção especial, em que iif lo significa que o tráfego foi gerado localmente.

Agora, você pode verificar se funciona tentando ou usando os comandos ip route get para testar suas tabelas de roteamento:

$ ip route get 192.168.2.5
192.168.2.5 dev eth0  src 192.168.2.yourhost 
    cache
$ ip route get 64.34.119.12
64.34.119.12 via 192.168.1.1 dev eth0 src 192.168.1.yourhost 
    cache
$ ip route get 64.34.119.12 from 192.168.2.yourhost
64.34.119.12 via 192.168.2.1 dev eth0 src 192.168.2.yourhost 
    cache
    
por 19.08.2012 / 12:17