我一直在试图find解决这个问题的办法,但到目前为止还没有find答案,所以我希望你们能帮助我。
我有一台运行Ubuntu 10.04的服务器,它有一个静态IP地址和一个指向它的URL,例如server.foo.com
在这个服务器上,我得到一个运行以下configuration的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
客户端configuration如下:
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
正如你可以在服务器configuration中看到的,我也有一个运行在其上的DNS服务器。 这个服务器是一个dnsmasq服务器,在/etc/dnsmasq.conf中有以下configuration:
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与我的公开url完全相同。 我还创build了其他DNS条目进行testing,例如address = / server2.foo.com / 10.8.0.1
现在我已经在这台服务器上运行了一个HTTP服务,我只想让我的局域网内的用户以及OpenVPN客户端能够访问它。 我阻止了ufw中的所有传入stream量,除了:
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位跟踪路由表明,例如server2.foo.com被发送到一个跳转到10.8.0.1,但server.foo.com通过公共DNS服务器,并试图连接到我的公共静态IP,这被阻塞,从而超时。
到目前为止,我已经尝试了一些东西,但它仍然不起作用:
对不起,这么长的post可能是一个很短的问题。 我希望有人能帮助我。
最好的问候,迈克。
我认为你的设置将打破或不工作:
您的OpenVPN客户端configuration使用server.foo.com的公共地址连接到OpenVPN服务器。 这个地址在build立VPN隧道之前将被查询,显然。
在使用dnsmasqconfigurationbuild立隧道之后,您尝试使用OpenVPN IP推送server.foo.com的DNS条目。 OpenVPN客户端忽略它(因为它已经知道server.foo.com,因为它必须查找它来build立隧道),否则它会尊重它,然后放弃隧道,因为OpenVPN客户端configuration将指向一个现在不存在的IP地址。 后者很可能在您的OpenVPN会话期间发生,具体取决于server.foo.com的公有IP的DNS服务器的TTL。
TL; DR:你基本上是想告诉你的客户端有关server.foo.com的冲突信息。 我想不出有什么好办法去做你心目中的事情。 另外一种方法是设置第二个DNS条目Aloggingvpnserver.foo.com,它指向与server.foo.com相同的IP,然后更改OpenVPNconfiguration以使用它。
虽然很晚,但是一种可能的解决方法可能是将所有客户端stream量通过隧道(如果客户端场景允许)。 您需要将以下指令添加到您的服务器的configuration文件。 例如推送“redirect网关def1”有关详细信息,请参阅这里这样客户端将不检查公共DNS。