DHCP(動態主機配置協定, Dynamic Host Configuration Protocol)允許電腦利用網路來自動取得其在這個網路下的IP位址等網路配置資訊,如此一來就不用逐一地替每台電腦設定IP位址了!當裝置想要連上網路時,它會發送DHCP請求到這個網路,如果這個網路有DHCP伺服器存在,就會處理這個請求,並回覆給這台裝置應該要使用的IP位址,一旦裝置接受DHCP伺服器所傳來的IP位址,DHCP伺服器就會將剛才回覆給該台裝置的IP位址記錄下來,使這台裝置可以在這個網路下正常運作。
安裝DHCP伺服器
要在Ubuntu Server上安裝DHCP伺服器,可以直接在終端機中執行以下指令:
接著使用vim等文字編輯器,來編輯/etc/dhcp/dhcpd.conf
設定檔,指令如下:
針對我們要提供DHCP服務的網路,增加subnet
區塊。格式為:
subnet IPv4位址 netmask 子網路遮罩 { }
例如:
subnet 192.168.57.0 netmask 255.255.255.0 { }
DHCP伺服器分為處理IPv4的DHCP和處理IPv6的DHCPv6。/etc/dhcp/dhcpd.conf
設定檔是DHCP的設定檔,/etc/dhcp/dhcpd6.conf
設定檔是DHCPv6的設定檔。所以若要設定IPv6,接著還要使用vim等文字編輯器,來編輯/etc/dhcp/dhcpd6.conf
設定檔,指令如下:
針對我們要提供DHCP服務的網路,增加subnet
區塊。格式為:
subnet6 IPv6的CIDR { }
例如:
subnet6 fe80:0:0:0::/64 { }
存檔後,使用以下指令來重新啟動DHCP伺服器:
DHCP使用的UDP連接埠為67(DHCP客戶端則會使用UDP連接埠68來接收回覆),DHCPv6使用的UDP連接埠為547(DHCPv6客戶端則會使用UDP連接埠546來接收回覆),可以使用以下指令來查看DHCP伺服器是否有確實安裝成功。
ss
指令可以顯示出Socket相關的資訊。-l
參數可以只顯示正在監聽中的連線。若使用ss
指令時都沒給任何參數的話,會忽略掉監聽中的連線。-u
參數可以只顯示UDP連線。-n
參數可以讓連接埠數字直接被輸出,而不是用一個名稱代替。-p
參數可以顯示佔用連線的行程。
如上圖,如果有看到DHCP伺服器有在監聽UDP連接埠67和547的話,就表示DHCP伺服器安裝成功了!
如果DHCP伺服器沒有啟動成功,以下指令可以查看DHCP伺服器啟動的狀態:
設定DHCP伺服器
設定子網路獨立服務
DHCP伺服器支援獨立運作在子網路中的常用服務,像是DNS、SMTP、POP3、NTP等。在DHCP伺服器的主設定檔/etc/dhcp/dhcpd.conf
和/etc/dhcp/dhcpd6.conf
中,可以使用option
命令來設定全域或是子網路區塊的參數。
例如我們要指定DHCP伺服器發配DNS的IP位址或是網域名稱給加入至這個子網路的裝置的話,可以在/etc/dhcp/dhcpd.conf
設定檔中撰寫:
如果有多台DNS,使用逗號,
來隔開。
在/etc/dhcp/dhcpd6.conf
設定檔中撰寫:
domain-name-servers
和dhcp6.domain-name-servers
這兩個參數用來指定該DHCP伺服器所發配的DNS位址。其它服務的參數對應如下:
- smtp-server:SMTP。
- pop-server:POP3。
- ntp-server:NTP。
設定發配的IP範圍
在subnet
區塊中,可以使用range
命令來啟用並指定要發配給使用這台DHCP伺服器的裝置的IP範圍。如果是在subnet6
區塊中,則需使用range6
命令。
例如:
subnet 192.168.57.0 netmask 255.255.255.0 { range 192.168.57.150 192.168.57.160; }
subnet6 fe80:0:0:0::/64 { range6 fe80::150 fe80::160; }
以上設定,可以讓DHCP伺服器分別在192.168.57.0/24和fe80:0:0:0::/64子網路中,發配192.168.57.150~192.168.57.160的IPv4位址和fe80::150~fe80::160的IPv6位址。
發配出去的IP位址會有一個租用期限(lease-time),這個期限可以使用default-lease-time
和max-lease-time
命令來控制,單位是秒。IPv4位址的租約(lease)會存放在/var/lib/dhcp/dhcpd.leases
檔案中;IPv6位址的租約(lease)會存放在/var/lib/dhcp/dhcpd6.leases
檔案中。
設定MAC位址對應的IP
上面提到的subnet
區塊可以針對某個子網路在某範圍的IP位址中選出一個發配出去。這邊要介紹的host
區塊則是可以根據發出DHCP請求的裝置的MAC位址,來決定要給它什麼樣的IP位址。
無論在/etc/dhcp/dhcpd.conf
和/etc/dhcp/dhcpd6.conf
中,寫法均如下:
host 可辨識的名稱 { hardware ethernet MAC位址; fixed-address IP位址; }
例如:
host server2 { hardware ethernet 08:00:27:39:e2:72; fixed-address 192.168.57.104; }
群組化設定
在/etc/dhcp/dhcpd.conf
和/etc/dhcp/dhcpd6.conf
設定檔中,命令的撰寫位置會有其影響範圍,下層的區塊會沿用上層區塊的命令,但是在下層區塊中也可以透過命令來覆寫掉上層的設定。
對於那些關聯性很高的設定區塊,我們可以將它們組成group
區塊,以共用部份相同的命令。
例如:
group { option domain-name-servers 192.168.56.103; host server2 { hardware ethernet 08:00:27:39:e2:72; fixed-address 192.168.57.104; } host server3 { hardware ethernet 08:00:27:39:e3:56; fixed-address 192.168.57.105; } subnet 192.168.57.0 netmask 255.255.255.0 { range 192.168.57.150 192.168.57.160; } }