Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

AWS主機:預設路由被 DHCP 覆寫的解決方案(Ubuntu + Netplan)

Posted on 2025-11-042025-11-04 by Rico

在 AWS 上的 WMS 主機僅提供內網服務,所有外部連線都統一經由 TPM1 (172.17.10.10) 這台主機進行 NAT 轉址。
但實際運行一段時間後,發現主機的預設路由 (default gateway) 會不定期被系統自動改回 172.17.10.1,導致外部通訊中斷。


問題現象

執行 route -n 或 ip route 觀察到如下狀況:

root@wms:~# route -n
Destination     Gateway         Genmask         Flags Metric Ref Use Iface
0.0.0.0         172.17.10.10    0.0.0.0         UG    0      0   0  ens5
0.0.0.0         172.17.10.1     0.0.0.0         UG    100    0   0  ens5
...

手動設定的 gateway (172.17.10.10) 經常在系統重新啟動或 DHCP 更新租約後消失。


問題原因

檢視系統日誌 (journalctl -u systemd-networkd -b) 後,發現關鍵訊息:

ens5: DHCPv4 address 172.17.10.20/24, gateway 172.17.10.1 acquired from 172.17.10.1

👉 原因是:
systemd-networkd 透過 DHCP 自動取得 IP 時,也同時套用了 DHCP 伺服器提供的 gateway(172.17.10.1)。
因此,每當 DHCP 重新租約,就會覆蓋掉手動設定的路由。


解決思路

我們要達成兩個目標:

  1. 保留 DHCP 取得 IP 的功能(方便 IP 自動管理)
  2. 拒絕 DHCP 自動下發的路由(避免 gateway 被改回 172.17.10.1)
  3. 手動指定正確的 default route(172.17.10.10)

Ubuntu 20.04 之後的版本使用 Netplan + systemd-networkd,所以最佳做法是直接在 Netplan 設定中控制 DHCP 行為。


Netplan 設定修改

原始設定(/etc/netplan/50-cloud-init.yaml)如下:

network:
  version: 2
  ethernets:
    ens5:
      match:
        macaddress: "06:43:c1:61:32:c4"
      dhcp4: true
      dhcp6: false
      set-name: "ens5"

這樣會讓 DHCP 同時下發 IP 與路由。
我們要改成「保留 DHCP IP,但不接受 DHCP 路由」,並明確指定正確的 gateway。


✅ 修改後設定

# /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens5:
      match:
        macaddress: "06:43:c1:61:32:c4"
      set-name: "ens5"
      dhcp4: true
      dhcp6: false
      dhcp4-overrides:
        use-routes: false          # 不接受 DHCP 傳來的預設路由
      routes:
        - to: 0.0.0.0/0
          via: 172.17.10.10        # 主要路由(TPM1 NAT)
          metric: 10
        - to: 0.0.0.0/0
          via: 172.17.10.1         # 備援路由
          metric: 100

套用設定(安全操作)

建議使用 netplan try(會提供 120 秒倒數確認,防止 SSH 斷線):

sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak.$(date +%F-%H%M%S)
sudo netplan generate
sudo netplan try

若連線正常,按 Enter 以確認永久套用。
之後可以再用以下指令確認結果:

ip route show default

期望輸出:

default via 172.17.10.10 dev ens5 proto static metric 10
default via 172.17.10.1  dev ens5 proto static metric 100

補充:系統行為說明

  • dhcp4-overrides.use-routes: false
    → 告訴 systemd-networkd 不要安裝 DHCP 提供的路由。
  • routes:
    → 手動指定 default gateway(支援多條,透過 metric 決定優先順序)。
  • renderer: networkd
    → 確保使用 systemd-networkd 作為後端管理(AWS Ubuntu 預設如此)。

結論

這樣設定後,主機仍能透過 DHCP 自動取得 IP,但預設路由將固定為:

主要:172.17.10.10(TPM1 NAT)
備援:172.17.10.1(DHCP 原始 gateway)

即使 DHCP 重新租約、或 networkd 重新啟動,也不會再改動 default route。
✅ 問題永久解決。


延伸建議

若你的環境存在不穩定的 DHCP 伺服器,仍可搭配一個「自我修復腳本」:

  • 每分鐘檢查路由是否存在;
  • 若被移除,自動補回。

這樣可作為暫時的保險機制,但在本案例中已不再需要。


實際環境摘要

項目值
主機類型AWS EC2(內網服務)
作業系統Ubuntu 24.04 LTS
網路服務systemd-networkd + Netplan
問題DHCP 導致 gateway 重設為 172.17.10.1
解法use-routes: false + 明確指定路由

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme