我有一台运行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配置以使用它.