给局域网中的Ubuntu固定下ip

将一个小点,在局域网中包括类似于homelab的或者仅仅只是搭一个用来当实验环境的,在局域网内机器比较少的时候大部分DHCP会给分配相同的ip,但是这不是一定的,当机器比较多,并且上下线比较频繁时就会出现ip地址变动,这对于一些使用场景比较讨厌,所以我想把ip固定下来,先简单引用下DHCP的原理,他分为下面几个阶段

DHCP发现(DISCOVER)

client在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该client实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。否则,就要看该服务器是授权的还是非授权的。授权服务器会拒绝请求,使得客户立刻申请一个新的IP。非授权服务器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。

DHCP提供(OFFER)

当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络单播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。

服务器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的服务器,192.168.1.1,将IP地址指定于YIADDR字段。

DHCP请求(REQUEST)

当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给该客户的租约。然后它们把曾经给该客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。

DHCP确认(Acknowledge,ACK)

当DHCP服务器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。

该服务器响应请求并发送响应给客户。整个系统期望客户来根据选项来配置其网卡。

DHCP释放(RELEASE)

客户端向DHCP服务器发送一个请求以释放DHCP资源,并注销其IP地址。鉴于客户端更多的时候并不清楚何时用户会将其从网络中移除,此协议不会托管“DHCP释放的发送”。

DHCP NAK

服务器回复客户,客户要求的IP不能被分配。

Ubuntu

而对于Ubuntu,现在较新版本的设置方式也有点变化,比如我用的是22.04

1
cd /etc/netplan/

先去这个目录下查看配置文件
我们要找的是这个 00-installer-config.yaml 文件

原本的是长这样

默认是通过dhcp分配ip
我们要改成静态ip

1
2
3
4
5
6
7
8
9
10
11
12
network:
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.xx/24
nameservers:
addresses: [114.114.114.114, 233.5.5.5]
routes:
- to: default
via: 192.168.1.1
version: 2

解释一下 ethernets中的ens33表示我们的网卡接口的标识
可以通过 ip addr 查看

第一个是本地回环,第二个可以看下是否跟内网ip对应上,如果是的话就这个ens33
然后就是addresses填的地址,就是我们想要固定的ip地址,记得得是自己局域网网段的
上面只是个示例,然后是nameservers里的是dns服务器,也是按需填写
这里的114.114.114.114跟233.5.5.5分别是电信跟阿里云的,仅供参考
然后是routes就是网关地址,按自己的环境填写,网络没有任何特殊处理的一般就是路由器
接下去就是应用这个配置

1
sudo netplan apply

这样ip配置就生效了
可以通过
ip addr show ens33查看