Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

DHCP Relay 跨子網分配 IP 完整實戰:多網卡中繼與多作用域配置詳解

編輯:Linux 教學

企業網絡常需在單一 DHCP 服務器為多個 VLAN/子網分配地址。本文基於 Fedora 6 實驗環境,詳細記錄雙網卡 Linux 機器作為 DHCP Relay Agent,轉發請求至獨立 DHCP 服務器,實現跨子網(192.168.10.0/24、192.168.20.0/24、192.168.182.0/24)自動分配 IP 的完整配置流程,並深度解析 dhcrelay 關鍵參數與 dhcpd.conf 多作用域寫法。

網絡拓撲與角色定義

角色主機名介面IP功能
Relay AgentMachine Aeth0192.168.10.1面向客戶端子網
eth1192.168.20.1面向 DHCP Server
DHCP ServerMachine Beth0192.168.20.254核心分配服務,GW 指向 A.eth1
ClientLaptopeth0DHCP 獲取連接 A.eth0 同網段

Relay Agent (Machine A) 配置

關鍵命令:雙介面綁定

dhcrelay -i eth0 -i eth1 192.168.20.254

核心參數解析:

  • -i eth0:監聽客戶端請求的介面(必須)
  • -i eth1:向 DHCP Server 轉發回應的介面(關鍵!缺失會導致無法收到 DHCPOFFER/ACK)
  • 192.168.20.254:DHCP Server IP

啟動後,Relay 將在 eth0 接收廣播 DHCPDISCOVER,單播轉發給 Server;收到 Server 回應後,從 eth1 發出,經路由返回 eth0 廣播給客戶端。

DHCP Server (Machine B) 配置:多作用域 dhcpd.conf

ddns-update-style interim;
ignore client-updates;

# 全域預設選項
option subnet-mask 255.255.255.0;
option domain-name "corp.local";
option domain-name-servers 192.168.123.247;
option broadcast-address 192.168.20.255;
default-lease-time 86400;
max-lease-time 172800;

# 作用域 1:Relay 所在子網(客戶端實際所在網段)
subnet 192.168.10.0 netmask 255.255.255.0 {
    range 192.168.10.10 192.168.10.100;
    option routers 192.168.10.1;  # Relay eth0 IP 作為網關
}

# 作用域 2:Server 直連子網
subnet 192.168.20.0 netmask 255.255.255.0 {
    range 192.168.20.11 192.168.20.100;
    option routers 192.168.20.1;  # Relay eth1 IP
}

# 作用域 3:擴展子網(如 VLAN 182)
subnet 192.168.182.0 netmask 255.255.255.0 {
    range 192.168.182.10 192.168.182.100;
    option routers 192.168.182.1;  # 對應 Relay 新增介面 IP
}

關鍵機制:GIADDR 與作用域選擇

DHCP Relay 轉發請求時,會在封包中填充 GIADDR (Gateway IP Address) 字段為接收介面的 IP(如 192.168.10.1)。DHCP Server 收到請求後,根據 GIADDR 落入哪個 subnet 宣告範圍,自動選擇對應作用域分配地址。這就是為什麼 dhcpd.conf 中必須宣告所有可能的子網,且 option routers 必須指向該子網的實際網關(通常是 Relay 在該子網的介面 IP)。

避坑指南:shared-network 的誤區

實驗發現,若在 dhcpd.conf 中用 shared-network 包裹多個 subnet:

shared-network mynet {
    subnet 192.168.10.0 ... { ... }
    subnet 192.168.20.0 ... { ... }
}

會導致 Server 回應封包的 GIADDR 處理異常,Relay 無法正確接收回應,最終客戶端獲取 IP 失敗。結論:跨 Relay 的多子網場景,請直接平鋪多個 subnet 宣告,不要使用 shared-network。

擴展:新增更多子網

  1. Relay 新增物理/虛擬介面(如 eth2: 192.168.182.1)
  2. dhcrelay -i eth0 -i eth1 -i eth2 192.168.20.254
  3. Server dhcpd.conf 新增對應 subnet 192.168.182.0 ... 宣告
  4. 重啟 dhcpd 服務

生產環境建議

  • 高可用:部署雙 DHCP Server 熱備(failover peer),Relay 指向 VIP。
  • 安全:啟用 dhcpd.conf 中的 deny unknown-clients 或配合 802.1X/portal 認證。
  • 監控:監聽 67/68 端口流量,告警租約耗盡、衝突、NAK 過多。
  • IPv6:使用 dhcrelay -6 支援 DHCPv6 Relay,配合 RA (Router Advertisement) 實現雲原生網絡。

總結

DHCP Relay 通過 dhcrelay -i <client_iface> -i <server_iface> <server_ip> 雙介面綁定,配合 Server 端精準的多 subnet 宣告與 option routers 指向 Relay 對應介面 IP,即可優雅解決跨子網 IP 分配難題。核心在於理解 GIADDR 機制、拒絕 shared-network 包裹、做好介面與路由的對應關係。掌握此模式,輕松支撐百個 VLAN 的集中化 DHCP 管理。

Copyright © Windows教程網 All Rights Reserved