Linux伺服器 Linux伺服器

網站伺服器建置與管理 - RockyLinux 9

網站伺服器建置與管理 > 課程內容 > 第 5 堂課 - 區域網路的 DHCP server 建置

第 5 堂課 - 區域網路的 DHCP server 建置

上次更新日期 2022/10/06

上節課程雖然已經完成了防火牆的功能,同時也將 NAT 的 IP 分享器環境設定妥當。不過,等等!如果只有一兩部 client, 我們手動去設定好 IP 還沒啥,如果像電腦教室內有這麼多電腦,難道要一台一台去設定?這時得要架設 DHCP 才行。 還是不對!我們上課的環境裡面只有一個獨立的內部區網,所有的同學都在同一個區網內,那 DHCP 會互相干擾耶! 這怎辦?這時可能得要玩一玩 VLAN 的設定才行!那,如果區網內的 client 要溝通時,該怎辦呢? 這時,恐怕就得要透過路由功能來處理比較妥當喔!

學習目標

  • 了解 VLAN 主要運用在 switch 上,但是 Linux 網卡可以模擬
  • 學會以 VLAN 設計自己的 server/client 網路對接
  • 學會 DHCP server 的實做,並設計、管理自己的區域網路規劃
  • 了解並實際設定額外的路由規劃
  • 5.1: 什麼是 VLAN 與達成方式 (Option)
  • 5.2: 區網的網路參數自動取得 DHCP 服務設定
  • 5.3: 內部私有網域的路由設定(再講到 routing 的互傳概念!)
  • 5.4: 課後練習

5.1: 什麼是 VLAN 與達成方式 (Option)

在所謂的星形連線方式中,只要是串接在同一個 switch 上面的所有電腦,在實體上面就是串接在一起,沒辦法隔離的! 也就是所謂的實體區域網路連接的狀態。不過,許多時刻,我們可能需要對不同電腦進行隔離,否則許多封包的傳遞可能會有問題。 但是我們只有一個 switch 可以達到實體分離的狀態嘛?可以的~那就是透過所謂的虛擬區域網路 (virtual local area network, VLAN)。

VLAN 最簡單的想法,就是在一部 switch 裡面,將許多不同的埠口規劃成同一區,非在同一區的其他埠口,就無法讓封包流進這一區。 舉例來說,一部 12 port 的 switch ,將 1~6 劃分成為一個 vlan id 2,另外的 7~12 保留原本的 vlan id 1 設定,那在邏輯的思考上面, 這個 swith 已經被隔離成為兩個區塊,你可以將 1~6 埠口想成是 swtich 1 而 7~12 埠口則為 switch 0,這兩個邏輯的 swtich 裡面的封包是無法互相傳遞的!

這個 vlan 的功能對於只有一個共同實體連線,但是卻想要切割出不同區域網路,且不同 LAN 彼此間不互相干擾的情況時, 就顯的非常的有幫助!舉例來說,我們的上課環境中,大家在虛擬電腦教室系統裡面僅有一個獨立的區網, 所有同學都在此區網裡面使用網路,此時如果我們需要架設類似 DHCP 的服務時,彼此之間就容易產生競爭與干擾。 若能使用 VLAN 技術,每個使用者都有自己的一個虛擬網路,則彼此之間就可以不互相干擾, 此時要架設相關服務就顯的簡單了!畢竟不會被干擾啊!

請注意,這個 VLAN 主要的目的是讓我們上課的環境達到邏輯上面完全分離的效果!對於一般環境來說,不是必須的設定! 架設這個功能之前,請先問你自己,是否需要這個設計!不要看到黑影就開槍...

  • VLAN 的 ID 識別碼

其實,基本上,預設的所有網路封包都是在一個 ID 為 1 號的 VLAN 環境下,所以大家都是能夠透過廣播 (broadcast) 來互通訊息的同一 VLAN 內。 因此,如果想要讓你的 VLAN 與原本的網路隔離開來,就給你的網路一個 VLAN 不為 1 的 ID 即可!這樣就能夠讓你的網路隔離開來了。 因此,等一下的實際設定中,同學們需要定義出自己的 VLAN ID 號碼,且不能重複,否則就會互相干擾啊!

  • RockyLinux 9 的 VLAN 設定

