问题

学校有两个网络,我电脑网线插在同一个交换机的同一个接口上,有时候获取的是172.27开头的IP,有时候获取的是192.168开头的IP。
通常第一次开机获取的是172.27的IP,插拔网线或重启网络接口后会变为192.168的IP。
两个网络各有作用但是并不互通,非常影响正常使用网络,因此我使用以下方式使得电脑固定通过DHCP获取172.27开头的ip。

原因解析

这种现象表明电脑连接的是一个同时存在两个网络环境(两个不同的DHCP服务器)的局域网 ,并且这两个网络在同一个物理交换机上共存。

这个交换机可能连接着两个不同的路由器或三层设备 ,分别运行着两个DHCP服务。

  • 一个是提供 172.27.x.x 段的DHCP服务器,DHCP服务器和网关都是172.27.1.1
  • 一个是提供 192.168.x.x 段的DHCP服务器,DHCP服务器和网关都是192.168.1.1

当电脑发送DHCP请求时,两个DHCP服务器都可能收到请求,并响应DHCP Offer,客户端通常选择第一个收到的DHCP Offer 作为自己的配置来源;

解决方案

原理

如果允许手动设置IP地址,那很简单,直接手动设置IP为所需网段的IP地址即可。

不然在没有权限操作上层交换机的情况下,只能通过技术手段,设法使得设备仅接收特定DHCP服务器的DHCP Offer。

输入以下命令监听eth0接口的DHCP报文

sudo tcpdump -i eth0 port 67 or port 68

方案

我电脑是Ubuntu 24.04,网络配置使用的是 netplan + systemd-networkd 的方案,但 systemd-networkd 的 DHCP 客户端并不支持对 DHCP Offer 进行筛选,因此我需要使用 dhclient 来替代DHCP的这个功能。

配置dhclient作为DHCP客户端

Ubuntu自带dhclient,默认没有启用。若没有则需要安装。

sudo apt install isc-dhcp-client

修改 dhclient 配置文件,将模板从 /etc/dhcp/dhclient.conf 复制到 /etc/dhcp/dhclient.eth0.confeth0修改为你的网络接口名称。添加一行reject 192.168.1.1;,使其拒绝来自192.168.1.1的内容,这样就可以只响应和接受172.27.1.1的DHCP服务了。

# /etc/dhcp/dhclient.eth0.conf
reject 192.168.1.1;

禁用原DHCP功能

修改 netplan 配置文件,设置将dhcp4: no,使 networkd 不处理 dhcp,交由 dhclient 完成。

# /etc/netplan/01-netcfg.yaml
network:version: 2renderer: networkdethernets:enp6s0:dhcp4: nodhcp6: no

设置dhclient开机启动

配置 dhclient 服务以使其开机启动,创建以下文件:

参考:https://github.com/egberts/systemd-dhclient

# /etc/systemd/system/dhclient@.service
[Unit]
Description=dhclient on %I
Documentation=man:dhclient(8)# dhclient wants network.target afterward
# dhclient will stay up regardlessof network.target failure
Wants=network.target#
Before=network.target# Binds to a specific device based on %i
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device[Service]
# Reads /etc/dhcp/dhclient.conf, by default
# Invokes /sbin/dhclient-script, by default, upon receiving a lease IP
# Force dhclient to run in foreground and let systemd handle all Unix FDs (0,1, and 2)
ExecStart=/sbin/dhclient -4 -d -v -cf /etc/dhcp/dhclient.%I.conf -pf /var/run/dhclient.%I.pid -lf /var/lib/dhcp/dhclient.%I.leases %I
Type=simple
PIDFile=/run/dhclient.%I.pid# DHCLIENT should never exit, ever.
# DHCLIENT should not use '-1' option nor handle exit code 2 in a special way
Restart=always
##### TBD ExecStop=/sbin/dhclient -x
##### TBD ExecReload=/sbin/dhclient -r
#StandardInput=null
#StandardOutput=journal
#StandardError=journal# Environment variables used by dhclient
#  Could define those envname in /etc/default/dhclient.%I
# PATH_DHCLIENT_CONF The dhclient.conf configuration file.
# PATH_DHCLIENT_DB The dhclient.leases database.
# PATH_DHCLIENT_PID The dhclient PID file.
# PATH_DHCLIENT_SCRIPT The dhclient-script file.
# environment filespec is prefaced with '-' as to ignore if unreadable or nonexisting
EnvironmentFile=-/etc/default/dhclient
EnvironmentFile=-/etc/default/dhclient.%I[Install]
WantedBy=multi-user.target

