conecte-se a vários roteadores Ethernet com um adaptador

conecte-se a vários roteadores Ethernet com um adaptador

Possível duplicata:
Como conectar duas conexões de internet diferentes

estou procurando a melhor abordagem para conectar-se a vários roteadores por meio de apenas um adaptador Ethernet e seus efeitos colaterais.
eu tenho um PC Linux com uma porta Ethernet, conectado a um switch. este switch está conectado a vários roteadores com redes diferentes (por exemplo, 192.168.1.1, 192.168.2.1, 192.168.3.1). Quero poder vincular um soquete a um "dispositivo" específico, então usarei o roteador relevante para essa conexão.
Acredito que isso pode ser conseguido criando uma interface eth virtual para cada roteador e definindo o ip/sub-rede/gw adequado para cada um.
as perguntas são: isso está correto? , como fazer isso? , devo suspeitar de efeitos colaterais estranhos.
* a velocidade total da rede de todos os roteadores juntos não ultrapassará nem 10M.

Responder1

Não há necessidade de interfaces virtuais aqui. O que você deseja são vários endereços IP no mesmo dispositivo e boas tabelas de roteamento com roteamento de políticas para selecionar qual tabela de roteamento usar. Agora, na parte de configuração. Vamos configurar seus endereços IP com /32, para que possamos criar nossas próprias rotas on-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 corresponderá aos pacotes que vão para suas 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 2especifica qual tabela de roteamento usar. 2 é um número arbitrário. números podem ser mapeados para nomes editando /etc/iproute2/rt_tables. Vamos adicionar 2 lanesse 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ê olhar 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 é o seu próprio endereço IP, lané a 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 pela primeira e, se não conseguir encontrar uma rota naquela tabela, passará para a próxima regra.

Então adicionamos outra tabela de roteamento onde colocamos nossas rotas para a LAN, que é tentada antes da maintabela. Agora vamos adicionar uma rota padrão em main: Quando você não vincula um soquete a um endereço IP, você usará apenas 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 a 192.168.2.yourhost, não desejará usar essa rota padrão, mas outra. Vamos adicionar esta 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.yourhostfará com que o kernel tente a tabela apenas se o endereço IP de origem no pacote for 192.168.2.yourhost. iifpermite especificar de qual interface o pacote foi recebido (o que é útil quando você encaminha tráfego) com uma exceção especial, onde iif losignifica que o tráfego foi gerado localmente.

Agora você pode verificar se funciona tentando ou usando ip route getcomandos 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

informação relacionada