其實我們的 Linux 可以直接透過網路卡來做 VLAN 的封包表頭喔!你需要做的是:

  1. 選擇一個實體網卡界面,並且選擇一個 VLAN 的 ID 號碼 (不可以是 1 號)
  2. 透過 nmcli 的指令,實做一個名為 vlanXXX 的網卡,且這個 VLAN 網卡使用上面談到的那個實體網卡界面
  3. 給予這個 vlanXXX 的連線名稱實際的 IP 位址與網路參數即可。
  4. (optional) 有可能因為 VLAN 包太多層,導致 MTU (最大傳輸單位) 無法拆解的問題。所以,建議可以降低 MTU,從標準的 1500 降低到 1400 左右即可。

就這麼簡單!

例題 5.1.A:讓你的 team0 變成一個 vlan 的實體網卡,然後建立一個名為 vlanXX 的 VLAN 網卡,且 ID 就是 XX,其中 XX 為你的 IP 尾數。
  1. 預處理:因為 team0 即將變成 vlan 的實體網卡,因此, team0 的網路參數應該要全部取消才對。 所以,你需要 (1)先關閉 team0 ; (2)讓 team0 的網路參數設定取消,因此 ipv4.method 設定為 disable 以及 ipv6.method 設定為 link-local , 在設定的同時,你可能需要取消其他網路參數,例如加上 ipv4.addresses '' 來將其他有用的參數取消才行
  2. 先想好,你的網卡類型為 vlan (type vlane) ,你的連線名稱為 vlanXX (con-name),你的網卡名稱為 vlanXX (ifname vlanXX),你的裝置為 team0 (dev team0),你的 vlan id 為 XX ( id XX)
  3. 將上述的資料以: nmcli connection add ... 加入,最終會產生一個名為 vlanXX 的連線界面與網卡
  4. 讓 vlanXX 的 IP 來接管原本 team0 的設定!包括 IPv6 及 IPv4
  5. 讓 MTU 設定為 1400 左右 (802-3-ethernet.mtu 1400)
  6. 最後記得啟動 vlanXX 喔!此時使用 ip addr show 或 ifconfig,就會看到 vlanXX 的網卡。

完成了上述的設定後,你的 server IP 並沒有改變,依舊具有 192.168.254.*/24 以及 10.255.*.254/24 這兩個網路參數, 不過,在 client 端卻無法 ping 到 10.255.*.254 這個 IP 了!這是因為 server 與 client 的 vlan 已經在不同的網段之故。 所以,接下來你得要開始修改 client 的網路卡設定才行!

例題 5.1.B:讓你的 client 加入 vlanXX 的虛擬區域網路 ID 號碼內。
  1. 預處理:跟剛剛 team0 的取消類似,你可以透過 nmcli connection modify ens3 ipv4.method disable ipv4.dns "" ipv4.gateway "" ipv4.addresses "" 來取消所有的網路設定項目。(注意, ipv6 也要同步處理)
  2. 先想好,你的網卡類型為 vlan (type vlane) ,你的網路連線名稱為 vlanXX (con-name vlanXX),網卡名稱為 vlanXX ( ifname vlanXX), 你的裝置為 ens3 (dev ens3),你的 vlan id 為 XX ( id XX)
  3. 將上述的資料以: nmcli connection add ... 加入,最終會產生一個名為 vlanXX 的連線界面與網卡
  4. 讓 vlanXX 的 IP 來接管原本 ens3 的設定!包括 IPv6 及 IPv4
  5. 讓 MTU 設定為 1400 左右 (802-3-ethernet.mtu 1400)
  6. 最後記得啟動 vlanXX 以及 ens3,這樣就可以使用 ip addr show 以及 ifconfig 來看到 vlanXX 這張網卡了! 

