[CentOS 7] 上網的第一個步驟,租個 IP 位址來用吧 - DHCP 伺服器

by 9/01/2016 0 意見

不知道有沒有人想過,為什麼我們開機後什麼事都不用做就能上網?

當然,這背後沒有什麼魔法,不外乎是我們透過 IP 分享器或無線基地台連線的時候,網路設定值已經由它們自動被設定好了,可是這個的機制到底怎麼運作的呢?

或許有些朋友沒注意過 Windows 10 的網路設定值,TCP/IP IPv4 最重要的四個設定值,就長醬子。
  1. IP 位址 (IP Address)
  2. 子網路遮罩 (Submask or Netmask)
  3. 預設通訊閘 (Default gateway)
  4. DNS 伺服器 (DNS Server)

偶爾,我們因為特殊的需求必須更換,那就自己手動去改一下。

可是家裡 3、5 台電腦自己手動設定也就算了,若是數量高達 2、3 百台,甚至更多呢?又如果這些電腦可能還不在同一個建築物裡呢?

或是為了安全起見,我們不開放手動設定的權限,偏偏設定值就是非得調整之後,網路連線才會正常,這下子又該怎麼辦?

就算我們開放手動設定,但是每個電腦的設定值要怎樣才對?設定錯了怎麼辦?相衝突了又怎麼辦?

所以,我們需要 DHCP (Dynamic Host Configuration Protocol,動態主機組態協定) 這個協定,就是用來幫我們自動派送這些設定值到用戶端的電腦上面。

我們可以把內部網路視成一間旅館,每個 IP 位址就是裡面的客房,櫃台會記錄可以出租的房間數量有多少,目前入住的狀況如何?

而每一台電腦或手機就是旅客,要入住的時候,必須簽訂住房租約,談妥可入住的時間多久,多少時間之內是它專用?最多能租到什麼時候?租約時間快到了,得要提前重新續約,而且擁有優先續住同一間房間的權利。


事前準備


我們是以 CentOS 7.0 x86_64 Minimal 版為基礎,安裝步驟請參閱 CentOS 7.0 不完全安裝手冊 系列文章。

安裝套件


我們直接從 CentOS 官方套件庫安裝。
sudo yum -y install dhcpd

這次安裝的是 4.2.5 版。


編輯設定值


打開主設定檔。
sudo vi /etc/dhcp/dhcpd.conf

咦?!怎麼都沒有設定值,只留下註解來告訴我們兩件事。
  1. 參考 /usr/share/doc/dhcp*/dhcpd.conf.example 主設定檔的範例。
  2. 查詢 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 服務。
  1. 這是一個 Class C 的網段。
  2. 分配的 IP 範圍是 192.168.0.101 到 192.168.0.200,共 100 個 IP。
  3. 通訊埠在 192.168.0.254。
  4. DNS Server 有兩台,第一台是內部 DNS - 192.168.0.11,第二、三台是外部 DNS - 8.8.8.8 和 168.95.192.1。
  5. 預設租約時間為 8 小時,最大租約時間為 24 小時。
  6. 網管人員自己的電腦也要用 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 服務要能正常啟動,要注意:
  1. Server 本機必須設定成固定 IP。
  2. DHCP 分配的 IP 範圍必須與 Server 本機在同一個網段。
否則就會得到像是這樣子的錯誤訊息。


參考資料


圖片來源

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

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

IT 技術家 - 創站部落客

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

0 意見 :

張貼留言