使用DHCP请求指定IP地址

  一般情况下需要通过DHCP获取固定IP地址的需求,都是在DHCP服务器端进行配置实现的,但是当DHCP服务器不再自己管控的范围之内的时候,就需要使用一些小技巧来获得指定的IP地址。

OpenWrt

1
2
3
4
5
6
7
8
9
10
# 首先获取当前DHCP客户端的参数
ps | grep udhcp
> 28800 root 1252 S grep udhcp
> 30897 root 1252 S udhcpc -p /var/run/udhcpc-wan.pid -s /lib/netifd/dhcp.script -f -t 0 -i wan -x hostname:openwrt -C -R -O 121

# 直接复制下命令行,并加入-r参数执行
dhcpc -i wan -r 192.168.1.100 -x hostname:lab.kuretru.com -C -R -O 121

# 如果成功获取,则杀掉此进程,然后重启wan口,即可正常获取到指定IP地址
ifdown wan && ifup wan

  如果该方法失败,则先将wan口配置为静态IP地址,等DHCP租约过期后,先执行命令,待获取成功后,再重新配置wan口为DHCP模式。

有用的脚本:

  • /lib/netifd/proto/dhcp.sh
  • /lib/netifd/dhcp.script

基于NetworkManager的Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 首先要修改NetworkManager的默认客户端n-dhcp4至dhclient
cat /etc/NetworkManager/NetworkManager.conf
> [main]
> plugins=ifupdown,keyfile
+ dhcp=dhclient

# 直接重启NetworkManager
systemctl restart NetworkManager

# 查看dhclient的.lease文件
ps -aux | grep dhclient
> root 1473 0.0 0.0 99904 6312 ? Sl 22:44 0:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/NetworkManager/dhclient-enp14s0.pid -lf /var/lib/NetworkManager/dhclient-0dad5923-e1de-3bf8-b14f-7ca0d52fb006-enp14s0.lease -cf /var/lib/NetworkManager/dhclient-enp14s0.conf enp14s0

# 修改lease文件中的fixed-address为你需要的IP地址
vim /var/lib/NetworkManager/dhclient-0dad5923-e1de-3bf8-b14f-7ca0d52fb006-enp14s0.lease
> lease {
> interface "enp14s0";
> fixed-address 192.168.1.100;
> }

# 再次重启NetworkManager
systemctl restart NetworkManager

其他使用dhclient命令的操作系统

  直接参考基于NetworkManager的方式,关键点在于修改lease文件,其默认路径为:/var/lib/dhcp/dhclient.leases