Не работает ли iptables с сетевыми интерфейсами с длинными именами?

Я использовал для настройки iptables для пересылки пакетов между различными сетевыми интерфейсами на сервере с несколькими сетевыми интерфейсами.

Итак, он работал нормально, пока я не обновил свой сервер до Ubuntu 1604.

Ubuntu 1604 поставляется с новым ядром, которое переименовывает сетевые интерфейсы ( Predictable Network Interface Names )

Допустим, этот сервер соединяет два под- сети вместе:

  • Интерфейс enp3s0 с IP 192.168.1.155 , 192.168.1.0/24 ,
  • Интерфейс enxa0cec80f64f3 с IP 10.1.1.1 подключается к сети 10.1.1.0/24 .

Как показано ниже.

               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)

Чтобы хосты в двух сетях могли свободно общаться друг с другом, iptables на сервере настроен как

$ 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

Пересылка не работает должным образом .

  • Host1 ping 192.168.1.155 , SUCCEED ;
  • Host1 ping 10.1.1.1 , [11711717ED] ];
  • Host1 ping Terminal1 ( 10.1.1.2 ), FAILED ;
  • Server ping Terminal1 11117191], УСПЕШНО

Как я проверял на сервере с помощью tcpdump, пакеты со стороны enp3s0 не пересылались. (По какой-то причине Я не могу просто проверить пакеты с другой стороны)

Может быть, iptables не работает с сетевыми интерфейсами с длинными именами, такими как enxa0cec80f64f3?

3
задан 22 March 2017 в 09:33
1 ответ

Правильным тестом для переадресации является , появляются ли пакеты, присутствующие в одном интерфейсе с адресом назначения, к которому можно было бы получить доступ через другой интерфейс , а правильным способом проверки является что-то вроде tcpdump. Здесь переадресация происходит правильно; трафик на внутреннем интерфейсе:

[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

и одновременно на внешнем:

[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

Если вы этого не видите, что в вашем случае не видно, первое, что нужно проверить - это iptables. Но, как указал Майкл Хэмптон, в ваших правилах нет ничего , кроме ACCEPT, так что это не может быть проблемой. Вам также посоветовали проверить переключатель переадресации большого ядра

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

, который в вашем случае вернул 0 - это означает, что переадресация не была включена. Исправление этого, предположительно, путем изменения соответствующей строки в /etc/sysctl.conf и запуска sysctl -p, исправило проблему.

.
4
ответ дан 3 December 2019 в 06:00

Теги

Похожие вопросы