iptables 不适用于长命名的网络接口吗?

iptables 不适用于长命名的网络接口吗?

我曾经配置 iptables 来在多网络接口服务器上的不同网络接口之间转发数据包。

一直以来,它都运行良好,直到我将服务器更新到 Ubuntu 1604。

Ubuntu 1604 配备了新的内核,它重命名了网络接口(可预测的网络接口名称

假设该服务器将两个子网络连接在一起:

  • 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

转发功能无法正常运作。

  • 主机1ping 192.168.1.155成功
  • 主机1ping 10.1.1.1成功
  • 主机11号航站楼10.1.1.2),失败的
  • 服务器1号航站楼成功

当我使用 tcpdump 检查服务器时,发现来自enp3s0一侧的数据包未被转发。(出于某种原因,我无法只检查来自另一侧的数据包)

也许 iptables 不适用于长命名的网络接口(如 enxa0cec80f64f3)?

答案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其中有 s,所以这不是问题所在。还建议您检查 Big Kernel Forwarding Switch

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

在您的情况下返回0- 表示未启用转发。更正此问题(可能是通过更改相关行并/etc/sysctl.conf运行sysctl -p)已解决问题。

相关内容