我正在尝试将我的 D-Link DSR-250n 路由器连接到我的 OpenVPN 服务器。我已遵循本指南在启动和运行服务器方面,可以使用适用于 Windows 的 OpenVPN 客户端和 Android OpenVPN 客户端成功建立客户端连接并解析名称。这是我的server.conf
配置:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 10.8.0.1"
我已将证书添加到 DSR-250n,确保协议 (UDP)、加密和算法正确,并将其指向 VPN(没有其他配置选项);它似乎连接没有问题,路由器日志也没有报告错误。建立连接后,我既可以从连接到 DSR-250n 路由器的计算机 ping VPN 服务器 IP,也可以毫无问题地通过 SSH 连接到 VPN 服务器。路由器连接后,我似乎无法使用其内置工具从路由器或任何连接到路由器的计算机解析名称。在所有 VPN 服务器、路由器和本地计算机上,我都硬编码了 Google DNS 服务器 8.8.8.8、8.8.8.4。
因此,我可以连接到服务器,并且有一个看似良好的 VPN 连接,允许我通过 SSH 连接到服务器本身 - 一旦到达那里,我就可以毫无问题地跟踪路由名称。
我尝试过的:
DSR-250n 具有 DNS 代理功能,允许连接的计算机使用路由器的 IP 作为 DNS - 我已打开和关闭此功能,但功能没有任何变化。我并没有真正更改上述服务器配置,因为我不确定从哪里开始。
任何帮助都值得感激!
EDIT1-更新信息。当来自路由器的 VPN 客户端连接处于活动状态时,我具有以下连接:
从路由器:
- 除了我的本地 192.168.1.x 网络和 VPN 的公共 IP 之外,我无法 ping 通任何直接公共 IP。
- 我无法 ping 通 10.8.0.1 的 VPN 的私有子网。
- 我无法解析任何互联网名称,并且跟踪路由完全失败。
从通过 DHCP 连接到路由器的计算机:
- 除了我的本地 192.168.x 网络和 VPN 的公共 IP 之外,我无法 ping 通任何直接公共 IP。
- 我无法 ping 通 10.8.0.1 的 VPN 的私有子网。
- 我无法解析任何互联网名称,并且跟踪路由完全失败。
当我使用路由器作为客户端与 OpenVPN 服务器建立活动连接时,下面是路由器本身的 IP4 路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.1 10.8.0.9 255.255.255.255 UGH 0 0 0 tun1
x.x.x.x (VPN server public IP) 99.231.136.1 255.255.255.255 UGH 0 0 0 eth1
10.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 bdg1
99.231.136.0 0.0.0.0 255.255.254.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.8.0.9 128.0.0.0 UG 0 0 0 tun1
128.0.0.0 10.8.0.9 128.0.0.0 UG 0 0 0 tun1
0.0.0.0 99.231.136.1 0.0.0.0 UG 0 0 0 eth1
答案1
我的印象是,您似乎没有遵循链接到信件的说明中的 dnsmasq 部分,并且您也可能遇到了路由问题。
如果您从 ovpn 服务器配置以外的所有地方删除 google dns 硬编码,会发生什么情况?根据您的描述和您提供的链接,以下是有关 dns 的一些额外推理:
我记得将 resolv.conf 与 dnsmasq 一起使用,因为我总是使用静态公共地址,没有动态分配的 dns:es。然而,链接中的说明似乎基于一种获取 dhcp 分配的 dns 地址的变通方法。由于您正在与 google dns 地址对齐,而不是动态分配的地址,因此我会特别注意那部分。在通过另一个后端 dns 代理链接客户端之前,请确保通过 dnsmasq 进行解析有效。如果您遵循该指南,请确保您了解每个步骤的作用,因为您可能需要稍微更改 dnsmasq 配置过程以使其变得简单和灵活。
此外,由于该解决方案是专门围绕 dnsmasq 拾取所有 dns 查询并转发它们而设计的,您在 ovpn 服务器配置中将 google dns 地址硬编码为主要和次要解析器,将 dnsmasq 地址作为第三解析器(我假设您在所有可能的地方都这样做,正如您所写的,您甚至在客户端也进行了硬编码),当您通过 vpn 连接时,在通过 dnsmasq 完成解析之前可能会出现双倍的 dns 超时。
这当然不是最佳选择,您应该删除对 google dns 的引用,除非在 ovpn 服务器的 dnsmasq 指南中为外部解析器配置指定了引用。当您让它工作时,您可以再次在客户端计算机的 dns 客户端中添加 google dns 地址。然后,当您连接时,应该将它们暂时替换为来自 openvpn 的地址。
此外,考虑一下 dlink 路由器在其动态 dns 客户端中不接受三个 dns 服务器地址的可能性,同时考虑硬编码地址与同时动态分配给 dlink 之间发生冲突的可能性。也许它不能很好地处理这样的配置?我无法访问您的 dlink 型号,也不想阅读其文档,只是想指出一些可能的错误来源。
所以我确实觉得你需要简化 DNS 部分:
- 确保 ovpn 服务器 dnsmasq 单独解析为 google dns 和 google dns。
- 删除所有对 google dns 的引用,但 dnsmasq 服务器 resolv.conf 或其接口文件除外,如您所参考的指南中所示。
- 在您的 dlink dns 客户端中使用您的 dnsmasq 地址作为 dns 服务器地址,首先尝试对其进行硬编码,如果有效,则尝试从 ovpn 服务器动态推送它。
- 当上述操作有效时,在客户端尝试使用 dlink 或 dnsmasq 地址,具体取决于 dlink 中的 dns 代理切换。
如果您的 ovpn 服务器上除了默认路由指示的路径之外还有其他网络,并且您依赖这些网络来完成到互联网的最后一段旅程,则需要使用“推送“路由 xxx0 255.255.255.0””指令将这些路由推送到 dlink。只是为了排除这种情况。
为了让 vpn 网络上的客户端能够相互访问,请在 ovpn 服务器配置中使用“客户端到客户端”指令。
此外,您的 dlink 路由器路由表对我来说确实看起来有点奇怪。我可能错了,因为 dlink 可能以一种不熟悉的方式呈现其路由表(对我来说)。当我将它与我可以访问的正常运行的 ovpn 客户端进行比较时,它看起来是您将连接 dlink 的内部网络和 vpn 隧道网络都放置在子网 10.8.0.0/24 上,同时配置了路由而不是桥接 vpn。这会给路由部门带来麻烦。
如上所述,我不确定 dlink 如何以路由表的形式呈现自身,因此有关您的网络的其他详细信息(特别是内部 ip 子网的规划方式以及关键服务器 ip 地址,例如 ovpn 服务器地址、dnsmasq 地址、内部 vpn 网络空间、没有 vpn 的内部客户端子网)将使您更容易处理这部分。根据需要进行混淆,但要使其具有代表性和一致性。
我希望这会有所帮助。