我有一个运行 OPNsense 的路由器、一个内部 DNS 服务器 (AdGuard Home) 和一个位于
10.1.2.3:443
的 Web 服务器,通过 test.example.com
提供内容。我正在使用这样的分割 DNS:
test.example.com IN A 10.1.2.3
,流量直接进入内部服务器test.example.com IN A [my WAN IP]
,流量通过路由器转发到内部服务器的端口但是,存在一个问题:某些平台(Android 是最大的罪犯)强制使用自己的 DNS 设置,要么是 Google 自己的 DNS(如
8.8.8.8
),要么是基于 HTTP (DoH) 的 DNS。这意味着内部用户会解析到外部IP,并且流量不会到达服务器。
有没有办法在路由器级别解决这个问题?我如何告诉 OPNsense“如果 LAN 用户请求 WAN IP 端口 443,请将其发送到
10.1.2.3
?这样做会破坏我的 OPNsense Web UI(可通过 HTTPS 访问(仅在内部))吗?我明白发生了什么,但我'我真的不擅长将其转化为我应该创建的正确防火墙或路由规则。
我尝试过的,或者不可行的事情:
这是通过 OPNsense 现有的 DNAT(端口转发)功能来完成的。最有可能的是,它可以通过您用于从 WAN 访问的相同规则来处理。这不是问题所在。
实际问题是
其他方向的流量不会通过 OPNsense。您的服务器知道客户端位于同一子网中,并将直接向该客户端的 MAC 地址发送响应,而不给 OPNsense 将 SNAT 应用于回复数据包的机会。 因此,即使客户端向 WAN_IP 发送了数据包,它也会收到来自 10.1.2.3 的响应,并且会忽略它,因为它期望收到来自 WAN_IP 的响应。
有两种方法可以解决此问题: a) 将服务器放在与客户端不同的子网中,以便
所有流量自然流经路由器;或 b) 在 OPNsense 中启用“NAT Hairpin”选项,以便它使用 SNAT 欺骗来强制服务器向路由器发送其回复。
这样做会破坏我的 OPNsense Web UI(只能在内部)通过 HTTPS 访问吗?不一定;如果规则设置为仅匹配以 WAN_IP 作为目的地的数据包,则它不会对发送至 OPNsense 内部地址的数据包产生影响。