DHCP在Linux上覆盖了Cisco VPN的resolv.conf

4
我正在使用一台Ubuntu 8.04(x86_64)计算机连接到我的雇主的Cisco VPN。 (客户端无法编译通过,但我找到了补丁以更新客户端以在过去两年中发布的内核上编译。)这一切都很好,直到我的DHCP客户端决定更新其租约并更新/ etc / resolv.conf,用我的常规网络服务器替换VPN特定名称服务器。
有没有一种好的方法,在我的VPN处于活动状态时防止DHCP客户端更新/ etc / resolv.conf?
7个回答

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个结果,其中许多与此相关!

2
如果您正在使用带有NetworkManager的Ubuntu默认设置,请尝试删除CiscoVPN客户端并使用NetworkManager vpnc插件连接到Cisco VPN。这样做可以避免所有问题,因为此时NetworkManager已经知道您的VPN连接。

1

应该可以使用chattr +i /etc/resolv.conf。(-i用于撤消)

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

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


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

针对RHEL/CentOS而非Ubuntu,但是有关dhclient.conf的技巧请参考http://superuser.com/questions/110808/how-can-i-add-additional-search-domains-to-the-resolv-conf-created-by-dhclient-i和http://serverfault.com/questions/231076/configuring-dhcp-on-rhel-6。 - Philip Durbin

0

这个问题在租约时间较短的网络上更加明显。在Ubuntu的dhcp3软件包的launchpad中有一个已经报告的错误:

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


0

vpnc 似乎对我的雇主的思科集中器做了正确的事情。我不断地连接和断开 VPN,它似乎可以顺利更新所有内容。


0

DHCP客户端守护程序可以通过命令行开关(我想是-r,取决于客户端)告知不向resolv.conf更新。

这样就没有那么动态了,因为当您连接时,您必须重新启动/重新配置DHCP,但并不太难。同样,您可以停止服务,但在此期间可能会丢失IP,因此我并不真正推荐这样做。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接