Mic*_*ael 5 domain-name-system ubuntu openvpn dnsmasq
我一直在努力寻找这个问题的解决方案,但到目前为止还没有找到答案,所以我希望你们能帮助我。
我有一台运行 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
Run Code Online (Sandbox Code Playgroud)
客户端配置如下:
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
Run Code Online (Sandbox Code Playgroud)
正如您在服务器配置中看到的那样,我也在其上运行了一个 DNS 服务器。这个服务器是一个dnsmasq服务器,在/etc/dnsmasq.conf中有如下配置:
interface=tun0
listen-address=127.0.0.1
dhcp-authoritative
cache-size=0
no-negcache
Run Code Online (Sandbox Code Playgroud)
在 /etc/dnsmasq.d/ 中有将 URL 路由回该服务器的文件,这些文件应该被推送到 VPN 客户端。其中最重要的包括:
address=/server.foo.com/10.8.0.1
Run Code Online (Sandbox Code Playgroud)
请注意,此 URL 与我的公共 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
Run Code Online (Sandbox Code Playgroud)
现在终于来解决我的问题了。当 OpenVPN 客户端连接时,来自 dnsmasq 的 DNS 条目应该被推送到客户端,他们这样做。
然而,条目 server.foo.com 显然被忽略了,可能有利于公共 DNS。当我在 LAN 外但连接到 VPN 的情况下在 Firefox 或 Chrome 中键入 server.foo.com 时,出现超时。10.8.0.1 和 server2.foo.com 等其他条目都可以工作。
Windows 7 32 位中的 traceroute 显示例如 server2.foo.com 被发送到 10.8.0.1,但 server.foo.com 通过公共 DNS 服务器并尝试连接到我的公共静态 IP,这被阻塞,从而导致超时。
到目前为止,我已经尝试了很多东西,但它仍然不起作用:
抱歉,对于一个很短的问题,写了这么长的帖子。我希望有人可以帮助我。
最好的问候,迈克。
我认为你的设置将会损坏或不起作用:
您的 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 配置以使用它。
| 归档时间: |
|
| 查看次数: |
4651 次 |
| 最近记录: |