在 12.04 版本中如何调用 dhclient

在 12.04 版本中如何调用 dhclient

在我的 12.04 Precise 安装中,当我启动系统或插入以太网电缆时,dhclient 不会在我的有线 eth0 连接上自动运行。我没有运行 dhclient 守护程序。当我手动运行 dhclient 时,它会成功提取地址并配置 eth0 和路由表。但它确实输出以下内容:

jdoe@example:~$ sudo dhclient eth0
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service smbd reload

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the reload(8) utility, e.g. reload smbd

这表明这是 upstart 管理的东西。/etc/init/ 中没有 dhclient 的 upstart 脚本。

我在跑isc-dhcp-client 版本 4.1.ESV-R4-0ubuntu5.1,当前稳定版本。

  • 在标准 12.04 桌面安装中,dhclient 是否应该一直作为守护进程运行?
  • 正如我运行 dhclient 时收到的好奇消息所建议的那样,dhclient 是否应该在机器启动期间通过 upstart 启动?
  • 当电缆插入 eth0 时,我是否应该使用这些 ifplugd 或 netplug 包之一来启动 dhclient?
  • dhclient 是否由 NetworkManager 实例化但并非一直在运行?
  • 对于标准的 Ubuntu 12.04 安装,NetworkManager 是否应该在网络连接对话框的“有线”选项卡中列出任何内容?[示例截图] 我既创建了有线连接配置文件,又将其留空,这两者都不会影响 dhclient 的运行

我所经历的其他症状包括:

  • NetworkManager 无法很好地管理有线和无线连接同时连接的情况,它仅仅使用无线
  • NetworkManager 无法通过有线网络连接我已配置且有时尝试使用的 VPN,它只能通过无线网络进行连接。

@roadmr 曾询问 /etc/network/interfaces 的内容:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#NetworkManager#iface eth0 inet dhcp
# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

答案1

这最终是由网络管理器引起的。我的 /etc/NetworkManager.conf 文件如下所示:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

此配置文件在机器构建时就是这样设置的(这可能是一个错误)。由于“managed”设置为 false,NetworkManager 不会为接口启动 dhclient,并且它不会将有线连接视为真实连接,因此它也不会启动 VPN。

我将“managed”改为“true”,然后重启系统。现在系统运行正常,dhclient 可以运行,VPN 也可以运行等等。

并回答我自己的一些问题:

  • 标准 NetworkManager 网络连接对话框中的有线连接选项卡应如下所示:https://i.stack.imgur.com/rggRc.png
  • dhclient 被我的 NetworkManager 踢出,并在连接建立时保持运行

答案2

当你启动系统时,内核首先会注意到以太网接口。根据 PCI ID,内核将尝试为该卡加载适当的驱动程序。

在你的/var/log/syslog文件中你应该看到如下内容:

Jun 21 09:54:59 snowflake kernel: [ 2600.056067] sky2 0000:03:00.0: eth0: Link is up at 1000 Mbps, full duplex, flow control rx
Jun 21 09:54:59 snowflake kernel: [ 2600.056731] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Jun 21 09:54:59 snowflake NetworkManager[1059]: <info> (eth0): carrier now ON (device state 20)
Jun 21 09:54:59 snowflake NetworkManager[1059]: <info> (eth0): device state change: unavailable -> disconnected (reason 'carrier-changed') [20 30 40]
Jun 21 09:54:59 snowflake NetworkManager[1059]: <info> Auto-activating connection 'Wired connection 1'.

这告诉您内核通知 NetworkManager 有关该设备的信息。我认为发生的事情(这里只是推测)是内核通知 udev,udev 反过来通知 NetworkManager(它可能已注册以接收 udev 事件),然后 NetworkManager 处理其余配置。

现在,NetworkManager 将拒绝管理在 中声明的任何接口/etc/network/interfaces。这是因为它假定,如果您在该文件中手动配置了它,则您希望自己管理它。

因此,让 NetworkManager 管理您的接口的一种方法是删除 中的条目/etc/network/interfaces。这就是我要求您添加该数据的原因,这样我们就可以查看是否发生了这种情况,并可能提供进一步的建议。当然,即使在 中配置正确/etc/network/interfaces,即使没有 NetworkManager,接口也应该可以正常工作,您也不必每次都手动执行此操作。不过,查看可能发生的情况的地方是该文件 :)

答案3

在右上角单击网络连接图标,选择编辑连接>无线(选项卡)>突出显示您的连接>单击编辑按钮> IPv4 设置(选项卡)检查显示的方法:如果它显示“共享给其他计算机”,请使用框的向下箭头选择“自动 DHCP”,然后重新启动无线即可工作,而无需手动运行 dhclient

相关内容