设置开机启动,其中eth0修改为你的网络接口名称,下同:

sudo systemctl enable dhclient@eth0.service

这是重启应该就能成功了,如果你不想重启,执行以下代码应用该设置:

sudo netplan apply && sudo systemctl start dhclient@eth0.service

连带问题

系统中还存在一个systemd-networkd-wait-online.service服务,其目的是在完成计算机启动前等待网络连接,但我使用了 dhclient 替代了一部分 networkd 的功能,使其 无法再感知 IP 是否已配置成功,这会导致开机时卡在该步骤直至超时,影响启动体验。

建议直接禁用 systemd-networkd-wait-online.service

sudo systemctl disable systemd-networkd-wait-online.service
sudo systemctl mask systemd-networkd-wait-online.service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88572.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88572.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88572.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Nginx】实测Nginx增加第三方主动式健康检查模块

一、环境说明系统版本:CentOS 7.9内核版本:3.10.0-1160.119.1Nginx版本:1.26.3第三方检测模块及版本:nginx_upstream_check_module(v0.4.0,兼容nginx 1.20)二、nginx安装部署2.1 下载检测模块目…

pytest中mark的使用

在pytest中,mark(标记)是用于对测试用例进行分类、筛选或附加元数据的重要功能。以下是其核心使用方法: 1. ‌基本标记定义与使用‌ ‌注册标记‌:在pytest.ini中预先定义标记(避免运行时警告)&…

STM32N6--NPU简单介绍

关键词:STM32N6、生物神经元、神经网络处理单元(NPU)、数据流处理 参考链接: RM0486 Reference manual STM32N647/657xx Arm-based 32-bit MCUsST_中文论坛【资料合集】STM32N6超全资料合集(定期更新)B站_…

一款开源免费、通用的 WPF 主题控件包

前言 今天大姚给大家分享一款开源免费(MIT License)、通用的 WPF 主题控件包:Rubyer WPF。 WPF介绍 WPF是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动…

windows安装python环境以及对应编辑器的详细流程

windows安装python环境以及对应编辑器的详细流程 一、安装 Python 环境 步骤 1:下载 Python 安装包 访问 Python 官网:https://www.python.org/downloads/windows/选择最新稳定版本(如 Python 3.12.x),点击 Download W…

高保真组件库:下拉多选

制作一个高保真的下拉多选需要具备多种交互事件。 拖拽一个文本框并命名为“下拉文本输入框”和一个向下的箭头组合在一起,外观上看起来是下拉组件。为了美观调整一些边框颜色、圆角、文字左边距等。 拖拽一个矩形作为下拉选项的容器,启动阴影xy都为0 制作下拉选项:拖拽一个…

sqli-labs靶场通关笔记:第1-4关 联合注入

第1关:单引号闭合1.这是第1关的界面,让我们以id作为参数输入,方式为数值,这里输入?id1看一下。2.显示了id1的用户名和密码。分析:在sql注入漏洞中,第一步是要寻找注入点,即可以输入参数的地方&…

和服腰封改造:3种解构主义造型的东方美学新解

和服腰封改造:3种解构主义造型的东方美学新解在东京原宿的小巷里,一场关于和服腰封的"温柔革命"正在悄然发生。年轻设计师们将传统宽腰带拆解重构,创造出既保留东方神韵又充满当代气息的造型艺术。正如一位新锐设计师所说&#xff…

