运维开发网

ubuntu – OpenVPN:并非所有DNS条目都从服务器推送到客户端. (的dnsmasq)

运维开发网 https://www.qedev.com 2020-04-30 12:30 出处:网络 作者:运维开发网整理
我一直试图找到解决这个问题的方法,但到目前为止还没有找到答案,所以我希望你们能帮助我.
我一直试图找到解决这个问题的方法,但到目前为止还没有找到答案,所以我希望你们能帮助我.

我有一台运行Ubuntu 10.04的服务器,它有一个静态IP地址和一个指向它的URL,比如server.foo.com

在这台服务器上,我得到了一个运行以下配置的OpenVPN服务器:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option DOMAIN foo.com"
keepalive 10 120
tls-auth ta.key 0
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 1
plugin /usr/lib/openvpn/openvpn-auth-pam.so vpnlogin

客户端配置如下:

client
dev tun
proto udp
remote server.foo.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
ca ca.crt
cert server.crt
key server.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 1
auth-nocache

正如您在服务器配置中看到的那样,我也在其上运行了一个DNS服务器.此服务器是dnsmasq服务器,在/etc/dnsmasq.conf中具有以下配置:

interface=tun0
listen-address=127.0.0.1
dhcp-authoritative
cache-size=0
no-negcache

在/etc/dnsmasq.d/中有一些文件可以将URL路由回该服务器,应该将其推送到VPN客户端.其中最重要的包括:

address=/server.foo.com/10.8.0.1

请注意,此URL与我的公共网址完全相同.我还创建了其他要测试的DNS条目,例如address = / server2.foo.com / 10.8.0.1

现在我在这台服务器上运行了一个HTTP服务,我只想允许局域网内的用户和OpenVPN客户端访问它.我已经阻止了ufw中的所有传入流量,例外情况是:

To         Action       From
1194       ALLOW        Anywhere
53         ALLOW        10.8.0.0/24
80/tcp     ALLOW        10.8.0.0/24
80/tcp     ALLOW        192.168.0.0/24

现在终于来解决我的问题.当OpenVPN客户端连接时,来自dnsmasq的DNS条目应该被推送到他们所做的客户端.

然而,条目server.foo.com显然被忽略了,也许有利于公共DNS.当我在Firefox或Chrome中键入server.foo.com,同时在局域网外但连接到VPN时,我会超时. 10.8.0.1,以及server2.foo.com等其他条目都可以正常工作.

Windows 7 32位中的traceroute显示,例如server2.foo.com在一次跳转中发送到10.8.0.1,但server.foo.com通过公共DNS服务器并尝试连接到我的公共静态IP,被阻止,从而给出超时.

到目前为止,我已经尝试了很多东西,但它仍然不起作用:

>设置DNS服务器权威(如上面的dnsmasq.conf中所示:dhcp-authoritative).

>在server.conf中为OpenVPN推送“dhcp-option DOMAIN foo.com”.

很抱歉这么长的帖子可能是一个很短的问题.我希望有人可以帮助我.

最好的祝福,

麦克风.

我认为你的设置会破坏或不起作用:

您的OpenVPN客户端配置使用server.foo.com的公共地址连接到OpenVPN服务器.显然,在建立VPN隧道之前将查找该地址.

在使用dnsmasq配置建立隧道后,您尝试使用OpenVPN IP为server.foo.com推送DNS条目.要么OpenVPN客户端忽略它(因为它已经知道server.foo.com,因为它必须查找它以建立隧道)或它会尊重它,然后丢弃隧道,因为OpenVPN客户端配置将指向一个现在不存在的IP地址.后者可能在您的OpenVPN会话期间发生,具体取决于server.foo.com的公共IP的DNS服务器的TTL.

TL; DR:你基本上是想告诉你的客户有关server.foo.com的信息.我想不出一个好的方法来做你想到的.另一种方法是设置第二个DNS条目A记录vpnserver.foo.com,它指向与server.foo.com相同的IP,然后更改您的OpenVPN配置以使用它.

0

精彩评论

暂无评论...
验证码 换一张
取 消