iptables是否不适用于长命名的networking接口?

我曾经configurationiptables在muli-network-interface-server上的不同networking接口之间转发包。

很长时间,它工作正常,直到我更新我的服务器到Ubuntu 1604。

Ubuntu 1604附带新的内核,其中重命名networking接口 ( 可预测的networking接口名称 )

假设这个服务器连接两个子networking:

  • 接口enp3s0与ip 192.168.1.155 ,连接到networking192.168.1.0/24
  • 接口enxa0cec80f64f3与ip 10.1.1.1连接到networking10.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) 

为了使2个networking中的主机能够自由地相互通信,服务器上的iptables被configuration为

 $ 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.155SUCCEED ;
  • Host1 ping 10.1.1.1SUCCEED ;
  • Host1 ping Terminal110.1.1.2 ), FAILED ;
  • 服务器 ping terminal1成功

当我用tcpdump检查服务器时,来自enp3s0端的数据包没有被转发。 (出于某种原因,我不能只检查对方的数据包)

也许iptables不能用于像enxa0cec80f64f3长命名的networking接口?

对于转发的正确testing是,在一个接口上出现的数据包是否会出现在另一个接口上 ,以及是否正确testing类似tcpdump 。 这里是转发正常发生; 内部接口上的stream量:

 [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 。 但正如迈克尔·汉普顿(Michael Hampton)指出的那样,你的规则除了 ACCEPT它们之外什么没有 ,所以不能成为问题。 你也被build议检查大内核转发交换机

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

在你的情况下返回0 – 这意味着没有启用转发。 纠正这个问题,大概是通过改变/etc/sysctl.conf的相关行并运行sysctl -p解决问题。