在不同接口上使用 dhclient 更新 IP

在不同接口上使用 dhclient 更新 IP

我的计算机上有两个接口,eth0并且eth1.

两个子网上都有 DHCP 服务器。我该如何dhclient更新两个接口的 IP 地址?

如果我做:

dhclient -r && dhclient eth0

它更新了 上的 IP eth0。然后,如果我只想这样做:

dhclient eth1

它失败并出现错误:

dhclient(22421) is already running - exiting.

我可以:

dhclient -r && dhclient eth1

但该dhclient -r部分释放了租约,我eth0也释放了 IP 地址。

目前,我设法做我想做的事情的唯一方法是运行dhclientfor eth0,残酷地杀死它,然后运行它eth1:我最终在两个接口上都获得了更新的 IP。

我也用dhclient -x代替进行了测试dhclient -r,没有运气。

当然,这不是一条路!

编辑:

两个答案建议dhclient -r eth0 eth1 && dhclient eth0 eth1 这样做,这确实限制了对这些接口的广播调用。但第一个应答的 DHCP 服务器将是唯一使用的服务器,因此会在单个接口上产生新的 IP,而不是在两个接口上产生新的 IP。在这里,我们可以看到DHCPDISCOVER两个接口上的调用,但仅在找到 DHCP 服务器的第一个接口DHCPREQUEST上完成:eth0

Listening on LPF/eth0/0a:00:27:00:00:00
Sending on   LPF/eth0/0a:00:27:00:00:00
Listening on LPF/eth1/84:8f:69:d3:d4:a1
Sending on   LPF/eth1/84:8f:69:d3:d4:a1
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0x170fcb67)
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 4 (xid=0x115a24c3)
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x170fcb67)
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1 (xid=0x170fcb67)
bound to 192.168.1.4 -- renewal in 1710 seconds.

答案1

任何一个

dhclient -r && dhclient

或者

dhclient -r eth0 eth1 && dhclient eth0 eth1

编辑1:

下一次尝试:您可以通过使其中一个实例使用不同的文件来消除“dhclient(22421) 已在运行 - 退出”错误。使用PATH_DHCLIENT_PIDPATH_DHCLIENT_DB变量(或等效的命令行选项,请参阅手册页)来分隔它们。

答案2

想法#1:尝试将 2 个接口传递给 dhclient

如果您查看手册页,dhclient您会注意到示例末尾使用了 bit [ if0 [ ...ifN ]。这意味着您可以运行dhclient并向其传递您想要运行的多个接口。

摘自dhclient 手册页

dhclient [ -4 | ] -6] [ -S ] [ -N [ -N... ] ] [ -T [ -T... ] ] [ -P [ -P... ] ] [ -p 端口 ] [ -d ] [ -e VAR=值] [ -q ] [ -1 ] [ -r | -x] [ -lf 租赁文件 ] [ -pf pid 文件 ] [ -cf 配置文件 ] [ -sf 脚本文件 ] [ -s 服务器 ] [ -g 中继 ] [ -n ] [ -nc ] [ -nw] [ -w ] [ -B ] [ -I dhcp 客户端标识符 ] [ -H 主机名 ] [ -F fqdn.fqdn ] [ -V 供应商类别标识符 ] [ -R 请求选项-列表] [ -timeout 超时] [ -v ] [ --version ] [ if0 [ ...ifN ] ]

因此,您应该能够dhclient在多个接口上发布并连接它们。

dhclient -r eth0 eth1
dhclient eth0 eth1

想法#2:看看 NetworkManager 是如何做到的

dhclient以下是 NetworkManager在我的系统上的设置方式。您可以尝试使用参数显式调用第二个 dhclient。

/sbin/dhclient -d -4 \
   -sf /usr/libexec/nm-dhcp-client.action \
   -pf /var/run/dhclient-wlan0.pid \
   -lf /var/lib/dhclient/dhclient-01f0476d-04bf-4ce7-8ced-844fae73f430-wlan0.lease \
   -cf /var/run/nm-dhclient-wlan0.conf wlan0

答案3

找到了一个解决方案..必须编写显式的 dhclient-conf ..

现在,用以下命令调用它:

dhclient -cf /etc/dhcp/dhclient.conf -v vmbr1 --no-pid

dhclient -cf /etc/dhcp/dhclient-vmbr3.conf -v vmbr3 --no-pid

评论标准段落。如果您添加新接口,如果您没有在此处明确说明,则不会有 dhcp 请求。

:/etc/dhcp# cat dhclient.conf

interface "vmbr1" {
send host-name = gethostname();
select-timeout 3;
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
}

#send host-name = gethostname();
#request subnet-mask, broadcast-address, time-offset, routers,
      #  domain-name, domain-name-servers, domain-search, host-name,
      #  dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
     #   netbios-name-servers, netbios-scope, interface-mtu,
      #  rfc3442-classless-static-routes, ntp-servers;

:/etc/dhcp# cat dhclient-vmbr3.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

interface "vmbr3" {
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
}

我认为这是由于 dhcp 状态机导致一个 dhclient 无法为两个接口提供服务?

相关内容