在多個DHCP服務器的網絡環境中選擇指定的DHCP服務

問題

學校有兩個網絡,我電腦網線插在同一個交換機的同一個接口上,有時候獲取的是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循環遍歷元素、在循環體內進行條件判斷和操作、收集結果。這種方式雖然有效,但不夠簡潔、可讀…