iptables - POSTROUTING / SNAT não altera o IP de origem (duas tabelas de roteamento)

1

Eu tenho um problema com a regra POSTROUTING do iptables, parece que a regra SNAT não altera o endereço IP de origem. Eu gostaria de configurar o seguinte sistema para rotear todo o tráfego da LAN 2 através de um túnel VPN. O sistema tem duas tabelas de roteamento configuradas.

Configuração do sistema

              +-----------------+
  LAN 2 ----> |eth1       eth0  +-----> LAN 1 ---> Gateway ---> Internet
              |           tun1  |
              +-------------|---+
                            '--------------- VPN tunnel ------>

Configuração de iptables / roteamento

  • iptables

    root@misio:~# iptables -n -L --line-numbers -v -t nat
    Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 1 packets, 122 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    
    Chain POSTROUTING (policy ACCEPT 1 packets, 122 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 SNAT       all  --  *      *       192.168.124.0/24     0.0.0.0/0            to:192.168.124.1
    
  • roteamento (duas tabelas de roteamento)

    root@misio:~# ip route list
    default via 192.168.123.1 dev eth0 
    192.168.123.0/24 dev eth0  proto kernel  scope link  src 192.168.123.3 
    
    root@misio:~# ip route list table frankenjura
    default via 10.10.11.4 dev tun1 
    10.10.11.0/24 dev tun1  scope link 
    192.168.124.0/24 dev eth1  scope link 
    
    root@misio:~# ip rule
    0:      from all lookup local 
    32761:  from 192.168.124.0/24 lookup frankenjura 
    32762:  from all to 192.168.124.0/24 lookup frankenjura 
    32766:  from all lookup main 
    32767:  from all lookup default 
    

Investigação

  • Entrada (eth1) - o sistema está recebendo pacotes dos hosts na LAN 2 (192.168.124.17):

    root@misio:~# tcpdump -n -i eth1 icmp and host 8.8.8.8
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes 
    12:39:25.134315 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1181, length 40
    12:39:30.142011 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1182, length 40
    
  • Output (tun1) - os pacotes são roteados para a interface correta (tun1), , mas o endereço IP de origem não é alterado :

    root@misio:~# tcpdump -n -i tun1 icmp and host 8.8.8.8 
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on tun1, link-type RAW (Raw IP), capture size 262144 bytes
    12:40:20.140953 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1192, length 40
    12:40:25.148605 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1193, length 40
    
  • ... mas o número de pacotes / bytes da regra a seguir não é incrementado!

    Chain POSTROUTING (policy ACCEPT 1 packets, 122 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 SNAT       all  --  *      *       192.168.124.0/24     0.0.0.0/0            to:192.168.124.1
    

Versão das tabelas IP: 1.4.21

Você seria gentil em ajudar, por favor?

EDIT 2016-07-15

Eu configurei o log do iptables em todas as cadeias e aprendi que os pacotes não passam pela tabela NAT!

os pacotes passam por: - cru (PREROUTING) - mangle (PREROUTING) - filtro (FORWARD) - mangle (POSTROUTING)

Jul 15 12:36:04 misio kernel: [ 7913.969872] raw-PRE IN=eth1 OUT= MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022
Jul 15 12:36:04 misio kernel: [ 7913.969894] mangle-PRE IN=eth1 OUT= MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022 
Jul 15 12:36:04 misio kernel: [ 7913.969908] filter-FW IN=eth1 OUT=tun1 MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022 
Jul 15 12:36:04 misio kernel: [ 7913.969914] mangle-POST IN= OUT=tun1 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022 

Atenciosamente, Grzegorz

    
por gbajson 13.07.2016 / 15:02

0 respostas