Route IP através da interface virtual

4

No Linux, é possível fazer com que todos os pedidos feitos para um IP específico sejam roteados por meio de uma interface virtual, de modo que, no outro extremo, eles apareçam com um endereço IP diferente do principal do host? Suponha que eth0 tenha o endereço IP 1.1.1.1, enquanto eth0:1 tenha o endereço 1.1.1.2. Como posso fazer todas as solicitações para 1.2.3.4 aparecerem como provenientes de eth0:1 ? Eu estou tentando o seguinte, mas parece que não funciona:

route add 1.2.3.4 dev eth0:1
    
por Georgios Gousios 08.02.2013 / 17:49

2 respostas

6

Sim.

Uma maneira de fazer isso seria usar IPTABLES para reescrever os pacotes que saem da máquina com vários endereços IP para dizer que eles vêm da interface virtual. Experimente

/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP

(Você, é claro, precisa ter o IP virtual configurado como você contemplou, ou seja, eth0: 1 ou equivalente precisa existir para que o tráfego possa encontrar o caminho de volta para a máquina)

    
por 08.02.2013 / 20:00
2

Pode ser necessário usar o comando

ip route add 1.2.3.4 dev eth0:1 src 1.1.1.2

ou rota com uma opção semelhante. Se isso não funcionar como esperado, você pode precisar de roteamento avançado: Crie uma tabela de roteamento adicional para este destino em / etc / iproute2 / rt_tables, coloque a entrada acima como única nessa tabela e ative esta tabela:

ip rule add to 1.2.3.4 priority 100 table to__1_2_3_4
ip route flush cache

A solução desesperada de último recurso seria o netfilter: você poderia usar o SNAT com iptables na cadeia POSTROUTING para reescrever o endereço de origem dos pacotes para este destino.

    
por 08.02.2013 / 20:03