你的 client 也完成如上的設定之後,此時你的 server 與 client 之間的對答只有你們自己可以取得,除非別人也使用跟你的 vlan 相同的 id, 否則,看到你的封包,應該都是直接丟棄的喔!

5.2: 區網的網路參數自動取得 DHCP 服務設定

如果區域網路裡面有超過 5 台以上的電腦,你要怎麼設定好每一台電腦的網路?每一台電腦都手動去設定嘛? 有沒有這麼麻煩?若讓每部電腦都自動取得 IP 的話,那不是很好嘛?就像現在一般無線網路基地台的功能, 每台手機只要連上無線 wifi AP 就可以自動取得網路參數,這才是正解吧?那這是什麼服務呢?即時就是動態主機設定服務 (Dynamic Host Configuration Protocol, DHCP)。 說穿了,就是自動發派 IP 與相關網路參數給各用戶端電腦的服務。

DHCP 服務的 Server 與 client 端的連線如下所示:

DHCP

基本上,用戶端的網路取得流程為:

  1. 用戶端:利用廣播封包發送搜索 DHCP 伺服器的封包
  2. 伺服器端:提供用戶端網路相關的租約以供選擇 (主要透過用戶端 MAC 位址來判斷喔!)
  3. 用戶端:決定選擇的 DHCP 伺服器提供的網路參數租約並回報伺服器:
  4. 伺服器端:記錄該次租約行為並回報用戶端已確認的回應封包資訊:

要注意的是,如果區域網路裡面有多部 DHCP 伺服器的話,那麼用戶端會用先回應的那一部 DHCP 伺服器所提供的網路參數為主, 所以,最好區域網路內不要有兩部以上的 DHCP 服務,否則容易產生干擾的狀態喔!

  • 固定 IP 與動態給予 IP 的模式:

DHCP 伺服器會依據設定來給予某些主機固定的 IP 喔!透過的方式就是依據用戶端的 MAC 位址來處理的。當用戶端電腦使用自動取得 IP 來探索區域網路內的 DHCP 服務時, 一般來說,你的 DHCP 會做這些動作:

  1. 到伺服器的登錄檔中尋找該用戶之前是否曾經用過某個 IP ,若有且該 IP 目前無人使用,則提供此 IP 給用戶端;
  2. 若設定檔針對該 MAC 提供額外的固定 IP (static IP) 時,則提供該固定 IP 給用戶端;
  3. 若不符合上述兩個條件,則隨機取用目前沒有被使用的 IP 參數給用戶端,並記錄下來。

也就是說,如果你想要讓某部主機永遠取得固定的 IP 時,可以透過取得該主機的網卡卡號,再修改 DHCP 伺服器的設定檔, 讓該網卡 (MAC address) 提供固定的 IP 即可喔!

  • DHCP 服務的安裝、設定、啟動與觀察

DHCP 主要的服務軟體名稱為 dhcp-server 這個軟體,相關的檔案主要為:

  • /etc/dhcp/dhcpd.conf 主設定檔
  • /usr/share/doc/dhcp-server/dhcpd.conf.example 範例檔
  • /var/lib/dhcpd/dhcpd.leases 用戶端租約檔
  • systemctl [start|enable|stop|status] dhcpd

現在針對我們的伺服器內網 (10.255.*.0/24 那一個網段) 來設定 dhcp 伺服器的行為時,我們預計動態分配從 10.255.*.101~10.255.*.199 為動態取得 IP 的區段, 而 10.255.*.200 之後的區段保留給未來其他需要的內部服務使用,至於 10.255.*.1~10.255.*.100 則保留給固定的某些主機對應使用。 那麼簡單的設定檔就可以寫成如下的模樣: (鳥哥以 * 為 200 來設計如下的樣式!請將下列的 200 改成你的 IP 尾數即可。)

[root@localhost ~]# yum install dhcp-server
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style       none;
default-lease-time      600;       # 預設的租約時間
max-lease-time          7200;      # 最大的租約時間

