我遇到了一个非常奇怪的问题。简而言之,IPv4 一切正常,IPv6 的 ICMP 和 UDP 也正常,但是 IPv6 的 TCP 只能“监听”,而不能主动建立连接!
我的工作站操作系统是 Ubuntu 22.04 LTS,网卡是 Intel I210。我还有另一个工作工作站,具有完全相同的硬件,连接到同一个交换机,所以我认为上游网络配置应该没有问题。
现在让我详细说明一下我遇到的问题。首先,我的网卡能够获取 IPv6 地址,并且 traceroute 工作正常,这意味着 ICMP 正在运行。
然后,我使用 iperf 测试了连通性。如您所见,UDP 在两个方向上都正常工作。(错误的主机地址以“cac5”结尾)
但是在测试TCP的时候发现这个工作站只能作为服务器。
我尝试在我的网卡上捕获数据包,我发现当作为服务器时,双向数据包可以正常发送和接收,但当作为客户端时,iperf 根本没有向目标地址发送任何数据包。我检查了我的路由表,但似乎没问题。(由于 ICMP 和 UDP 正在运行,因此路由表应该没问题)
我禁用了 ufw,我的 ip6tables 如下所示:
我也尝试了traceroute6 -S
,它发送 TCP SYN 探测。无论目标地址有多远,此命令都只会显示一跳,并且延迟非常短,并且不管目标端口是否开放,结果始终显示“开放”,这显然不正常。
我真的很困惑。远程主机可以通过 IPv6 毫无问题地访问此设备,例如,我可以通过 SSH 登录,并且发送命令和返回结果都没有问题,但是,此设备无法使用 TCP 通过 IPv6 访问任何外部主机。
确实需要这方面的专家!非常感谢!
更新:
我发现 tap_soft 接口工作正常。这是我设置的 SoftEther VPN,使用 fc00:0:2ac:7af1::/64,将 VPN 与手机连接后,工作站和手机能够通过 IPv6 建立 TCP 连接。所以我猜可能是网卡的配置有问题?
sysctl -a:
pastebin.com/kY6vSzxU