O iptables não funciona com interfaces de rede de nomes longos?

3

Eu costumava configurar o iptables para encaminhar pacotes entre interfaces de rede diferentes em um servidor de interface de rede muli.

Até agora, funcionou bem até que eu atualizei meu servidor para o Ubuntu 1604.

O Ubuntu 1604 vem com o novo kernal, que renomeia as interfaces de rede ( Nomes Previsíveis de Interface de Rede )

Digamos que esse servidor conecte duas sub-redes:

  • Interface enp3s0 com ip 192.168.1.155 , conecta-se à rede 192.168.1.0/24 ,
  • Interface enxa0cec80f64f3 com ip 10.1.1.1 conecta-se à rede 10.1.1.0/24 .

Como abaixo.

               Terminal1(10.1.1.2/24, gateway10.1.1.1)
                                 ||
                                 ||
                                 \/
                   +---------------------------+
                   | enxa0cec80f64f3(10.1.1.1) |
                   |                           |
                   |           Server          |
                   |                           |
                   |   enp3s0(192.168.1.155)   |
                   +---------------------------+
                                 /\
                                 ||
                                 ||
    Host1(192.168.1.111/24, route to 10.1.1.0/24 via 192.168.1.155)

Para permitir que hosts nas duas redes conversem entre si livremente, o iptables no servidor é configurado como

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.1.1.0/24 -d 192.168.1.0/24 -i enxa0cec80f64f3 -o enp3s0 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -d 10.1.1.0/24 -i enp3s0 -o enxa0cec80f64f3 -m conntrack --ctstate NEW -j ACCEPT

O enunciado não funciona corretamente.

  • Host1 ping 192.168.1.155 , SUCEDA ;
  • Host1 ping 10.1.1.1 , SUCEDA ;
  • Host1 ping Terminal1 ( 10.1.1.2 ), FAILED ;
  • Servidor ping Terminal1 , SUCEDA

Como eu verifiquei no servidor com tcpdump, os pacotes de enp3s0 side não foram encaminhados. (Por algum motivo, eu não posso apenas verificar os pacotes do outro lado)

Talvez o iptables não funcione com interfaces de rede com nomes longos como o enxa0cec80f64f3?

    
por hxpax 22.03.2017 / 07:27

1 resposta

4

O teste certo para encaminhamento é se os pacotes que apresentam uma interface com um destino que seria acessado por meio de outro aparecem também nessa outra interface , e a maneira correta de testar isso é algo como% código%. Aqui está o encaminhamento acontecendo corretamente; tráfego na interface interna:

[me@router ~]$ sudo tcpdump -n -n -i em2 icmp 
[...]
07:03:55.490295 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 1, length 64
07:03:56.491899 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 2, length 64

e ao mesmo tempo no externo:

[me@router ~]$ sudo tcpdump -n -n -i em1 icmp
[...]
07:03:55.490588 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 1, length 64
07:03:56.492255 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 2, length 64

Se você não vê isso, o que, no seu caso, você não vê, a primeira coisa a verificar é tcpdump . Mas, como Michael Hampton apontou, suas regras não têm nada , mas iptables s nelas, então esse não pode ser o problema. Você também foi aconselhado a verificar o Big Kernel Forwarding Switch

[me@router ~]$ cat /proc/sys/net/ipv4/ip_forward
1

que, no seu caso, retornou ACCEPT - o que significa que nenhum encaminhamento foi ativado. Corrigir isso, presumivelmente alterando a linha relevante em 0 e executando /etc/sysctl.conf , corrigiu o problema.

    
por 22.03.2017 / 08:12