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


27

我在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服务器,但是无法再呈现任何页面。

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

Answers:


31

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

script-security 2                                                                                                       
dhcp-option DNS 10.0.8.1                                                                                           
dhcp-option DOMAIN example.lan                                                                                   

Windows不再需要其他指令。

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

up /etc/openvpn/update-resolv-conf                                                                                      
down /etc/openvpn/update-resolv-conf  

Windows的最新OpenVPN客户端版本无法DOMAIN-SEARCH正确识别选项,因此可以使用DOMAIN


这是否需要特定的最低OpenVPN版本?
0xC0000022L

我认为您应该使用VPN网关IP(10.0.8.1),而不是路由器的本地网关ip地址(192.168.1.1)。这是一个通用的路由器IP地址,它们直接连接到的不受信任的网络路由器可能位于192.168.1.1地址。
carlin.scott

8

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

我要做的第一件事是使用nslookup或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服务器?您要查询本地资源还是Internet资源?如果不将DNS服务器推送到客户端,是否可以按预期工作?

如果您将所有流量都通过O​​penVPN服务器传递,则无需再担心ISP会阻止公共DNS服务器,因为就ISP而言,您只在生成通往VPS的流量。除非VPS在同一ISP后面。


那么ubound可以通过您提到的所有测试以及更多测试,所以我很确定这不是问题。至于为什么我需要使用自己的DNS服务器,我已经体验到,当我如上所述使用公共DNS时,伊朗的客户端(其中数百万个站点被阻止)无法通过其openvpn连接获得任何页面,尽管事实是他们可以连接到openvpn服务器。因此,努力。谢谢
hbp 2011年

1
您是否确定他们一旦连接就能通过IP地址获得网页?这只会确保它确实是DNS问题,而不是路由问题。设置OpenVPN使其能够连接到服务器但由于缺少返回路由而无法获得任何流量时,这非常常见。
digitaladdictions

3

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

在Linux上

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

dhcp-option DNS 11.22.33.44

通过以下方式调用OpenVPN客户端:

$ openvpn --script-security 2 --config xxxx.ovpn

那对我有用。


Unrecognized option or missing or extra parameter(s) in [CMD-LINE]:1: script-security
哈维尔·巴齐

1

于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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.