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 2
especifica 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 lan
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ê 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 main
tabela. 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.yourhost
fará com que o kernel tente a tabela apenas se o endereço IP de origem no pacote for 192.168.2.yourhost. iif
permite especificar de qual interface o pacote foi recebido (o que é útil quando você encaminha tráfego) com uma exceção especial, onde iif lo
significa que o tráfego foi gerado localmente.
Agora você pode verificar se funciona tentando ou usando ip route get
comandos 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