Я использовал для настройки 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
Пересылка не работает должным образом .
192.168.1.155
, SUCCEED ; 10.1.1.1
, [11711717ED] ]; 10.1.1.2
), FAILED ; Как я проверял на сервере с помощью tcpdump, пакеты со стороны enp3s0
не пересылались. (По какой-то причине Я не могу просто проверить пакеты с другой стороны)
Может быть, iptables не работает с сетевыми интерфейсами с длинными именами, такими как enxa0cec80f64f3?
Правильным тестом для переадресации является , появляются ли пакеты, присутствующие в одном интерфейсе с адресом назначения, к которому можно было бы получить доступ через другой интерфейс , а правильным способом проверки является что-то вроде 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
, исправило проблему.