如何通过路由解决强制 DNS?

问题描述 投票:0回答:1

我有一个运行 OPNsense 的路由器、一个内部 DNS 服务器 (AdGuard Home) 和一个位于

10.1.2.3:443
的 Web 服务器,通过
test.example.com
提供内容。我正在使用这样的分割 DNS:

  • 内部用户:我的LAN的DNS服务器说
    test.example.com IN A 10.1.2.3
    ,流量直接进入内部服务器
  • 外部用户:我的外部 DNS 服务器说
    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 访问(仅在内部))吗?我明白发生了什么,但我'我真的不擅长将其转化为我应该创建的正确防火墙或路由规则。

我尝试过的,或者不可行的事情:

  • 我的 DHCP 设置仅通告我的内部 DNS 服务器,没有后备。不过,如果客户端选择自己的 DNS 服务器,那并不重要。 在路由器上,我尝试阻止出站端口 53 流量,并使用伪装将所有出站端口 53 流量重定向到我自己的 DNS 服务器。但这是一场打地鼠游戏,尤其是随着越来越多的设备使用 DoH 并且拦截变得越来越困难。此外,一些表现不佳的设备如果无法到达预期的 DNS 服务器,就会变得非常生气。
  • 某些客户端设备允许您间接或直接控制 DNS。但是,对我来说配置
  • 每个
  • 客户端设备是不合理的,因为这会给我的用户带来正确配置设备的负担。
dns opnsense
1个回答
0
投票
如何告诉 OPNsense“如果 LAN 用户请求 WAN IP 端口 443,请将其发送到 10.1.2.3?”

这是通过 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 内部地址的数据包产生影响。

© www.soinside.com 2019 - 2024. All rights reserved.