我在公共 IP 上的 UDP 端口 53 上设置了一个 OpenVPN 服务器。所有连接的客户端都会被推送到外部 DNS 服务器,例如 8.8.8.8 (Google) 和 OpenDNS。
有时,连接的 VPN 客户端上的解析会停止工作,并且我会在 OpenVPN 日志中收到奇怪的数据包。现在我的问题是为什么会这样?
当 VPN 客户端(假设 192.168.1.22)执行 DNS 查询时,该查询应转到 8.8.8.8:53,然后应将 UDP 响应数据包通过高 UDP 端口发送回 192.168.1.22。
有任何想法吗?
答案1
如果配置正确,设置应该可以工作。封装的工作方式如下:
原始数据包(DNS-Q
):
[src=YourIP_wlan0:udp/random1] [dst=Google:udp/53]
新的数据包(B
),经过 OpenVPN 处理:
[src=YourIP_tun0:udp/random2] [dst=VPNserver:udp/53] [DNS-Q]
新的数据包(C
),在您的WIFI提供商NAT之后:
[src=YourIP_Wifi:udp/random2] [dst=VPNserver:udp/53] [DNS-Q]
- 数据包通过 UDP/53(加密)发送到 VPN 服务器。
- VPNserver 解密数据包,打开它,查看原始第 3 层地址并将其转发到其默认网关(HomeRouter)。
在发送数据包之前,HomeRouter 会执行 NAT。当数据包发送到 Google 时,它现在如下所示:
[src=HomeRouter_PublicIP:random_port1] [dst=Google:udp/53]
Google 获取数据包,处理 DNS 查询,并使用 DNS-REPLY 回复 HomeRouter_PublicIP(请注意,这不是 DNS 转发,只是 NAT)。返回数据包 (DNS-R) 现在如下所示:
[src=Google:udp/53] [dst=HomeRouter_PublicIP: random_port1]
HomeRouter收到回复数据包并进行反向NAT:
[src=Google:udp/53] [dst=YourIP_tun0:random_port1]
HomeRouter 将数据包转发到VPN服务器。
VPN服务器对数据包进行加密:
[src=VPNserver:udp/53] [dst=YourIP_WiFi: random_port2] [DNS-R]
VPN服务器通过互联网发送数据包。
你的机器收到数据包,然后解密/解封它,如下所示:
[src=Google:udp/53] [dst=YourIP_wlan0: random_port1]
DNS解析完成。
答案2
端口 53 udp 是为 DNS 流量保留的。即使您可能已让 OpenVPN 在该端口上运行,但您也严重阻碍了服务器解析 DNS 查询的能力。我强烈建议您在尝试修复您看到的问题之前,使用其他端口,即该机器上其他服务未使用的端口。
答案3
您需要检查主路由器,以防出现数据包重定向。例如,任何对 53 的请求都会被路由到 ISP DNS。