我的设置需要一个 HTTP 服务器通过 OpenVPN 连接侦听特定的 IP 地址。为了实现该服务器,我在 Ubuntu 22.04 下使用 python 3.11 和 aiohttp 库。 问题是,即使我的机器正确接收数据包(我已经通过 Wireshark 检查过),发送到该服务器的请求也不会被它接收。相反,当在 Windows(或 Ubuntu 24)下通过相同的 OpenVPN 连接运行相同的服务器时,不会出现此问题,并且 HTTP 服务器可以正确处理数据包。同样的行为也适用于其他协议,例如 CoAP。在这一点上,我相信 Linux 网络堆栈做错了什么。 Ubuntu 22 有可能修复吗?
VPN 接口的
ifconfig
的输出如下:
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.0.3.6 netmask 255.255.255.255 destination 10.0.3.5
inet6 fe80::1935:7dee:341:eaa8 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500
服务器监听地址10.0.3.6
Ubuntu 22 上的 Ubuntu 防火墙在操作系统级别阻止请求(这就是 Wireshark 检测到它们的原因)。我不得不用
sudo ufw disable
完全禁用它,没有规则允许数据包以某种方式通过