encaminha pacotes de uma interface para outra interface usando iptables

5

Eu tenho um sistema embeded com 2 interfaces e0 e m0, cujos ips são 10.0.0.20 e 192.168.0.20, respectivamente. Os pacotes recebidos em e0 possuem um ip de 10.0.0.10 e devem ser encaminhados para a interface m0 para o servidor externo cujo ip é 10.0.0.30. Além disso, o tráfego de retorno em m0 deve ser retornado para e0.

Eu tentei encaminhar pacotes com estes comandos:

route add -net 10.0.0.0/16 dev m0
iptables -t nat -A PREROUTING -d 10.0.0.30 -j DNAT --to-destination 192.168.0.20
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -j SNAT --to-source 10.0.0.20

Eu fiz tcpdump em m0 mas não vejo nada saindo.

Você pode me dizer o que estou perdendo? Obrigado antecipadamente.

1: lo: <LOOPBACK> mtu 65536 qdisc noop  
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 00:a0:c9:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.20/24 brd 10.0.0.255 scope global e0
       valid_lft forever preferred_lft forever
    inet6 fe80::2a0:c9ff:fe00:0/64 scope link
       valid_lft forever preferred_lft forever

3: m0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 00:aa:bb:cc:dd:44 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.20 brd 192.168.0.255 scope global m0
       valid_lft forever preferred_lft forever
    inet6 fe80::2aa:bbff:fecc:dd44/64 scope link
       valid_lft forever preferred_lft forever

4: bcm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 00:a0:c9:00:00:03 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2a0:c9ff:fe00:3/64 scope link
       valid_lft forever preferred_lft forever
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 80:3f:5d:09:7f:4b brd ff:ff:ff:ff:ff:ff

6: e0.1@e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
    link/ether 00:a0:c9:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 127.3.0.254/24 brd 127.3.0.255 scope global e0.1
       valid_lft forever preferred_lft forever
    inet6 fe80::2a0:c9ff:fe00:0/64 scope link
       valid_lft forever preferred_lft forever


[0.1.10] pad# ip rule show
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

[0.1.10] pad# ip ro show
default via 192.168.0.20 dev m0
10.0.0.0/24 dev m0
10.0.0.0/24 dev e0  src 10.0.0.20
127.3.0.0/24 dev e0.1  src 127.3.0.254
192.168.0.0/24 dev m0  src 192.168.0.20

0.1.10] pad# iptables -L -vn
Chain INPUT (policy ACCEPT 1480 packets, 186K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 914 packets, 158K bytes)
 pkts bytes target     prot opt in     out     source               destination


0.1.10] pad# iptables -t nat -L -vn
Chain PREROUTING (policy ACCEPT 258 packets, 51912 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       all  --  *      *       0.0.0.0/0            10.0.0.30        to:192.168.0.20
    0     0 DNAT       all  --  *      *       0.0.0.0/0            10.0.0.30        to:192.168.0.20
    0     0 DNAT       all  --  *      *       0.0.0.0/0            10.0.0.30        to:192.168.0.20

Chain INPUT (policy ACCEPT 258 packets, 51912 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 13 packets, 876 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 13 packets, 876 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       all  --  *      *       10.0.0.0/16          0.0.0.0/0       to:10.0.0.20
    0     0 SNAT       all  --  *      *       10.0.0.0/16          0.0.0.0/0       to:10.0.0.20
    
por mikec 24.02.2015 / 18:13

2 respostas

0

@Mike: Liberar TODAS as regras / tabelas e começar apenas com o básico para garantir que você pode nat entre redes.

echo 1 > /proc/sys/net/ipv4/ip_forward
route add -net 10.0.0.0/16 dev m0
iptables -t nat -A POSTROUTING -o m0 -j MASQUERADE

A meu ver, isso deve rotear e mascarar todo o tráfego 10.0.x.x para m0, independentemente do endereçamento IP. Se for bem-sucedido, desenvolva isso com base nas necessidades da sua rede.

    
por 27.02.2015 / 08:56
0

Usando:

netstat -r

você verá facilmente que seu esquema de atribuição de endereços IP não pode funcionar como você deseja.

Mais precisamente, você tem:

Destination ...    Netif
10.0.0.0/24        e0
10.0.0.0/16        m0
192.168.0.0/24     m0

E 10.0.0.20 , 10.0.0.10 e 10.0.0.30 pertencem a 10.0.0.0/24 . Isso significa que os 2 endereços nos quais você deseja fazer o roteamento estão no mesmo lado da rede ( e0 ) do seu roteador (seu "sistema incorporado" atua aqui como um roteador).

Você não pode conseguir que o outro lado ( m0 ) passe pelo roteamento ou pela ponte. Conseqüentemente você não pode fazer nenhum projeto de traduzir o tráfego e0 → m0 .

Primeiramente, faça um esquema de endereços IP que funcione e verifique com:

netstat -r
    
por 30.12.2017 / 16:53