Como usar o iptables para rotear o pacote com um IP de destino específico através de uma interface específica

2

Eu tenho uma configuração de caixa de Linux como roteador usando este tutorial: link

Nessa máquina existem 2 interfaces de rede e uma VPN: eth0 é a interface principal da internet, eno1 é a intranet e tun0 é a interface VPN.

De acordo com o tutorial eu estou usando o script abaixo para rotear tudo o que vem de eno1 através da vpn:

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

Isso funciona muito bem. Mas agora eu quero rotear todos os pacotes vindos de eno1 e com o IP de destino de 203.205.147.173 até eth0.

Que tipo de regras do iptables devo adicionar ao meu script?

Editar

Eu mudei o script como segue para marcar todos os pacotes para 203.205.147.173:

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT

*mangle
-A PREROUTING -i "$INTIF" -d 203.205.0.0/16 -j MARK --set-mark 0x15
COMMIT
EOF

Então eu crio a tabela X:

sudo nano /etc/iproute2/rt_tables , em seguida, adicione 1 tableX no final do arquivo.

Em seguida, adicione regra e rota:

sudo ip rule add fwmark 0x15 lookup tableX
sudo ip route add default via 192.168.5.1 dev eth0 table tableX
sudo ip route add 203.205.0.0/16 via 192.168.5.1 dev eth0 table tableX

mas traceroute 203.205.147.173 timeout:

traceroute to 203.205.147.173 (203.205.147.173), 64 hops max, 52 byte packets
 (192.168.8.1)  2.384 ms  1.060 ms  1.027 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *

Eu acho que não estou adicionando o caminho certo para tableX. Alguma sugestão sobre como inicializar o tableX?

Note que o roteador eth0 ip é 192.168.5.1 e eno1 o roteador ip é 192.168.8.1

    
por Lionel 23.12.2017 / 15:07

2 respostas

1

O iptables não direciona nada, mas pode afetar a decisão de roteamento com marcas de firewall. Você adiciona outras tabelas de roteamento com a ferramenta ip (algo como ip route add <route> ... table X , depois adiciona as regras para rotear os pacotes pela marca do firewall ( ip rule add fwmark 0x1 lookup X ) e marca os pacotes com as regras iptables ( iptables -t mangle -A PREROUTING ... -j MARK --set-mark 0x1 ). os pacotes marcados serão roteados através da tabela de roteamento X. Mais informações você pode obter do LARTC (roteamento avançado e controle de tráfego do linux).

    
por 23.12.2017 / 17:34
0

Você precisa adicionar uma linha como:

-A FORWARD -i eno1 -o eth0 -d 203.205.147.173 -j ACCEPT

Você pode precisar adicioná-lo antes da regra LOG .

    
por 23.12.2017 / 15:13