不知道有沒有人想過,為什麼我們開機後什麼事都不用做就能上網?
當然,這背後沒有什麼魔法,不外乎是我們透過 IP 分享器或無線基地台連線的時候,網路設定值已經由它們自動被設定好了,可是這個的機制到底怎麼運作的呢?
或許有些朋友沒注意過 Windows 10 的網路設定值,TCP/IP IPv4 最重要的四個設定值,就長醬子。
- IP 位址 (IP Address)
- 子網路遮罩 (Submask or Netmask)
- 預設通訊閘 (Default gateway)
- DNS 伺服器 (DNS Server)
偶爾,我們因為特殊的需求必須更換,那就自己手動去改一下。
可是家裡 3、5 台電腦自己手動設定也就算了,若是數量高達 2、3 百台,甚至更多呢?又如果這些電腦可能還不在同一個建築物裡呢?
或是為了安全起見,我們不開放手動設定的權限,偏偏設定值就是非得調整之後,網路連線才會正常,這下子又該怎麼辦?
就算我們開放手動設定,但是每個電腦的設定值要怎樣才對?設定錯了怎麼辦?相衝突了又怎麼辦?
所以,我們需要 DHCP (Dynamic Host Configuration Protocol,動態主機組態協定) 這個協定,就是用來幫我們自動派送這些設定值到用戶端的電腦上面。
我們可以把內部網路視成一間旅館,每個 IP 位址就是裡面的客房,櫃台會記錄可以出租的房間數量有多少,目前入住的狀況如何?
而每一台電腦或手機就是旅客,要入住的時候,必須簽訂住房租約,談妥可入住的時間多久,多少時間之內是它專用?最多能租到什麼時候?租約時間快到了,得要提前重新續約,而且擁有優先續住同一間房間的權利。
事前準備
我們是以 CentOS 7.0 x86_64 Minimal 版為基礎,安裝步驟請參閱 CentOS 7.0 不完全安裝手冊 系列文章。
- CentOS 7.0 不完全安裝手冊 - 簡介
- CentOS 7.0 不完全安裝手冊 - 事前準備
- CentOS 7.0 不完全安裝手冊 - Step 1 系統安裝選單
- CentOS 7.0 不完全安裝手冊 - Step 2 選擇初始語言
- CentOS 7.0 不完全安裝手冊 - Step 3 設定「網路與主機名稱」
- CentOS 7.0 不完全安裝手冊 - Step 4 設定「日期時間」
- CentOS 7.0 不完全安裝手冊 - Step 5 設定「鍵盤配置」
- CentOS 7.0 不完全安裝手冊 - Step 6 設定「語言支援」
- CentOS 7.0 不完全安裝手冊 - Step 7 設定「安裝來源」
- CentOS 7.0 不完全安裝手冊 - Step 8 設定「軟體選擇」
- CentOS 7.0 不完全安裝手冊 - Step 9 設定「安裝目的地」
- CentOS 7.0 不完全安裝手冊 - Step 10 開始複製檔案
安裝套件
我們直接從 CentOS 官方套件庫安裝。
sudo yum -y install dhcpd
這次安裝的是 4.2.5 版。
編輯設定值
打開主設定檔。
sudo vi /etc/dhcp/dhcpd.conf
咦?!怎麼都沒有設定值,只留下註解來告訴我們兩件事。
- 參考 /usr/share/doc/dhcp*/dhcpd.conf.example 主設定檔的範例。
- 查詢 dhcpd.conf 第五章的 manual page。
先來看一下範例檔的內容,剛剛「*」代表版號。
sudo vi /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
這邊提供了 6 種案例的設定範例,我們可以參考它來規劃現有需求的設定值。
如果需要更詳細的參數說明,ISC DHCP 官網告訴我們,別在那兒瞎忙了,咱們就直接找男人吧 ...... (羞)
man 5 dhcpd.conf
我們預計在 IP 為 192.168.0.1 的伺服器上提供 DHCP Server 服務。
- 這是一個 Class C 的網段。
- 分配的 IP 範圍是 192.168.0.101 到 192.168.0.200,共 100 個 IP。
- 通訊埠在 192.168.0.254。
- DNS Server 有兩台,第一台是內部 DNS - 192.168.0.11,第二、三台是外部 DNS - 8.8.8.8 和 168.95.192.1。
- 預設租約時間為 8 小時,最大租約時間為 24 小時。
- 網管人員自己的電腦也要用 DHCP 自動指定,可是不希望 IP 一直變來變去,固定在 192.168.0.99。
sudo vi /etc/dhcp/dhcpd.conf
# 預設租約時間 8 小時,以秒為單位
default-lease-time 28800;
#最大租約時間 24 小時,以秒為單位
max-lease-time 86400;
# 宣告這台主機為此網段的主 DHCP 伺服器
authoritative;
# 宣告 192.168.0.0 的 Class C 網段
subnet 192.168.0.0 netmask 255.255.255.0 {
# 可分配的 IP 範圍
range 192.168.0.101 192.168.0.200;
# 子網路遮罩
option subnet-mask 255.255.255.0;
# 通訊閘
option routers 192.168.0.254;
# DNS 伺服器
option domain-name-servers 192.168.0.11, 8.8.8.8, 168.95.192.1;
}
# 宣告網管人員電腦,webmaster 是自訂的註解
host webmaster {
# 電腦的 MAC Address
hardware ethernet 00:A0:78:8E:9E:AA;
# 指派的 IP 位址
fixed-address 192.168.0.51;
}
# 每一台需要固定 IP 的電腦,要單獨宣告自己的設定值
host boss {
# 電腦的 MAC Address
hardware ethernet 00:B0:57:99:AC:FE;
# 指派的 IP 位址
fixed-address 192.168.0.61;
}
其他相關設定
防火牆
預設通訊埠是走 UDP 67 跟 68,打開防火牆的通訊埠。sudo firewall-cmd --permanent --add-service=dhcp
sudo firewall-cmd --reload
修改成固定 IP
先確認一下網路卡的編號。sudo nmcli device status
編輯網路卡的設定檔,別忘了依實際環境修改網路卡的編號。
sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
取消自動取得 IP。
# BOOTPROTO=dhcp
加入手動指定 IP。
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=192.168.0.11
嫌麻煩的話,也可以用類圖形的文字介面來修改這些設定值。
nmtui
重新啟動網路卡,讓固定 IP 生效。
sudo ifdown enp0s3 && sudo ifup enp0s3
啟動服務
啟動 DHCP Server。
sudo systemctl restart dhcpd
開機後自動啟動。
sudo systemctl enable dhcpd
用戶端連線
DHCP Server 怎麼用?
當然是什麼事都不用做,不然要把它架起來幹嘛?
先讓網管人員的 CentOS 6 當作 DHCP Client 來壓壓驚,確認一下 IP 會從 DHCP Server 取得。
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep BOOTPROTO
重新啟動網路卡來取得 IP。
sudo ifdown eth0 && sudo ifup eth0
各位觀眾,it's show time ......
ifconfig eth0; route -n; cat /etc/resolv.conf
IP 位址、子網路遮罩、通訊閘、DNS 伺服器,這些數值乖乖的照我們所安排正確取得了。
被租用的 IP 位址會記錄在 /var/lib/dhcpd/dhcpd.leases 檔案裡,它只會顯示有租約的動態分配 IP,用 MAC Address 直接指派的 IP 位址不會列出來。
這邊我們可以看到 192.168.0.101 這個 IP,租約開始跟結束的時間,租用者的 MAC Address 及主機名稱 ... 等等的資料。
注意事項
DHCP Server 服務要能正常啟動,要注意:
- Server 本機必須設定成固定 IP。
- DHCP 分配的 IP 範圍必須與 Server 本機在同一個網段。
參考資料
- Internet Systems Consortium - DHCP
- 鳥哥的 Linux 私房菜 - 第十二章、網路參數控管者: DHCP 伺服器
- Red Hat Enterprise Linux 5 Deployment Guide - 20.2. Configuring a DHCP Server
- IANA - Dynamic Host Configuration Protocol (DHCP) and Bootstrap Protocol (BOOTP) Parameters
圖片來源
- http://www.digitalfusionmag.com/2010/03/it-is-2010-why-can-you-still-not-use-a-computer/
- Alan Light via Visualhunt / CC BY
- http://www.hotelrea.gr/
更新紀錄
- 2016/09/01 撰文。
0 意見 :
張貼留言