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

hbp*_*hbp 34 openvpn dns-server

我在我的 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
Run Code Online (Sandbox Code Playgroud)

正如此处建议的那样,我尝试使用服务器的 IP(例如 11.22.33.44)。所以代替

    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.222.220"
Run Code Online (Sandbox Code Playgroud)

我只是把

push "dhcp-option DNS 11.22.33.44"
Run Code Online (Sandbox Code Playgroud)

在上面的 openvpn.conf 中。但是,在重新启动 openvpn 后,我看到我的客户端仍然可以连接到 OpenVPN 服务器,但无法再呈现任何页面。

这里有什么问题?我怎么解决这个问题?

vsk*_*iev 35

Windows 10客户端上,您需要将以下指令添加到client.ovpn

script-security 2                                                                                                       
dhcp-option DNS 10.0.8.1                                                                                           
dhcp-option DOMAIN example.lan                                                                                   
Run Code Online (Sandbox Code Playgroud)

Windows 不需要更多指令。

Ubuntu 16.04客户端上,您可能需要将以下指令添加到client.ovpn

up /etc/openvpn/update-resolv-conf                                                                                      
down /etc/openvpn/update-resolv-conf  
Run Code Online (Sandbox Code Playgroud)

适用于 Windows 的最新 OpenVPN 客户端版本无法DOMAIN-SEARCH正确识别选项,并且可以使用DOMAIN.


dig*_*ons 9

你说“它似乎有效”。你是如何验证这一点的?您是基于服务器启动时没有任何错误的事实,还是您实际上对它执行了一些查询?

我要做的第一件事是使用 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
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么您必须再次查看 DNS 配置。

这是主 DNS 服务器还是缓存 DNS 服务器?您是要查询本地资源还是互联网资源?如果您不将 DNS 服务器推送到客户端,它是否会按预期工作?

如果您通过 OpenVPN 服务器传输所有流量,您就不必再担心 ISP 阻止公共 DNS 服务器了,因为就您的 ISP 而言,您只会生成到 VPS 的流量;除非 VPS 在同一个 ISP 后面。


Jon*_*297 6

事实证明,如果您尝试从非 Windows 客户端进行连接,则需要执行一些额外的步骤:

在 Linux 上

将此行放在您的客户端配置(client.confxxxx.ovpn文件)上

dhcp-option DNS 11.22.33.44
Run Code Online (Sandbox Code Playgroud)

这样调用OpenVPN客户端:

$ openvpn --script-security 2 --config xxxx.ovpn
Run Code Online (Sandbox Code Playgroud)

那对我有用。