今天早上(2023 年 5 月 5 日),我发现我的 Ubuntu 18.04 安装中的 LAN 停止工作。所有计算机都被锁定,因为主服务器FORWARD
规则被忽略。
我第一次启动电脑时,它按预期工作。没有安装任何东西(这是我首先检查的东西之一),转发已经工作了 10 年左右。我没有更换防火墙。没有安装... 重新启动后,它可以工作一两分钟,我想这就是某些东西启动并搞砸它所需要的时间。但我需要知道在哪里查找以确定导致问题的原因(希望不是黑客的代码)。
下面,我们可以看到PREROUTING
,、INPUT
和POSTROUTING
工作了一点时间。现在计数器停留在这些数字上。除了 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 仍然有效。