subnet 10.255.200.0 netmask 255.255.255.0 {
        range 10.255.200.101    10.255.200.199;
        option routers          10.255.200.254;
        option domain-name      "lan200.dic.ksu";
        option domain-name-servers 120.114.100.1, 168.95.1.1;
}

[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl enable dhcpd
[root@localhost ~]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 六 2017-09-23 23:55:32 CST; 8s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 8531 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─8531 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

[root@localhost ~]# vim /var/log/messages
Sep 23 23:55:31 pc200 systemd: Starting DHCPv4 Server Daemon...
Sep 23 23:55:32 pc200 dhcpd: Internet Systems Consortium DHCP Server 4.2.5
Sep 23 23:55:32 pc200 dhcpd: Copyright 2004-2013 Internet Systems Consortium.
Sep 23 23:55:32 pc200 dhcpd: All rights reserved.
Sep 23 23:55:32 pc200 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Sep 23 23:55:32 pc200 dhcpd: Wrote 0 leases to leases file.
Sep 23 23:55:32 pc200 dhcpd: Listening on LPF/vlan200/6e:01:19:f2:60:34/10.255.200.0/24
Sep 23 23:55:32 pc200 dhcpd: Sending on   LPF/vlan200/6e:01:19:f2:60:34/10.255.200.0/24

因為紀錄的資訊的關係,因此你從 systemctl status dhcpd 裡頭看不到實際的 dhcp 生效的狀態,所以請到 /var/log/messages 裡頭去看看, 要確認出現如上的特殊字體部份,這才確認 server 是順利的在正確的網卡上面生效的! 我們這裡的正確網卡指的是 vlan200 那一張喔!要注意!

  • 防火牆的設定

如果要針對用戶端來放行 dhcp 的要求,那麼就得要提供 udp port 67 的放行功能!因此,請修改 /root/firewall.sh 的內容, 加上 dhcp 的協力功能!

[root@localhost ~]# vim /root/firewall.sh
iptables -A INPUT -p udp --dport 67 -i vlan200 -j ACCEPT

[root@localhost ~]# sh /root/firewall.sh
  • 用戶端的自動取得 IP

轉到 client 端的設定上,只要指定 ipv4.method 為 auto 之後,重新啟動網卡即可!

[root@localhost ~]# nmcli connection show
NAME     UUID                                  TYPE            DEVICE
ense     ba8b05ee-2e76-4a44-a341-cd50874aa49b  802-3-ethernet  ens3
vlan200  849f2c14-b52f-4817-8cea-db69502160cc  vlan            ens3.200

[root@localhost ~]# nmcli connection modify vlan200 ipv4.method auto ipv4.addresses '' ..
[root@localhost ~]# nmcli connection up vlan200

這時 ifconfig 就會看到 ens3.200 這張網卡上面的 IP 已經改為 10.255.200.101 囉!接下來,來到 server 端,查看一下租約檔案, 這個檔案的內容就會有點像這樣:

[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\001!Y@tn\001\031\362`4";

lease 10.255.200.101 {
  starts 6 2017/09/23 16:17:27;
  ends 6 2017/09/23 16:27:27;
  cltt 6 2017/09/23 16:17:27;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 52:54:00:41:49:77;
}

這就是 MAC address 搭配 IP 的設定紀錄資料。

  • 設定取得固定 IP 的方案

我們的 client IP 尾數會變成 101 啊!這不是我們要的!所以,請查詢到 client 的 MAC address 之後,將它設定成為固定的 IP 位址才好!

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style       none;
default-lease-time      600;       # 預設的租約時間
max-lease-time          7200;      # 最大的租約時間

subnet 10.255.200.0 netmask 255.255.255.0 {
        range 10.255.200.101 10.255.200.199;
        option routers          10.255.200.254;
        option domain-name      "lan200.dic.ksu";
        option domain-name-servers 120.114.100.1, 168.95.1.1;

        host client {
                hardware ethernet 52:54:00:41:49:77;
                fixed-address 10.255.200.1;
        }
}

[root@localhost ~]# systemctl restart dhcpd

接下來,只要回到 client 端,重新執行『 nmcli connection up vlan200 』,這樣就可以更新到正確的 IP 囉! 也同樣記得回到 server 去看一下 /var/lib/dhcp/dhcpd.leases 的檔案紀錄喔!

例題 5.2.A:完成底下的設定與觀察
  1. 假設有一張網卡 mac address 為 52:54:00:11:11:11 ,這張網卡預計要給予 10.255.*.51 的 IP 位址, 該如何設定與重新啟動 dhcpd 服務?
  2. 重新啟動 dhcpd 後,觀察 /var/log/messages 裡面與 dhcp 有關的訊息,為何會有一堆『 No subnet declaration for ens3 . 』的訊息? 那代表什麼意思?
  3. 前往 client,透過 nmcli connection show vlan200 之類的指令,查看一下最後面出現的訊息,有關 DHCP option 的訊息, 嘗試解析這些訊息的意義為何?

由於我們在前一小節 (5.1) 已經設定好了 vlan 了,因此這個 dhcp 的服務會讓大家的網路都是在分離的狀態下運作的, 因此並不會互相干擾的喔!這樣運作就方便多了!連在這個測試環境中,我們也不需要關閉 DHCP 服務囉!從這裡我們也能知道, 如果某些比較重要的場合,我們透過 vlan 來設定,也能夠避免很多被偷聽或被攻擊的問題呢!衍生出來的資安保護,倒是挺不錯的概念。 只是, vlan 真的只能在區網內啊!

5.3: 內部私有網域的路由設定(再講到 routing 的互傳概念!)

現在來想一想,目前我們訓練機的環境中,就是一個稍微龐大一點點的企業私有網路環境,每位同學都是一個單位部門的 IT 管理人員, 所以我們會有一個外部的區網 (192.168.254.0/24),以及好多個子網路 (10.255.*.0/24),那麼來想一想, 能不能讓 10.255.100.1 可以直接連線到 10.255.200.1 呢?這兩個都是子網路喔!

直覺上,這兩個子網路要連線,好像可以吧?不就是已經所有的線路都接在一起嘛?不過,實際上『預設』卻是不可行的! 這是因為路由的問題!先來看看下面這張圖的連結狀況:

DHCP

在只有目前的 NAT 設定情況下,每一部路由器都只記得自己下一層與自己上一層的路由,隔壁層與下下層的路由就沒有注意到了! 因此,當封包由 PCZ2 的 10.255.200.1 傳出來,目的地想要跑去 PCZ1 的 10.255.100.1 時,封包的傳遞方向是這樣的:

  1. 先傳送到 Router Z2,亦即 10.255.200.254 這個 IP
  2. 經過 Z2 的路由判斷,最終交給 192.168.254.254
  3. 經過 192.168.254.254 的路由判斷,因為沒有設定 10.255.100.254 的目的第位置,因此交給這部主機的 Gateway, 然後就傳出去給 GW 了!
  4. 其他的 GW 當然就更不知道封包該怎麼傳,然後又是 private 封包,所以該封包就直接被 drop 掉了!

瞧,這封包連 router Z1 那部 192.168.254.100 都還不知道在哪裡呢!真是傷腦筋!其實,最好解決的方案,是直接在 192.168.254.254 那部 router 上面動手腳,讓它記得每一個子網路的路由是那一層 Router 所管理即可。不過該 router 你可能沒辦法動 (例如計中的環境, 我們是無法動手的!),此時只好讓自己的 router 知道彼此的目的在哪裡即可。也就是說:

  • 讓 Router Z2 知道 10.255.100.0/24 要交由 192.168.254.100 管理
  • 讓 Router Z1 知道 10.255.200.0/24 要交由 192.168.254.200 管理

這樣就搞定了!因為如此一來,當封包由 10.255.200.1 傳出來而要交給 10.255.100.1 的時候,就會透過 Router Z2 再到 Router Z1 然後給 PC Z1, 回應的封包也能夠經由 Router Z1 回傳給 Router Z2 再回給 PC Z2 了!真的要很注意,不能單純的設定 Router Z1 或 Router Z2 而已, 這兩者之間得要互相搭配才行!那該如何設定呢?很簡單!透過 nmcli 裡面的 ipv4.routes 處理即可。設定很簡單,這樣做看看:

[root@localhost ~]# nmcli connection modify ens3 +ipv4.routes '10.255.100.0/24 192.168.254.100'
[root@localhost ~]# nmcli connection show ens3 | grep ipv4.routes
ipv4.routes:                            { ip = 10.255.100.0/24, nh = 192.168.254.100 }

[root@localhost ~]# nmcli connnection up ens3
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.254.254 0.0.0.0         UG    103    0        0 ens3
10.255.100.0    192.168.254.100 255.255.255.0   UG    103    0        0 ens3
10.255.200.0    0.0.0.0         255.255.255.0   U     400    0        0 vlan200
192.168.254.0   0.0.0.0         255.255.255.0   U     103    0        0 ens3

同理,你也得在另一台 Router Z1 上面反向設定回來!兩邊都做好之後,PC Z1 與 PC Z2 就可以隨意互相傳遞資料了!所以, 一切的一切,都是路由的設定啦!

此外,由於我們在之前已經設定過 IP 偽裝的功能,因此從 ens3 出去的封包都會被偽裝成 ens3 的 IP。這對於純粹用於內部的 Server 恐怕會出問題。 因此,你應該要將內部的網段加入 firewall.sh 裡面,且放在偽裝的那行條件之前,使用 ACCEPT 即可放行

iptables -t nat -A POSTROUTING -d 10.0.0.0/8 -o ens3 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.255.200.0/24 -o ens3 -j MASQUERADE

若內部網路通過這行規則,就不會去使用到後續的 IP 偽裝的規則了!

5.4: 課後練習

  1. (68%)實作題:啟動 Server 作業硬碟 - unit05
    1. 網路參數的設定,請依據底下的方式來設定好你的網路環境:
      1. 建立 ens3 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.18.255.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      2. 使用 teamd 的機制建立內部區域網路的備援功能:
        • team 的界面使用 team0 卡號,且連線名稱請命名為 team0
        • team 使用 activebackup 備援功能,不要使用 loadbalance
        • team 的實體網卡 (team slave) 請使用 ens7 及 ens8 ,且其連線名稱名稱亦請命名為 ens7, ens8
        • team0 網路參數為: 172.19.*.254/24,不需要 gateway
      3. 主機名稱指定為: server*.example.dic
      4. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 基本的伺服器作業系統設定行為:
      1. 依據底下的說明,選擇距離我們最近的成大網站來作為 yum server 的來源:
        成大 ccns 網站: https://mirror.ccns.ncku.edu.tw/howto/#rocky-linux
        請記得修改過設定檔,應該要將清單清除 (yum clean all) 較佳。
      2. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, bind-utils, kernel
      3. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
      4. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    3. 實際設定好本機防火牆
      1. 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
      2. 將預設的規則轉存到 /root/firewall.sh 這個檔案內
      3. 修改上述 firewall.sh 腳本,讓內容有點像底下這樣:
        1. 首先將全部的規則刪除 (應該有三條指令)
        2. 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
        3. 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
        4. 放行你自己的內部區域網路那個網域的連線要求 (針對 LAN 的信任設定)
        5. 讓 ssh 只對外部的區網放行,不會對 Internet 放行 (對 ssh 連線做限制較佳)
        6. 讓 http 針對整個 Internet 放行 (一般公開的服務設計)
        7. 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
      4. 重新啟動 iptables 服務,然後觀察規則是否正確
    4. 實際設定好 Server 的路由功能
      1. 讓核心支援 IP 轉遞的功能,並且每次重新開機都可以自動生效
      2. 修改 /root/firewall.sh ,在該檔案加入清除 nat 表格的規則與自訂鏈的設定
      3. 增加規則:讓來自內部網路的封包,在路由判斷後,並預計由 ens3 對外網卡出去的封包,全部偽裝成為 ens3 的 IP 位址 (一般在數據機上面的就是 public IP)
      4. 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
      5. 上述功能在開機後依舊能夠順利啟動
    5. 內部私有 VLAN 的設定
      1. 先取消 team0 的網路參數設定 (取消 IP 等參數的設定值,保留 team0 網卡,一定要記得 ipv4 跟 ipv6 的 method 通通要關成 disable 與 link-local 才行!)
      2. 指定一個名為 vlanXX 的 VLAN 環境,其中 XX 為 VLAN ID,該 ID 為你的 IP 尾數,且該 VLAN 使用 team0 作為實體網卡, 且使用 vlan 的網卡名稱同樣取名為 vlanXX。
      3. 使用 MTU 設定為 1400
      4. vlanXX 的網路參數使用原本設定於 team0 上面的網路參數。
    6. DHCP 伺服器的設定
      1. 以 vlanXX 的網路環境為準,定義出一個內部的 DHCP 管理的區域網路,該網路的特色為:
        • 預計發派的網路參數為 172.19.*.0/24 這一段
        • 其中 172.19.*.101 ~ 172.19.*.200 作為動態分配給其他用戶端
        • 你的 client 主機,則是透過網卡卡號,給予固定的 172.19.*.1 的 IP 位址參數
        • 其他參數請參考數周以來的網路環境 (包括主機名稱、gateway、DNS等等)
        • 請記得務必放行 dhcp 的使用權 (防火牆的規範)
    7. 內部私有路由
      1. 讓你的 server 會多一個路由,當發現到 172.19.250.0/24 的封包目標時,將它經由 server 的 ens3 網卡導向到 172.18.255.250 這部伺服器。
      2. 當你在你的 Server 上面執行 ping 172.19.250.1 的時候,應該是會發現有回應封包才對。
      3. 這個設定在下次開機也是會生效的。
  2. (20%)實作題:啟動 client 作業硬碟
    1. 網路參數的設定,請依據底下的方式來設定好:
      1. 建立 ens3 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.19.*.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      2. 主機名稱指定為: client.lan*.example.dic
      3. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 實際設定好本機防火牆
      1. 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
      2. 請將預設的領域 (zone) 改為 work 領域,且 ens3 為其管理之界面網卡
      3. 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
      4. 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
      5. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
    3. 內部私有 VLAN 的設定
      1. 先取消 ens3 的網路設定 (取消 IP 等參數的設定值)
      2. 指定一個名為 vlanXX 的 VLAN 環境,其中 XX 為 VLAN ID,該 ID 為你的 IP 尾數,且該 VLAN 使用 ens3 作為實體網卡, 且使用 vlan 的網卡名稱同樣取名為 vlanXX。
      3. 使用 MTU 設定為 1400
      4. vlanXX 的網路參數請使用 dhcp 自動取得的方式來處理!且自動取得的 IP 必須要跟原本手動設定的網路參數相同才行。
  3. (12%)簡易問答題:(每題 2 分) 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 簡單的說明 VLAN 在 switch 上面設定的目的是什麼 (尤其對大數量 port number 的 switch 來說)?
    2. 簡單的說明 VLAN 用在內部網路 (LAN) 的功能是什麼?
    3. 其實預設的環境就是一個 VLAN,這個 VLAN 的 ID 是幾號?
    4. DHCP 伺服器啟用的 port number 是幾號?用的封包格式是?DHCP 用戶端啟用的 port number 是幾號?用的封包格式又是?
    5. 在 RockyLinux 9 的系統下,DHCP 伺服器的設定檔完整路徑為?DHCP 租約檔的完整路徑為?
    6. DHCP 可以提供兩種 IP 取得的方法,其設定值分別是什麼?
  4. 上傳成績
    1. 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
    2. 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
    3. 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
    4. 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
    5. Please use links http://172.18.255.250/upload/unit05 to check your filename

  • 2022/10/06:修改成為 RockyLinux 9 的版本,調整一些文字與細部說明