當我們的區域網路 (LAN) 裡有很多台 PC、NB、Mobile Device,必須提供它們 IP 位址、子網路遮罩、通訊閘、DNS ... 等設定值才能上網,如何讓這些設備自動的取得這些資料,並自動的設定到系統設定值,就是需要 DHCP Service 協定來完成這項工作。
事前準備
- Raspberry Pi Type B / B+,Type A / A+ 無法實作,除非自行安裝一張網路卡。
- Raspbian 作業系統。
- 這篇實作是做為 Raspberry Pi 的實作 - Wifi 無線基地台 及 Raspberry Pi 的實作 - 反追蹤、匿名上網、可以避免被監控的改良版 Wifi 無線基地台 的前置步驟,所以由 wlan0 介面提供服務,若是我們要用有線網路提供服務,別忘了把 wlan0 改成 eth0。
- uDHCPd 與 DNSMASQ 不可同時執行,請依需求選擇其中一種套件。
BusyBox uDHCP daemon
BusyBox 這是一套依照 GPL License v2 發行的多功能型套件,它自稱 嵌入式 Linux 界的瑞士刀 (The Swiss Army Knife of Embedded Linux),共支援了 ARM v4~v7、CRIS、H8/300, x86、IA64、x86_64、Motorola 68000、MIPS、PowerPC、S390、ST SH3/4/5、SPARC、v850e ... 等 CPU 與 MCU 平台。
BusyBox 提供許多功能,所有的功能與指令清單可以參閱 BusyBox - Screenshot,官網有提供 Live BusyBox 線上模擬器 的試用。
這裡我們要使用 DHCP Server 的功能,先安裝 udhcpd 套件。
sudo apt-get -y install udhcpd
修改 DHCP 服務設定檔,找到 DHCPD_ENABLED="no",在最前面加上「#」。
sudo vi /etc/default/udhcpd
修改 DHCP 主設定檔。
sudo vi /etc/udhcpd.conf
我們預計由 wlan0 介面發放,範圍從 192.168.0.101 到 192.168.0.150,共 50 個 IP。
子網路遮罩為 255.255.255.0,通訊閘是 192.168.0.1,DNS Server 設定為 8.8.8.8 及 168.95.192.1,預設租約時間為 8 小時,WINS Server 及 Domain Name 等參數不需要
相關參數請依實際環境修改。
########## 我是分隔線 ##########
# 分配給 Clients 的 IP 範圍
start 192.168.0.101
end 192.168.0.150
# 提供服務的介面
interface wlan0
# 指定其他發送的選項
opt dns 8.8.8.8 168.95.192.1
opt subnet 255.255.255.0
opt router 192.168.0.1
#opt wins 192.168.10.10
#option dns 129.219.13.81
#option domain local
option lease 28800
########## 我是分隔線 ##########
啟動服務。
sudo service udhcpd restart
開機時自動啟動服務。
sudo update-rc.d udhcpd defaults
DNSMASQ
DNSMASQ 是一個小型的複合功能套件,提供了 DNS、DHCP、BOOTP 及 PXE 等功能,同時支援 IPv4 及 IPv6。
我們先安裝主程式。
sudo apt-get -y install dnsmasq
編輯 dnsmasq 設定檔。
sudo vi /etc/dnsmasq.conf
本機 DNS 設定檔改成 resolv.dnsmasq。
上層 DNS Server 為 8.8.8.8 及 168.95.192.1。
由 wlan0 介面發放。
範圍從 192.168.0.101 到 192.168.0.150,共 50 個 IP,預設租約時間為 8 小時。
子網路遮罩為 255.255.255.0,通訊閘是 192.168.0.1,DNS Server 查詢順序為 192.168.0.1、8.8.8.8、168.95.192.1。
加速 DHCP 的請求速度,快取資料儲存 10000 筆記錄。
對外查詢 DNS 時使用 49152 Port 之後的通訊埠。
相關參數請依實際環境修改,其他的設定值請參閱 Man page of DNSMASQ,DHCP 選項請參閱 RFC Sourcebook - BOOTP / DHCP options。
########## 我是分隔線 ##########
# 全域設定
resolv-file=/etc/resolv.dnsmasq
min-port=49152
server=8.8.8.8
server=168.95.192.1
cache-size=10000
interface=wlan0
# DHCP 設定
dhcp-range=192.168.0.101,192.168.0.150,255.255.255.0,8h
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1,8.8.8.8,168.95.192.1
dhcp-authoritative
########## 我是分隔線 ##########
複製 resolv.conf 的內容,建立 resolv.dnsmasq 新檔案。
sudo cp /etc/resolv.conf /etc/resolv.dnsmasq
編輯 resolv.dnsmasq,第一行改成本機的 IP。
sudo vi /etc/resolv.dnsmasq
啟動服務。
sudo service dnsmasq restart
開機時自動啟動服務。
sudo update-rc.d dnsmasq defaults
Client 取得 IP
我們用 Windows 7 做為 Client 端來測試,這邊可以看到已經取得正確的 IP 位址設定值。
參考資料
更新紀錄
- 2015/01/19 撰文。
0 意見 :
張貼留言