马春杰杰博客
致力于深度学习经验分享!

服务器被DHCP服务器劫持,无法动态获取到正确IP,导致无法上网的问题。

文章目录
[隐藏]

问题描述

服务器关机维护了4天,开机之后发现服务器无法连接网络,但是同个交换机上的多台服务器之间连接正常。

环境描述

服务器的网络配置采用单网卡双ip的配置方式,一个ip是DHCP动态获取用于连接外部网络,另一个ip是静态ip用于内网服务器的稳定通信。

问题分析

首先通过ip r查看当前设备的ip信息

我们发现除了172.16.x.x的静态ip配置之外,还有不明的192.168.x.x的一系列ip,动态获取到的ip为192.168.1.137,我们正常的DHCP获取的ip应该是10.x.x.x,因此可以确定,服务器被ip为192.168.1.1的DHCP服务器劫持了,无法从正确的DHCP服务器获取到ip,也就无法访问外部网络。

解决方案

联系上级网络管理员,得知在上级网络的其他服务器也出现了被劫持的情况,但是网络管理员不想麻烦,让我们自查自行解决。(😓)

两个解决方案,1. 不使用DHCP服务,而使用静态ip;2. 从服务器层面封锁192.168.1.1这个DHCP服务器。

方案一

既然 DHCP 环境不可信,直接手动指定正确的出口 IP、网关和 DNS,彻底摆脱对 DHCP 服务端的依赖。

这个方案有两个缺陷:1、 需要知道上级网络正确的出口IP、网关和DNS的信息;2、还需要避免与上级网络中的其他设备产生ip冲突。

编辑 /etc/netplan/01-network-manager-all.yaml,将 dhcp4: true 改为 no,并手动添加你原本应该获取的 10.x.x.x 地址和网关。

应用配置:sudo netplan apply

方案二

因为底层的网络接管程序是 systemd-networkd,而你又希望能继续使用 DHCP(为了获取那个正确的10.170.x.x地址),但要精准拒收 192.168.1.1的分配包,我们可以利用 systemd的原生高级特性。

需要注意的是:Netplan 的 YAML 配置文件本身比较精简,没有直接提供“DHCP 黑名单”的语法。但是,Netplan 在后台会把你的 YAML 转换成systemd-networkd的配置文件。

因此,我们可以通过添加一个 “覆盖配置 (Drop-in override)”,直接告诉底层的networkd:把 192.168.1.1 给我拉黑”。

以下是具体的操作步骤:

1. 确认 Netplan 生成的文件名
Netplan 通常会把配置渲染到 /run/systemd/network/ 目录下。对于你的 br0 网卡,它通常会被命名为 10-netplan-br0.network
你可以先运行下面这个命令确认一下:

(确认里面有没有类似 10-netplan-br0.network 这样的文件。如果有,请按以下步骤操作;如果名字不同,请把下面的文件名替换成你实际看到的名称。)

2. 创建 systemd-networkd 覆盖目录

我们要在/etc目录下创建一个专门的文件夹,用来存放你要追加的高级规则:

3. 编写 DHCP 黑名单规则

在这个目录下创建一个名为dhcp-deny.conf的文件:sudo nano /etc/systemd/network/10-netplan-br0.network.d/dhcp-deny.conf

把下面的内容粘贴进去:

保存并退出(在 Nano 中按 Ctrl+O 回车保存,Ctrl+X 退出)。

4. 重启 networkd 服务让规则生效

不需要运行 netplan apply,因为我们直接修改了底层的规则。直接重启 systemd-networkd 服务即可:

5. 验证结果

重启网络服务后,你的br0会重新发起 DHCP 请求。因为底层引擎已经拉黑了192.168.1.1,它会对那个流氓服务器的响应视而不见,只接受正确的 DHCP 服务器(10.170.255.254)发来的 IP。

此时你再次运行:ip r

你应该就能看到它成功获取到了正确的10.170.x.xIP,并且默认网关也恢复正常了。

 

免费使用DeepSeek满血版

如果你对这篇文章有什么疑问或建议,欢迎下面留言提出,我看到会立刻回复!

打赏
未经允许不得转载:马春杰杰 » 服务器被DHCP服务器劫持,无法动态获取到正确IP,导致无法上网的问题。

留个评论吧~ 抢沙发 评论前登陆可免验证码!

私密评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填,便于回访^_^)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