什么是强化学习(RL)--3

如果reward大多数情况下都是0,只有少数是很大的值。这种情况下就是稀疏reward的问题。比如你要教机械手臂拴螺丝,只有最后把螺丝栓进去才可以,其余机械手臂的位置都不可以。额外的reward帮agent学习。reward shaping射击游戏cs,这个游戏中&am…

彩虹云商城全解源码系统|人工客服系统

核心升级亮点 人工客服系统:新增智能工单在线IM双模式多端同步:PCH5小程序APP四端数据实时互通支付升级:支持数字人民币收款安全加固:内置Web应用防火墙(WAF) 部署教程 ▶ B站视频教程 包含: 宝塔环境配置&#xf…

川翔云电脑:突破硬件极限,重构设计生产力范式

一、硬核配置:显存与算力的双重革命川翔云电脑提供从 RTX 2080 Ti 到 RTX 4090 Plus 的全系列 GPU 机型,其中旗舰级 4090 Plus 单卡配备48GB 超大显存,较传统 4090 显存翻倍,可流畅加载 1200 万面数的超复杂模型(如《黑…

深入解析 TCP 连接状态与进程挂起、恢复与关闭

文章目录深入解析 TCP 连接状态与进程挂起、恢复与关闭一、TCP 连接的各种状态1. **LISTEN**(监听)2. **SYN_SENT**(SYN 已发送)3. **SYN_RECEIVED**(SYN 已接收)4. **ESTABLISHED**(已建立&…

在mac m1基于llama.cpp运行deepseek

lama.cpp是一个高效的机器学习推理库,目标是在各种硬件上实现LLM推断,保持最小设置和最先进性能。llama.cpp支持1.5位、2位、3位、4位、5位、6位和8位整数量化,通过ARM NEON、Accelerate和Metal支持Apple芯片,使得在MAC M1处理器上…

多模态大语言模型arxiv论文略读(154)

Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ➡️ 论文标题:Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ➡️ 论文作者:Zhen Zeng, Leijiang Gu, Xun Yang, Zhan…

Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别

Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别前言1. 库的基本介绍1.1 PyMuPDF (fitz)1.2 pypdfium21.3 pdfplumber1.4 pdfminer2. 关系图谱3. 核心区别对比3.1 性能对比3.2 功能对比4. 代码示例对比4.1 基本文本提取PyMuPDFpypd…

制作 ext4 文件系统

按以下步骤操作可以将一个文件夹制作成 Android 可用的 ext4 格式的 img 文件:方法 1:使用标准 Linux 工具(推荐) 步骤 1:安装必要工具 sudo apt update sudo apt install e2fsprogs android-sdk-libsparse-utils # 适…

Flink自定义函数

一、UDF 核心原理 Flink 自定义函数(UDF)是扩展 Table API/SQL 能力的核心机制,允许将自定义逻辑嵌入查询。其设计遵循以下原则: 1. 函数类型体系类型输入输出关系核心用途标量函数(ScalarFunction)0~N 个标…

【AI学习】大模型微调实践

参加了书生・浦语(InternLM)端侧小模型论文分类微调练习打榜赛 具体的实践教程在: https://aicarrier.feishu.cn/wiki/D7kZw9Nx4iMyDnkpL0Gc5giNn5g 折腾了十多天,各种尝试,AB榜单终于进入了前十都,累死 …

ElementUI:高效优雅的Vue.js组件库

Hi,我是布兰妮甜 !在当今快节奏的前端开发领域,选择一个功能强大、设计优雅且易于使用的UI组件库至关重要。ElementUI作为基于Vue.js的知名组件库,凭借其丰富的组件体系、一致的设计语言和出色的开发体验,已成为众多企…

Java Stream流介绍及使用指南

背景在Java 8之前,处理集合数据(如List, Set, Map)通常意味着编写冗长的、以操作为中心的代码:创建迭代器、使用for或while循环遍历元素、在循环体内进行条件判断和操作、收集结果。这种方式虽然有效,但不够简洁、可读…