重启几分钟后,NAT 预路由/输出路由/后路由/转发失败。什么会要求防火墙停止转发?

重启几分钟后,NAT 预路由/输出路由/后路由/转发失败。什么会要求防火墙停止转发?

今天早上(2023 年 5 月 5 日),我发现我的 Ubuntu 18.04 安装中的 LAN 停止工作。所有计算机都被锁定,因为主服务器FORWARD规则被忽略。

我第一次启动电脑时,它按预期工作。没有安装任何东西(这是我首先检查的东西之一),转发已经工作了 10 年左右。我没有更换防火墙。没有安装... 重新启动后,它可以工作一两分钟,我想这就是某些东西启动并搞砸它所需要的时间。但我需要知道在哪里查找以确定导致问题的原因(希望不是黑客的代码)。

下面,我们可以看到PREROUTING,、INPUTPOSTROUTING工作了一点时间。现在计数器停留在这些数字上。除了 INPUT 链之外,没有其他数据包通过 NAT 表。但我真正需要的是POSTROUTING具有 的链SNAT,从而生成转发。(我还有一个MASQUERADE,但这不是必需的,由于规则,它会被忽略SNAT。我只是添加了MASQUERADE以防万一会有帮助。)

Chain PREROUTING (policy ACCEPT 642 packets, 43832 bytes)
pkts    bytes target     prot opt in     out     source               destination         
 208    13747 LOG        all  --  *      *       192.168.3.183        0.0.0.0/0            LOG flags 0 level 4

Chain INPUT (policy ACCEPT 825 packets, 51359 bytes)
pkts    bytes target     prot opt in     out     source               destination         
 189     9873 LOG        all  --  *      *       192.168.0.18        0.0.0.0/0            LOG flags 0 level 4

Chain OUTPUT (policy ACCEPT 120 packets, 13320 bytes)
pkts    bytes target     prot opt in     out     source               destination         
   0        0 LOG        all  --  *      *       192.168.0.18        0.0.0.0/0            LOG flags 0 level 4

Chain POSTROUTING (policy ACCEPT 89 packets, 8970 bytes)
pkts    bytes target     prot opt in     out     source               destination         
 153    10268 LOG        all  --  *      *       192.168.0.18        0.0.0.0/0            LOG flags 0 level 4
 153    10268 SNAT       all  --  *      eno1    192.168.0.18        0.0.0.0/0            to:10.0.0.2

我展示了 SNAT 规则。我们可以看到,它收到了相同数量的数据包,并且我的 MS-Windows 机器显示它可以在短时间内看到互联网。因此,我很确定网络在重新启动时已正确设置。

我已经研究过的事情(除了上面的 iptables 之外):

$ sudo sysctl  net.ipv4.ip_forward
net.ipv4.ip_forward = 1

$ sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

我也检查了 conntrack,但没有看到什么特别的东西,除了“UNREPLIED”,我想这是一个不同的问题?

udp      17 16 src=192.168.0.18 dst=75.75.75.75 sport=56804 dport=53 ...
            ... [UNREPLIED] src=75.75.75.75 dst=192.168.0.18 sport=53 dport=56804 mark=0 use=1

注意:这是一行很长的线,在这里将其截成两半以便于阅读。

另外,我有一个来自 snap 的 docker,虽然守护进程正在运行,但是防火墙中经常出现的 DOCKER 规则目前还不存在。

顺便说一句,LAN 本身可以正常工作。我有各种设备可以与主服务器或计算机之间进行通信,并且运行正常。


该桥地址:

$ ip -4 -br address
lo               UNKNOWN        127.0.0.1/8 
eno1             UP             x.x.x.x/30 192.168.1.1/24 10.1.10.2/24 
eno2             UP             192.168.0.45/24 192.168.2.1/24 192.168.3.1/24 172.16.1.1/24 10.0.2.10/24 10.0.3.10/24 
docker0          DOWN           172.17.0.1/16 

路线如下:

$ ip route
default via 96.67.192.226 dev eno1 proto static 
10.0.2.0/24 dev eno2 proto kernel scope link src 10.0.2.10 
10.0.3.0/24 dev eno2 proto kernel scope link src 10.0.3.10 
10.1.10.0/24 dev eno1 proto kernel scope link src 10.1.10.2 
x.x.x.x/30 dev eno1 proto kernel scope link src x.x.x.x 
172.16.1.0/24 dev eno2 proto kernel scope link src 172.16.1.1 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.0.0/24 dev eno2 proto kernel scope link src 192.168.0.45 
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.1 
192.168.2.0/24 dev eno2 proto kernel scope link src 192.168.2.1 
192.168.3.0/24 dev eno2 proto kernel scope link src 192.168.3.1 

xxxx 是静态 IP 地址。


Docker转发数据包的对策:

Chain DOCKER-USER (0 references)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 early_forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

解决:我升级到了 20.04(很快会升级到 22.04)。我无法解释为什么/如何 18.04 iptables 会以这种方式中断,但对我来说确实如此。到目前为止,20.04 仍然有效。

相关内容