我們將使用開源界常用的 ISC DHCP Server。首先,在您的本機建立一個資料夾來存放設定檔。
Bash
mkdir -p ~/dhcp-data
nano ~/dhcp-data/dhcpd.conf
建立存放設定檔的資料夾,並編輯設定檔。
Bash
mkdir -p ~/docker-dhcp/data
nano ~/docker-dhcp/data/dhcpd.conf
將以下內容貼上(請依據您的環境修改網段、預設閘道與 MAC 位址):
Plaintext
# === 基本設定 ===
default-lease-time 600;
max-lease-time 7200;
authoritative;
# === 網段設定 ===
# 請根據您的實際網段 (例如 192.168.1.0) 修改
subnet 192.168.1.0 netmask 255.255.255.0 {
# 共同網路參數
option routers 192.168.1.254; # 預設閘道 (Gateway)
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS 伺服器
option broadcast-address 192.168.1.255; # 廣播位址
# 【安全性關鍵】:拒絕未登記在下方列表的陌生 MAC 取得 IP
deny unknown-clients;
# === MAC 與 IP 綁定列表 (101 ~ 150) ===
# 格式: host [設備名稱] { hardware ethernet [MAC]; fixed-address [指定IP]; }
host pc-101 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.101;
}
host pc-102 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.1.102;
}
host pc-103 {
hardware ethernet 1A:2B:3C:4D:5E:6F;
fixed-address 192.168.1.103;
}
# 請依照此格式,將您需要授權的設備一路往下新增到 150
}
寫入完畢後,存檔並離開 (Ctrl+O -> Enter -> Ctrl+X)
將裡面的內容替換為以下配置(請根據您的實際網段與設備的 MAC 位址進行修改):
Plaintext
# 基本租約時間設定
default-lease-time 600;
max-lease-time 7200;
# 設定為官方授權的 DHCP 伺服器
authoritative;
# 定義您的網段 (請改成您實際的網段)
subnet 192.168.1.0 netmask 255.255.255.0 {
# 共同的網路設定
option routers 192.168.1.254; # 預設閘道
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS 伺服器
option broadcast-address 192.168.1.255; # 廣播位址
# 【關鍵設定】:如果您「只允許」有綁定 MAC 的設備取得 IP,拒絕陌生設備連線,請取消下面這行的註解:
# deny unknown-clients;
# 注意:因為我們是針對 MAC 綁定發放,所以不需要寫 `range` 參數。
# 若寫了 range,沒有被綁定 MAC 的陌生設備就會隨機取得 range 內的 IP。
# === 開始綁定 MAC 與 IP (101 ~ 150) ===
host device-101 {
hardware ethernet 00:11:22:33:44:55; # 請填入設備 1 的 MAC 位址
fixed-address 192.168.1.101; # 指定配發的 IP
}
host device-102 {
hardware ethernet AA:BB:CC:DD:EE:FF; # 請填入設備 2 的 MAC 位址
fixed-address 192.168.1.102;
}
host device-103 {
hardware ethernet 1A:2B:3C:4D:5E:6F; # 請填入設備 3 的 MAC 位址
fixed-address 192.168.1.103;
}
# ... 依此類推,您可以一直往下寫到 device-150 (192.168.1.150)
}
host [名稱]:為主機取一個辨識用的名稱(例如 device-101),這只是讓您自己看懂用的,名稱不能重複。
hardware ethernet:填入該設備真實的 MAC 位址,格式必須是 XX:XX:XX:XX:XX:XX。
fixed-address:強制配發給該 MAC 的固定 IP。
deny unknown-clients;(選用):這是非常強大的安全性設定。如果啟用這行,只有在設定檔內有列出 MAC 位址的設備才能拿到 IP,其他陌生設備完全無法透過 DHCP 上網。
我們需要將 DHCP 的設定檔掛載到 Docker 容器外部,這樣修改設定時就不需要重新建立容器。
建立存放設定檔的資料夾(例如放在使用者的家目錄下):
Bash
mkdir -p ~/docker-dhcp/data
建立並編輯 DHCP 設定檔 dhcpd.conf:
Bash
nano ~/docker-dhcp/data/dhcpd.conf
貼上以下基本配置(請根據您的實際網路環境修改 IP 網段):
Plaintext
# 定義租約時間 (秒)
default-lease-time 600;
max-lease-time 7200;
# 設定為官方授權的 DHCP 伺服器
authoritative;
# 定義您的網段與發放規則 (請改成您實際的網段)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200; # 發放的 IP 範圍
option routers 192.168.1.254; # 預設閘道 (Gateway)
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS 伺服器
option broadcast-address 192.168.1.255; # 廣播位址
}
存檔並離開 (Ctrl+O -> Enter -> Ctrl+X)
將以下內容貼入 dhcpd.conf。請注意,您需要修改**預設閘道 (routers)與子網域 (subnet)**以符合您真實的網路環境。
Plaintext
# DHCP 基礎設定
default-lease-time 600;
max-lease-time 7200;
authoritative;
# 定義您的子網路 (假設您的網段是 10.0.0.0/24)
subnet 10.0.71.0 netmask 255.255.255.0 {
option routers 10.0.71.1; # 請改成您環境的真實 Gateway IP
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS 伺服器
option subnet-mask 255.255.255.0;
# 注意:這裡不設定 range,因為我們只要根據 MAC 發放固定 IP
}
# ==========================================
# 綁定 30 台機器的 MAC 與 IP
# ==========================================
host client-201 { hardware ethernet 00:11:22:33:44:01; fixed-address 10.0.0.201; }
host client-202 { hardware ethernet 00:11:22:33:44:02; fixed-address 10.0.0.202; }
host client-203 { hardware ethernet 00:11:22:33:44:03; fixed-address 10.0.0.203; }
# ... (依此類推) ...
host client-229 { hardware ethernet 00:11:22:33:44:29; fixed-address 10.0.0.229; }
host client-230 { hardware ethernet 00:11:22:33:44:30; fixed-address 10.0.0.230
我們將使用 networkboot/dhcpd 這個輕量且穩定的映像檔。
關鍵點:DHCP 依賴廣播 (Broadcast) 封包,因此 Docker 容器必須使用 --network host 模式,才能直接與實體網路溝通。
執行以下指令啟動容器(請將最後面的 enp3s0 換成您在第三步查到的介面卡名稱):
Bash
```bash docker run -d \
--name my-dhcp-server \
--network host \
--restart unless-stopped \
-v ~/dhcp-data/dhcpd.conf:/data/dhcpd.conf \
networkboot/dhcpd enp3s0
以下會比較正常可以使用
Bash
docker run -d \
--name my-dhcp-server \
--network host \
--cap-add NET_ADMIN \
--restart unless-stopped \
-v ~/docker-dhcp/data:/data \
networkboot/dhcpd enp3s0
```bash docker run -d \ --name my-dhcp-server \ --network host \ --cap-add NET_ADMIN \ --restart unless-stopped \ --log-opt max-size=10m \ --log-opt max-file=3 \ -v ~/docker-dhcp/data:/data \ networkboot/dhcpd enp3s0
驗證與除錯
啟動後,您可以檢查容器的日誌,看看是否有錯誤(例如設定檔語法寫錯):
Bash
docker logs -f my-dhcp-server
如果日誌顯示 Listening on LPF/enp3s0/... 且沒有 Error 閃退,代表伺服器已經成功啟動並開始監聽 DHCP 請求了!
指令一(沒有設定): 雖然它使用了主機網路 (--network host),但容器本身的權限依然受限。DHCP 伺服器運作時,需要監聽廣播封包 (Broadcast) 並處理非常底層的網路協議(因為發送 DHCP 請求的設備這時還沒有 IP)。如果沒有給予足夠的網路權限,DHCP 軟體在啟動時可能會遇到「權限不足 (Operation not permitted)」的錯誤,導致無法正常派發 IP。
指令二(有設定): 如同我們上一篇提到的,加入了 --cap-add NET_ADMIN 給予了容器網路管理員的權限。這允許 DHCP 伺服器在 enp3s0 網卡上開啟 Raw Sockets 來接收和發送底層的 DHCP 廣播封包。對於架設 DHCP 伺服器來說,通常這是必須的參數。
這個差異會直接影響到你的 「IP 租約紀錄 (DHCP Leases)」 是否能保存下來。
指令一(單一檔案): -v ~/dhcp-data/dhcpd.conf:/data/dhcpd.conf 這個做法只把外部的「設定檔 (dhcpd.conf)」對應到容器內。這意味著,DHCP 伺服器運作時產生的「IP 派發紀錄檔(通常是 dhcpd.leases)」只會存在容器內部。 缺點: 只要這個容器被刪除或重建(例如更新 Docker Image),所有的 IP 租約紀錄就會全部遺失。這可能會導致區域網路內的 IP 發生衝突。
指令二(整個目錄): -v ~/docker-dhcp/data:/data 這個做法把外部的整個 data 資料夾對應到容器內的 /data 目錄。通常這個 Docker 映像檔會把設定檔 (dhcpd.conf) 和租約紀錄檔 (dhcpd.leases) 都放在 /data 裡面。 優點: 所有的設定與派發紀錄都會保存在你的主機上。即使你把容器砍掉重練,只要重新掛載這個資料夾,原本誰拿了哪個 IP 的紀錄都會完美保留。
指令二是比較正確且適合用於正式環境(Production)的寫法。
它既給予了 DHCP 伺服器必要的底層網路權限 (NET_ADMIN),又確保了設定檔與 IP 租約紀錄檔都能夠持久化保存下來(掛載整個目錄)。如果你要自己架設,強烈建議使用指令二的架構。
參數說明:
--network host:讓容器直接使用 Linux Mint 的實體網路,這是接收 DHCP 廣播的必要條件。
--cap-add NET_ADMIN:賦予容器管理網路的權限。
-v ~/docker-dhcp/data:/data:將剛剛建立的設定檔目錄掛載進容器中。
enp3s0:指定 DHCP 服務要監聽的介面。
這代表「Add Linux Capability」。 為了安全性,Docker 容器預設只會擁有最基本的系統權限(也就是說,它被「關在沙盒裡」)。如果你希望容器能執行一些比較底層的系統操作,就必須使用 --cap-add 來把特定的權限「加回去」。
這是具體被加回去的權限名稱(Network Administrator)。 當容器擁有了 NET_ADMIN 權限後,它就可以在自己的環境內執行進階的網路操作,例如:
修改 IP 路由表 (Routing tables)
設定防火牆規則 (iptables)
建立或修改網路介面 (Network interfaces,例如建立虛擬網卡)
修改 MAC 位址
最常見的用途: 在容器內架設 VPN 伺服器(如 WireGuard、OpenVPN)或網路防火牆(如 Pi-hole 的某些進階功能)。
這是 Linux 終端機 (Shell) 的標準語法,意思是**「這行還沒結束,請接續看下一行」**(Line continuation)。 因為 Docker 的指令通常很長,如果全部擠在同一行會非常難閱讀,所以開發者習慣用反斜線把它拆成多行。
實際範例:
Bash
docker run -d \
--name my_wireguard_vpn \
--cap-add NET_ADMIN \
-p 51820:51820/udp \
linuxserver/wireguard
在上面這個例子中,因為我們要跑一個 VPN 伺服器,它必須要能建立虛擬網卡並修改路由,所以就必須加上 --cap-add NET_ADMIN \。
⚠️ 安全小提醒: 給予 NET_ADMIN 權限會稍微降低容器的隔離性。除非你正在執行的服務(如 VPN、路由器軟體、網路監控工具)明確要求這個權限,否則為了系統安全,一般不建議隨便加上這個參數。
啟動後,您可以透過查看容器的 Log 來確認 DHCP 伺服器是否成功運行:
Bash
docker logs my-dhcp-server
如果設定無誤,您會看到類似 Listening on LPF/enp3s0/... 以及 Sending on LPF/enp3s0/... 的成功啟動訊息。
避免 DHCP 衝突 (Rogue DHCP): 在啟動這個 Docker 容器之前,請務必確認您區域網路內的家用路由器(或分享器)的 DHCP 功能已經關閉,否則同一個網段出現兩個 DHCP Server 會導致設備連線異常或 IP 衝突。
防火牆設定: 如果您的 Linux Mint 有啟用 ufw (Uncomplicated Firewall),請確保有開放 DHCP 所需的 UDP Port 67。
Bash
sudo ufw allow 67/udp
因為您修改了設定檔,必須讓 DHCP Server 重新讀取。請執行以下指令重啟容器:
Bash
docker restart my-dhcp-server
重啟後,可以再次用 docker logs my-dhcp-server 檢查是否有語法錯誤。如果 Log 顯示正常啟動,那麼您的 MAC 綁定規則就正式生效了!
沒問題,為您將前面的步驟與需求(使用 Docker、綁定 MAC、限制 IP 101~150、拒絕陌生設備)整合為一份完整、可以直接複製貼上的完整指南。
以下是在 Linux Mint 21.3 使用 Docker 建立「限定 MAC 白名單」的 DHCP 伺服器完整步驟:
網路模式:必須使用 Docker 的 host 模式,才能接收實體網路的 DHCP 廣播。
發放規則:為了強制每個 IP 對應 MAC,設定檔中不使用 range,而是使用 host 綁定,並加上 deny unknown-clients 阻擋未授權設備。
請先找出連線到區網的實體網卡名稱,這將用於後續的啟動指令。
Bash
ip a
📝 紀錄: 記下您的網卡名稱(例如:eth0、enp3s0 或 wlo1)。以下範例統一以 enp3s0 作為示範。
建立存放設定檔的資料夾,並編輯設定檔。
Bash
mkdir -p ~/docker-dhcp/data
nano ~/docker-dhcp/data/dhcpd.conf
將以下內容貼上(請依據您的環境修改網段、預設閘道與 MAC 位址):
Plaintext
# === 基本設定 ===
default-lease-time 600;
max-lease-time 7200;
authoritative;
# === 網段設定 ===
# 請根據您的實際網段 (例如 192.168.1.0) 修改
subnet 192.168.1.0 netmask 255.255.255.0 {
# 共同網路參數
option routers 192.168.1.254; # 預設閘道 (Gateway)
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS 伺服器
option broadcast-address 192.168.1.255; # 廣播位址
# 【安全性關鍵】:拒絕未登記在下方列表的陌生 MAC 取得 IP
deny unknown-clients;
# === MAC 與 IP 綁定列表 (101 ~ 150) ===
# 格式: host [設備名稱] { hardware ethernet [MAC]; fixed-address [指定IP]; }
host pc-101 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.101;
}
host pc-102 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.1.102;
}
host pc-103 {
hardware ethernet 1A:2B:3C:4D:5E:6F;
fixed-address 192.168.1.103;
}
# 請依照此格式,將您需要授權的設備一路往下新增到 150
}
寫入完畢後,存檔並離開 (Ctrl+O -> Enter -> Ctrl+X)
使用官方社群的 DHCP 映像檔,並將剛剛建立的設定檔掛載進去。 (⚠️ 請記得將最後一個字 enp3s0 換成您在第一步查到的網卡名稱)
Bash
docker run -d \
--name my-dhcp-server \
--network host \
--cap-add NET_ADMIN \
--restart unless-stopped \
-v ~/docker-dhcp/data:/data \
networkboot/dhcpd enp3s0
查看運行日誌: 檢查容器是否成功讀取設定檔並開始監聽。
Bash
docker logs my-dhcp-server
正常情況下,不會有 Error,並會顯示 Listening on LPF/enp3s0/...。
後續修改設定: 如果未來需要新增設備或修改 MAC,只需要編輯設定檔:
Bash
nano ~/docker-dhcp/data/dhcpd.conf
修改存檔後,重啟容器即可生效:
Bash
docker restart my-dhcp-server
關閉原有 DHCP:請務必登入您家中的路由器(分享器),將它原本的 DHCP 伺服器功能 關閉,否則網路上會有兩台機器在搶著發 IP,會導致網路大亂。
Linux Mint 防火牆:如果您有開啟 ufw 防火牆,請務必放行 DHCP 使用的 67 號 UDP 埠:
Bash
sudo ufw allow 67/udp
安裝完成後,請啟動 Docker 服務,並設定為每次電腦開機時自動執行:
Bash
sudo systemctl enable --now docker
預設情況下,執行 docker 指令都需要在前面加上 sudo。為了方便後續操作 DHCP 容器,建議將您目前的使用者帳號加入 docker 權限群組:
Bash
sudo usermod -aG docker $USER
⚠️ 重要提醒: 執行完這行指令後,您必須登出 Linux Mint 並重新登入(或是直接重新開機),權限設定才會正式生效。
重新登入後,請開啟終端機輸入以下指令:
Bash
docker --version
如果能順利顯示 Docker 的版本號碼(且不需要加 sudo 也能執行 docker ps 不報錯),就代表環境已經準備完畢,您可以直接接續執行前面為您整理的 DHCP Server 設定步驟了!
關閉透過 Docker 執行的 DHCP Server 非常簡單。根據您的需求,您可以選擇「暫時停止」或是「徹底刪除」該容器。
以下是具體的操作指令(請開啟終端機執行):
如果您只是想暫時關閉 DHCP 服務,未來可能還會用到,請使用 stop 指令。這只會停止運行,不會刪除您的容器配置:
Bash
docker stop my-dhcp-server
如何再打開? 未來若需要再次啟動,只要輸入 docker start my-dhcp-server 即可,不需要重新跑一大串 docker run 指令。
如果您不再需要這個 DHCP 服務,想要清空 Docker 裡的容器,可以使用 rm 指令(加上 -f 參數可以強制停止並刪除):
Bash
docker rm -f my-dhcp-server
💡 提示: 這個動作只會刪除 Docker 容器。您之前建立在 ~/docker-dhcp/data/dhcpd.conf 的設定檔依然會保留在您的電腦裡,非常安全。
您可以輸入以下指令來查看目前正在「運行中」的 Docker 容器:
Bash
docker ps
如果列表中沒有看到 my-dhcp-server,就代表 DHCP 伺服器已經成功關閉了!
要讓您的 my-dhcp-server 在 Linux Mint 開機後自動執行,主要包含兩個層次:Docker 服務本身的啟動,以及 容器的重啟策略。
其實在我們先前的步驟中,啟動指令已經包含了 --restart unless-stopped,這就是實現自動開機啟動的關鍵。
以下是詳細的說明與檢查步驟:
如果您當初是按照我提供的指令執行,您的容器已經具備自動重啟功能。
如果您不確定,或者當初漏掉了,不需要刪除容器重來,可以直接透過 update 指令來修改現有的容器:
Bash
# 將現有的 DHCP 容器設定為「除非手動停止,否則永遠自動重啟」
docker update --restart unless-stopped my-dhcp-server
這三種常見策略的差異:
unless-stopped (最推薦):電腦開機時會自動啟動容器。唯一的例外是:如果您在關機前「手動」下達了 docker stop,則下次開機它就不會自動啟動。
always:無論什麼情況,只要 Docker 服務啟動,容器就一定會啟動。
on-failure:只有在容器因為錯誤而「崩潰」時才會重啟,正常關機或開機則不會自動啟動。
如果 Docker 軟體本身沒啟動,容器也無法執行。在 Linux Mint 中,請執行以下指令確保 Docker 守護進程 (Daemon) 已加入開機啟動清單:
Bash
sudo systemctl enable docker
您可以透過以下指令查看容器目前的重啟策略:
Bash
docker inspect my-dhcp-server --format '{{.HostConfig.RestartPolicy.Name}}'
如果顯示 unless-stopped 或 always,代表設定已經生效。您可以嘗試重新啟動電腦,開機後直接輸入 docker ps,您應該會看到 my-dhcp-server 已經在運行中(Up)。
為了讓您更直觀地理解 Docker 的各種「重啟策略」在不同情境(如:手動關閉、系統崩潰、電腦重啟)下的行為,我準備了一個互動模擬工具供您參考:
這是新手最常踩的坑。Docker 預設的日誌會無限制增長,長期運作下來可能會吃掉幾十 GB 的硬碟空間。 建議在 /etc/docker/daemon.json(如果沒有這個檔案請自行建立)加入以下設定,限制單一容器日誌大小為 10MB,最多保留 3 個檔案:
JSON
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
設定完後記得重啟 Docker 服務:sudo systemctl restart docker。
在開發過程中,一定會產生很多未使用的映像檔 (Images) 和停止的容器。養成定期執行的習慣,或是把它寫進 crontab:
Bash
docker system prune -f
如果想連同沒有用到的 Data Volumes 和所有未被任何容器使用的映像檔一起清掉,可以加上更強力的參數:docker system prune -a --volumes。
盡量避免寫一長串的 docker run ... 指令。將服務定義寫成 docker-compose.yml 檔案,除了容易版控,日後要修改環境變數或掛載路徑也方便很多。 另外,請使用新的 docker compose (中間有空格,這是 Docker CLI 的官方外掛),取代舊版且已經停止維護的 docker-compose (有連字號,Python 寫的獨立程式)。
如果您覺得純指令介面不夠直覺,可以安裝圖形化管理工具,這在本地端做 Homelab 或是開發時非常方便:
Portainer: 最老牌、功能最全面的 Docker 視覺化管理面板。
Dockge: 近期很受歡迎的輕量化選擇,專為管理 docker-compose.yml 堆疊 (Stacks) 而生,介面極簡好看。
Linux Mint 有內建 UFW 防火牆,但 Docker 預設會直接修改 iptables 來繞過 UFW 的規則。這意味著即使你用 UFW 擋住了 8080 port,如果你執行了 docker run -p 8080:80 ...,外界依然可以直接連入你的容器。如果您有嚴格的防火牆需求,需要特別查閱「Docker UFW 整合」的相關設定。
要把原本的 docker run 指令轉換成 Docker Compose V2 的格式,你只需要建立一個 docker-compose.yml 檔案,並將各個參數對應到 YAML 的結構中。
請在你想要存放的目錄下(例如 ~/docker-dhcp/)建立一個名為 docker-compose.yml 的檔案,並填入以下內容:
YAML
services:
dhcp-server:
image: networkboot/dhcpd
container_name: my-dhcp-server
network_mode: host
cap_add:
- NET_ADMIN
restart: unless-stopped
volumes:
- ~/docker-dhcp/data:/data
command: enp3s0
services: dhcp-server::定義這個服務的名稱(在 Compose 內部識別用)。
image: networkboot/dhcpd:對應原本指令結尾的映像檔名稱。
container_name: my-dhcp-server:對應 --name my-dhcp-server。
network_mode: host:對應 --network host。
cap_add::對應 --cap-add NET_ADMIN,賦予容器網路管理的權限。
restart: unless-stopped:對應 --restart unless-stopped。
volumes::對應 -v ~/docker-dhcp/data:/data,掛載本地目錄到容器內。
command: enp3s0:對應原本放在映像檔名稱後面的 enp3s0,這是傳遞給容器啟動腳本的參數(指定監聽的網卡)。
開啟終端機,切換到 docker-compose.yml 所在的目錄:
Bash
cd ~/docker-dhcp/
使用以下指令在背景啟動服務(這等同於原本的 -d 參數):
Bash
docker compose up -d
如果未來需要停止並移除這個容器,只需在同目錄下執行:
Bash
docker compose down
1150423
第一步:停止並刪除現有的容器 請開啟終端機,執行以下指令將目前的 DHCP 伺服器停用並移除:
Bash
docker stop my-dhcp-server
docker rm my-dhcp-server
第二步:加入 Log 限制參數重新啟動 使用我們之前的啟動指令,但在中間加入 --log-opt 參數(限制每個日誌檔最大 10MB,最多保留 3 個檔案)。
(⚠️ 提醒:請確認最後一個參數 enp3s0 是您實際的網卡名稱)
Bash
docker run -d \
--name my-dhcp-server \
--network host \
--cap-add NET_ADMIN \
--restart unless-stopped \
--log-opt max-size=10m \
--log-opt max-file=3 \
-v ~/docker-dhcp/data:/data \
networkboot/dhcpd enp3s0
執行完畢後,您的 DHCP 伺服器就滿血復活了,而且從此以後它的日誌總大小會被嚴格限制在 30MB 以內,不會再塞爆硬碟。