DHCP在Linux上覆盖Cisco VPN resolv.conf

时间:2008-09-07 03:50:22

标签: linux vpn cisco

我正在使用Ubuntu 8.04(x86_64)计算机连接到我雇主的Cisco VPN。 (客户端没有开箱即用,但我发现patches to update the client to compile on kernels released in the last two years。)这一切都很好,直到我的DHCP客户端决定更新其租约并更新/etc/resolv.conf,取代特定于VPN的使用我的常规网络服务器命名服务器。

在我的VPN处于活动状态时,是否有一种防止我的DHCP客户端更新/etc/resolv.conf的好方法?

7 个答案:

答案 0 :(得分:5)

如果您在没有NetworkManager处理连接的情况下运行,请使用resolvconf包作为调整/etc/resolv.conf的程序的中介: sudo apt-get install resolvconf

如果您正在使用NetworkManager,它将为您处理此问题,因此请删除resolvconf包: sudo apt-get remove resolvconf

上周我在Ubuntu上设置vpnc时发现了这个问题。在ubuntuforums.org上搜索 vpn resolv.conf 有250个结果,其中很多是非常相关的!

答案 1 :(得分:2)

如果您正在使用NetworkManager的Ubuntu默认设置,请尝试删除CiscoVPN客户端并使用NetworkManager vpnc插件连接到Cisco VPN。这应该避免所有问题,因为NetworkManager然后知道你的VPN连接。

答案 2 :(得分:1)

我会建议遵循@Sean的建议,但如果由于某种原因失败,应该可以将dhclient配置为不在/etc/dhcp3/dhclient.conf中请求DNS服务器

答案 3 :(得分:1)

chattr + i /etc/resolv.conf应该可以正常工作。 (-i撤消)

但更好的是配置你的dhclient.conf: https://calomel.org/dhclient.html 查看超级域名服务器和域名。

另请查看“发送主机名”; 如果它在您的工作场所工作,您的PC将拥有一个很酷的主机名,而不是DHCP服务器分配的一些奇怪的名称。

答案 4 :(得分:0)

vpnc似乎正在为我的雇主的cisco集中器做正确的事情。我跳上和关闭vpn,似乎可以顺利更新所有内容。

答案 5 :(得分:0)

可以告诉DHCPclient守护程序不要使用命令行开关更新resolv.conf。 (-r我认为,取决于客户)

这不那么动态,因为你必须在连接时重启/重新配置DHCP,但不要太难。同样,你可以停止服务,但在此期间你可能会失去你的IP,所以我不会真的推荐它。

或者,您可以在cron作业中运行dhcpclient,添加适当的进程检查。

答案 6 :(得分:0)

在DHCP租约年龄较低的网络上,此问题更为明显。在Ubuntu的dhcp3包启动板中存在一个错误:

https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/90681

在说明中包含此补丁:

--- /sbin/dhclient-script.orig 2007-03-08 19:19:56.000000000 +0000
+++ /sbin/dhclient-script 2007-03-08 19:19:46.000000000 +0000
@@ -13,6 +13,10 @@
 # The alias handling in here probably still sucks. -mdz

 make_resolv_conf() {
+ # don't overwrite resolv.conf at RENEW time, since a VPN/PPTP tunnel may
+ # have updated it with remote DNS servers
+ [ "$reason" = "RENEW" ] && return
+
     if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
         # Find out whether we are going to mount / rw
         exec 9>&0 </etc/fstab

/sbin/dhcp-script的此更改会阻止DHCP客户端在续订租约时覆盖/etc/resolv.conf