![如何将我自己的 DNS 服务器推送到 OpenVPN?](https://linux22.com/image/563506/%E5%A6%82%E4%BD%95%E5%B0%86%E6%88%91%E8%87%AA%E5%B7%B1%E7%9A%84%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E9%80%81%E5%88%B0%20OpenVPN%EF%BC%9F.png)
我已经定义了一个未绑定我的 VPS 上的 DNS 服务器似乎可以正常工作。我需要使用 DNS 服务器而不是公共 DNS 服务器,因为某些 ISP 已阻止公共 DNS IP。我的 openvpn.conf 文件是:
dev tun
proto tcp
# Notice: here I set the listening port to be 80 to avoid possible port blockage
port 80
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
user nobody
group nogroup
server 10.8.0.0 255.255.255.0
persist-key
persist-tun
#status openvpn-status.log
#verb 3
client-to-client
push "redirect-gateway def1"
#pushing public DNS IPs
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.222.220"
comp-lzo
正如建议的那样这里,我尝试使用我的服务器的 IP(例如 11.22.33.44)。因此,
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.222.220"
我刚刚放
push "dhcp-option DNS 11.22.33.44"
在上面的 openvpn.conf 中。但是,重新启动 openvpn 后,我发现我的客户端仍然可以连接到 OpenVPN 服务器,但无法再呈现任何页面。
这里可能有什么问题?我该如何解决这个问题?
答案1
在Windows 10
客户端,您需要添加以下指令client.ovpn
:
script-security 2
dhcp-option DNS 10.0.8.1
dhcp-option DOMAIN example.lan
窗口不再需要指令。
在Ubuntu 16.04
客户端,您可能需要添加以下指令client.ovpn
:
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Windows 版最新 OpenVPN 客户端版本无法DOMAIN-SEARCH
正确识别选项,并且无法使用DOMAIN
。
答案2
您说“它似乎有效”。您如何验证这一点?您是基于服务器启动时没有任何错误这一事实,还是您实际上对它执行了一些查询?
我要做的第一件事是使用 nslookup 或 dig 连接到未绑定的服务器并执行一些查询。我知道 dig 现在更流行,但我更了解 nslookup。
$ nslookup
> server 11.22.33.44
Default server: 11.22.33.44
Address: 11.22.33.44#53
> set type=A
> www.google.com
Server: 11.22.33.44
Address: 11.22.33.44#53
Non-authoritative answer:
www.google.com canonical name = www.l.google.com.
Name: www.l.google.com
Address: 74.125.225.52
Name: www.l.google.com
Address: 74.125.225.48
Name: www.l.google.com
Address: 74.125.225.49
Name: www.l.google.com
Address: 74.125.225.50
Name: www.l.google.com
Address: 74.125.225.51
如果这不起作用,那么您必须再次查看 DNS 配置。
这是主 DNS 服务器还是缓存 DNS 服务器?您尝试查询本地资源还是互联网资源?如果您不将 DNS 服务器推送到客户端,它是否能按预期工作?
如果您通过 OpenVPN 服务器传输所有流量,那么您就不必再担心 ISP 会阻止公共 DNS 服务器,因为就 ISP 而言,您只会向您的 VPS 生成流量;除非 VPS 位于同一个 ISP 后面。
答案3
事实证明,如果您尝试从非 Windows 客户端连接,则需要执行几个额外的步骤:
在 Linux 上
将此行放在您的客户端配置(client.conf
或xxxx.ovpn
文件中)上
dhcp-option DNS 11.22.33.44
通过以下方式调用OpenVPN客户端:
$ openvpn --script-security 2 --config xxxx.ovpn
这对我有用。
答案4
于 2018 年 9 月 13 日在 Ubuntu 18.04 上测试
还有其他有用的命令可以通过命令行设置您需要的内容。但在我的例子中,您可以使用命令行和 GUI 来控制 VPN 连接。
sudo nmcli connection add type vpn vpn-type openvpn con-name la.vpn.contoso.com ifname --
ifname --
是默认必需的,但不会影响任何内容
sudo nmcli connection modify la.vpn.contoso.com ipv4.dns 172.16.27.1 sudo nmcli connection modify la.vpn.contoso.com ipv4.dns-search int.contoso.com sudo nmcli connection modify la.vpn.contoso.com ipv4.never-default yes
never-default
不应使用远程网关作为默认路由
更有趣的是最后的润色:
nmcli connection modify la.vpn.contoso.com vpn.data 'ca = /tmp/la.vpn.contoso.com/you/ca.crt, key = /tmp/you.key, dev = tun, cert = /tmp/you.crt, cert-pass-flags = 1, comp-lzo = adaptive, remote = la.vpn.contoso.com:1194, connection-type = tls'
之后,您可以使用 GUI 控制 vpn 或使用以下命令:
sudo nmcli --ask connection up la.vpn.contoso.com sudo nmcli connection down la.vpn.contoso.com