一次排查诡异的网络问题的经历

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

排查自建Forgejo SSH连接异常问题。原因:OpenWRT防火墙nftset中误加入Front Server IP,导致流量经Shadowsocks转发至ss-server,而ss-server无法访问本机端口转发,连接被重置。根源是访问指向该IP的eu.org域名时,dnsmasq按GFW列表自动将其加入nftset。移除该IP后恢复正常。

🔎

延伸解读

排查思路的启示

本文的排查过程展示了网络问题定位的系统性方法:从现象入手,逐步排除可能的原因,最终在OpenWRT防火墙的nftset中发现异常条目。这提醒我们,当遇到看似无解的网络故障时,应检查所有中间设备(如路由器、防火墙)的配置,尤其是那些自动更新规则的机制,如dnsmasq结合GFW列表的自动添加功能。

GFW列表的意外影响

问题根源在于eu.org域名被列入GFW列表,导致访问指向该域名的IP时,dnsmasq自动将该IP加入nftset,进而触发Shadowsocks代理。这揭示了GFW列表不仅影响被墙域名的访问,还可能波及使用同一IP的其他服务。对于自建服务,应避免使用被列入GFW列表的域名,或调整dnsmasq规则,防止误伤。

代理与端口转发的冲突

当流量被代理到Front Server后,ss-server尝试访问本机端口转发时失败,因为端口转发规则不处理本机发出的流量。这提示在配置代理和端口转发时,需考虑流量来源,必要时添加额外的OUTPUT规则,确保代理服务器能访问转发的端口,避免连接被重置。

Q&A

自建Forgejo无法通过SSH连接,可能是什么原因?

可能原因是OpenWRT防火墙的nftset中误加入了Front Server的IP,导致本应直连的流量被Shadowsocks转发到ss-server,而ss-server无法访问本机端口转发,连接被重置。

如何排查SSH连接被重置的问题?

排查步骤包括:在Front Server上用tcpdump抓包,检查UFW和iptables配置,查看syslog中的ss-server日志,最后检查OpenWRT防火墙,关闭防火墙测试,并检查nftset中是否包含目标IP。

为什么关闭OpenWRT防火墙后SSH连接恢复正常?

因为防火墙重启会重置nftset,清除了误加入的IP,从而不再将流量转发到ss-server,连接恢复正常。

如何检查OpenWRT的nftset中是否包含某个IP?

使用命令:nft list table inet fw4 | grep 1.2.3.4,如果存在输出,则说明该IP在nftset中。

如何从OpenWRT的nftset中移除误加入的IP?

使用命令:nft delete element inet fw4 gfwlist { 1.2.3.4 },即可手动移除该IP。

为什么eu.org域名会导致IP被加入GFW列表?

因为eu.org域名在GFW列表中,当访问指向该IP的eu.org域名时,dnsmasq会根据规则自动将该IP加入nftset,导致后续流量被代理。

🏷️

标签

➡️

继续阅读