SecureNAT 是一个勾选框,却同时打开两项服务,围绕它的多数困惑正源于此。虚拟 DHCP 服务器把地址、掩码、网关,往往还有解析器一起交给客户端。虚拟 NAT 则借用服务器主机自己的网络栈,把数据包送出那道网关。两者在配置里比邻而居,却各自独立地失效:客户端可能租约完美却没有能用的通路,也可能通路可用而设置指向了错误的解析器。把它们当作两个决定来验证,诊断就会变短。

一个勾选框背后的两项服务

虚拟 DHCP 一侧回答的是配置问题:这个客户端在这个虚拟集线器内部拿到什么设置。虚拟 NAT 一侧回答的是转发问题:客户端把数据包发往集线器之外的地址时,服务器是否翻译并转发它。前者属于集线器本地,不需要上游网络。后者完全取决于主机。

虚拟主机接口属于第一个决定,而不是第二个。它的地址,默认往往是 192.168.30.1 之类,就是 DHCP 服务所提供的网关。它不是服务器的公网监听地址,两者混淆会造出针对一台在该网络上并不存在的机器的防火墙规则和客户端设置。

决定 1:地址由谁提供

如果启用了虚拟 DHCP,客户端应当从你配置的池中获得租约,网关是虚拟主机接口,解析器是你指定的那个。要查看租约,而不是客户端的状态文字,因为「已连接」描述的是隧道,而不是地址分配:

vpncmd localhost /SERVER /CMD SecureNatStatusGet
vpncmd localhost /SERVER /CMD DhcpGet
ip -4 addr show
ip route

动手排查别的问题之前,值得先了解两种失效方式。客户端若残留着旧设计留下的静态地址,它会保留该地址并忽略租约,看起来就像 DHCP 拒绝应答。而桥接网段上若存在第二个 DHCP 源,就会争抢同一批客户端,造成地址时有时无,以及一个无法复现问题的支持队列。

地址池重叠也属于这里。如果虚拟 DHCP 池与主机的局域网子网或另一个集线器的池重叠,客户端拿到的地址会路由得含混不清,之后每一次测试都无法得出定论。

决定 2:谁把流量送出虚拟网关

启用虚拟 NAT 后,从集线器出去的流量由服务器翻译,并经主机路由表送出。也就是说转发链是:客户端到虚拟网关,虚拟 NAT 到主机网络栈,主机网络栈到它自己的默认路由。每一环都可能在不触碰其他环节的情况下失效,而且失效特征各不相同。

测试第二个决定,要用必须离开集线器的东西,而不是集线器内部的东西。ping 虚拟网关只能证明第一环,证明不了更多:

vpncmd localhost /SERVER /CMD NatGet
vpncmd localhost /SERVER /CMD NatTable
dig +short example.com
ip route get 203.0.113.10

如果名称解析可用但连不上公网地址,你处在转发链里,而不是 DHCP 里。如果两者都失败,先查解析器,因为被下发为不可达内网地址的解析器,会让一条本来可用的通路看起来彻底断掉。

SecureNAT 的转发由服务器进程实现,而不是你用网桥时会用到的那条内核转发路径。这很方便,也比桥接慢;同时也意味着主机自身的防火墙规则和路由决策仍然作用于被翻译的流量。虚拟 NAT 并不绕过主机的策略,而是在使用它。

主机自身的通路是第三件事

以上一切都假设服务器主机能到达目的地。没有可用上游路由、出口策略严苛,或者不具备相应地址族的主机,无论集线器配置多么正确,都会在第二个决定上失败。在把它的故障归咎于 SoftEther 之前,请先在隧道之外单独检查主机。

SecureNAT 也不是通往服务器所连每一个网络的授权。它只翻译并转发到达它的流量;主机能到哪里,仍然是主机防火墙和路由的职责,而指望隧道来授予访问权的设计,离授权过度只差一条坏规则。

地址族值得单独检查。一个可用的 IPv4 DHCP 例子并不能证明你的构建具备每一项 IPv6 能力,所以在承诺双栈行为之前,请查阅你实际运行版本的说明。说明中的 SecureNAT 部分涵盖当前版本的虚拟 NAT 与 DHCP 功能。

用各自的测试验证每个决定

用租约检查来接受第一个决定:地址在池内、网关等于虚拟主机接口、解析器是你配置的那个。用客户端发出的外连请求,加上查看服务器上的 NAT 表,来接受第二个决定;因为会话数上升是翻译确实在发生、而不只是被启用的唯一直接证据。

然后把这种拆分写进设计记录:哪个组件提供地址、哪个组件负责转发、流量从哪个主机接口出去。当重启改变了行为,那份记录会告诉你该查三者中的哪一个,而不是把一切重启一遍、指望症状自己转移。

还有一项决定也该写进记录,哪怕今天你并不做它:SecureNAT 与本地网桥是同一个集线器的两种不同设计,而两者都需要的集线器,是需要另一套方案的集线器。有意识地选择,写下理由,下一个人就不必从运行中的配置里反推。

相关文章