如何将我自己的 DNS 服务器推送到 OpenVPN?

如何将我自己的 DNS 服务器推送到 OpenVPN?

我已经定义了一个未绑定我的 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.confxxxx.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

相关内容