我正在 Ubuntu 12.10 上使用网络管理器连接到 openvpn 服务器。连接工作没有问题。但是,当我连接时,我想将默认 DNS 服务器更改为 VPN 网络上的服务器。这样我就可以使用仅在 VPN 网络上定义的域名。有没有办法可以使用网络管理器自动执行此操作?
如果我需要的话,我还可以更改 openvpn 服务器上的设置。
谢谢!
答案1
- 至于服务器配置,OpenVPN 服务器应该发出类似的信息
push dhcp-option DNS XXX.XXX.XXX.XXX
push dhcp-option DOMAIN mylocaldomain.local
(查看更多详情这里)。XXX.XXX.XXX.XXX是您的 DNS 服务器,mylocaldomain.local是您的本地域。当您在本地计算机上启动 OpenVPN 客户端输出(dhcp-option DNS ...、dhcp-option DOMAIN ...)时,可以轻松找到它。
- OpenVPN 客户端应更新 resolv.conf(在 14.04 上测试)
$ sudo openvpn --config client.ovpn --up /etc/openvpn/update-resolv-conf --down /etc/openvpn/update-resolv-conf --script-security 2
答案2
正如 @peterph 所指出的,轻量级 DNS 似乎是最好的选择。这是因为/etc/resolv.conf
只能真正处理一个 DNS。
所以我认为域名解析是 Linux 上的最佳选择。我在 CentOS 6 上使用了它,但其他配置应该都差不多。
- 使用类似的东西安装
yum install dnsmasq
(或 apt-get install)。 - 启动 dnsmasq (只是为了测试)
service dnsmasq start
。您可能需要停止并禁用其他 DNS 服务器(如果有)(检查 DNS 端口上正在运行的内容:)netstat -aonp | grep ":53"
。 - 编辑
/etc/dnsmasq.conf
- 很高兴拥有(参见人 dnsmasq用于描述):
- 需要域
- 假冒隐私
- 严格秩序
- 无法解决
- 为特定 URL 设置服务器。
- 语法是
server=/some URL base/dns server IP
- 例如: -向
server=/example.com/192.168.0.1
DNS 服务器询问.192.168.0.1
*.example.com
- 语法是
- 添加其他通用服务器。例如谷歌服务器:
- 服务器=8.8.8.8
- 服务器=8.8.4.4
- 可以选择禁用查找缓存(以避免某些服务器断开连接或其他情况时出现缓存问题):
- 缓存大小=0
- 很高兴拥有(参见人 dnsmasq用于描述):
- 重新加载配置
service dnsmasq restart
。 - 为 NetworkManager 设置 DNS(如果您使用它)
- 编辑
/etc/sysconfig/network-scripts/ifcfg-*
(更改 DNS1:)DNS1=127.0.0.1
。 - 重新开始:
/etc/init.d/network restart
。
- 编辑
dig
使用或测试域nslookup
。- 启动时运行服务:(
chkconfig dnsmasq on
请注意,这chkconfig
是 CentOS/RedHat 特定的,用于update-rc.d
大多数其他系统)。
答案3
虽然这通常是在评论中提到的服务器上完成的操作,但在某些情况下,您可能只想使用 VPN 的 DNS 进行 VPN 内部的查询。在这种情况下,您可能希望在系统上运行一个轻量级 DNS 守护进程,并指示它向何处发送什么查询。如果您同时使用多个 VPN,这基本上是必须的。