我的计算机上有两个接口,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 地址。
目前,我设法做我想做的事情的唯一方法是运行dhclient
for 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_PID
和PATH_DHCLIENT_DB
变量(或等效的命令行选项,请参阅手册页)来分隔它们。
答案2
想法#1:尝试将 2 个接口传递给 dhclient
如果您查看手册页,dhclient
您会注意到示例末尾使用了 bit [ if0 [ ...ifN ]
。这意味着您可以运行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 无法为两个接口提供服务?