VPN 端口没反应?监听器、绑定地址还是主机防火墙
服务已停和防火墙丢包需要不同的修法。先检查本地套接字,再把一次获准的外部尝试与日志对上。
VPN 在自己的端口上毫无回应,而两种可能原因需要相反的修法:要么没有进程打开套接字,要么套接字存在、而两台机器之间有东西拦下数据包。一条命令就能定下这个问题前半段的答案,所以它排在动手改任何防火墙规则之前。下面的顺序每步只排除一种解释,而不是再加一个猜测。正是这种在两者之间猜来猜去,把十分钟的诊断拖成一整晚。
假设你能登录服务器,并且客户端是真实配置而非扫描器。这两个前提都重要,因为笼统的探测回答不了与协议相关的问题。
套接字究竟存不存在
先从服务自己的说法入手:它有没有起来,更有用的是第一次启动时报了什么错。解析失败、缺失密钥或绑定错误会让监听器根本不存在,而进程可以退得足够安静,让状态行读起来模棱两可。显示 active 的单元本身不算证据,因为主进程可能还活着,而本该绑定端口的那个组件早已放弃。
systemctl status openvpn-server@server --no-pager
journalctl -u openvpn-server@server -n 30 --no-pager
ss -lunp
套接字清单是后续诊断所依赖的事实。要看本地地址那一列而不只是端口,因为回环绑定和绑到错误网卡的情况正是在那一列露出来。存在于 127.0.0.1 上的监听器运行得完好无缺,却仍然对你的笔记本不可见。
套接字在哪个地址和哪个地址族上应答
有两种错误从客户端看一模一样,却解释了大多数“连不上”的报告。绑到回环地址的服务器永远不接受另一台机器的流量,而只绑到 IPv4 地址的服务器永远不会应答拨同一主机 IPv6 地址的客户端。在对策略做任何假设之前,把套接字表里的地址和客户端实际拨的地址逐字比对。
把清单限定在一个端口,能让主机跑多个服务时仍然读得下去。sport 过滤器把端口和你正在测的传输层一起取:
ss -lun 'sport = :51820'
ss -ltnp 'sport = :1194'
协议那一列会改变整个答案
套接字表既按端口也按协议索引,而这是两条独立的记录。在 1194 上应答 TCP 的服务,对 UDP 1194 上有没有东西在听毫无说明,而客户端只会用到其中一种。确认服务器配置选的是哪种传输层、客户端配置发的是哪种,然后再去找那一行。
UDP 还有第二道弯:未认证的探测不是服务必须回答的错误。一次把端口报成静默的扫描,量到的是服务的克制而不是可用性,所以要用真实客户端和配置去测。
一次尝试,三处可查
从获准的客户端只做一次尝试,并把时间记到秒。然后为这个时间窗读三处来源:提供商的网络规则或控制台、主机防火墙的计数器或日志、服务自己的日志。只做一次,才让这三份说法可以比对,也比重复一次谁都没记时间戳的尝试更省事。
两种结果指向相反方向。如果没有任何数据包到达主机,那就是路径在丢包,监听器无关。如果数据包到达套接字而被服务拒绝,路径没问题,答案在协议、加密或凭据上。为已经接受过连接的服务再开一个端口,只会让下一次诊断更难而不是更容易。
改规则之前先把阶段说清楚
协商刚开始和认证失败是同一种故障,而隧道建起来了但转发卡住是完全另一种。先把阶段说清楚,修法才能保持狭窄:凭据问题不是防火墙规则能修的,数据路径问题也不是重启能修的。
用能回答问题的最窄诊断。在管理员控制下对单个端口做临时抓包观察是合理工具;把整个防火墙关掉则不是,因为结果会变得无法归因。ss 文档涵盖了上面用到的过滤器,而且它比任何抓包都更便宜的第一步。记下你证明了两个分支中的哪一个,下一次发生就能从已知答案开始。