Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server

by 1/19/2015 0 意見

當我們的區域網路 (LAN) 裡有很多台 PC、NB、Mobile Device,必須提供它們 IP 位址、子網路遮罩、通訊閘、DNS ... 等設定值才能上網,如何讓這些設備自動的取得這些資料,並自動的設定到系統設定值,就是需要 DHCP Service 協定來完成這項工作。

事前準備


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 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

0 意見 :

張貼留言