Linux伺服器 Linux伺服器

網站伺服器建置與管理上課補充教材

網站伺服器建置與管理 > 課程內容 > 第 2 堂課 - SELinux 初探與網路基礎

第 2 堂課 - SELinux 初探與網路基礎

上次更新日期 2017/09/21
網路從 OSI 七層協定到 TCP/IP 的架構,然後在其架構上以 WWW 火熱起來,目前的物連網基本上也是得要透過 TCP/IP 才行! 所以,不懂網路基礎,怎麼理解網路伺服器呢?這節課我們就來談談網路基礎吧!
  • 2.1: SELinux 初探
  • 2.2: OSI 七層協定與 TCP/IP
  • 2.3: 乙太網路的 CSMA/CD 協定
  • 2.4: IP 封包與 IP 位址
  • 2.5: Linux 網路設定
  • 2.6: 課後練習

2.1: SELinux 初探

SELinux 全名為 Secure Enhanced Linux,安全強化的 Linux 模組!重點是在細部的權限設定,而不是防火牆的功能。

  • 一般 rwx 權限管理的是『用戶的身份權限』,這個用戶操作某個 process 後,看的是用戶的權限而不是 process 服務的權限。
  • SELinux 在上述的條件前,再加一個針對『網路 process 的權限控制』項目,也就是 SELinux 是針對『某個權限』來控制, 與操作者行為不太一樣!

也就是說,在實際進入到 Linux 傳統的權限管理 (rwx) 之前,會有一個管理 process 的預判功能!當 process 的操作超出 SELinux 所能管理的權限, 那就直接進行 drop 的動作,而不會理會權限的偵測 (看本節課的第一張圖)。SELinux 的管理主體是網路服務那個『程序』,而不是『啟動該程序的身份』喔! 至於整個程序與相關的SELinux模式可由下圖來理解:

  • 第一關:SELinux 的三種模式與每種模式的功能

除了 Enforce (強制模式) 會可能有抵擋之外,其他兩種模式會放行。但是 Disable 是直接放行,不考慮後續的程序,而 Permissive 則是後續的程序一併運作, 但若有錯誤產生時,會將錯誤的情況記錄下來 (log) ,但還是放行該操作的意思。

  • Disable:完整關閉不使用 SELinux,核心不會啟用 SELinux
  • Enforcing:完整啟動 SELinux 的功能,會分析、管制網路程序能夠存取的目錄與檔案
  • Permissive:寬容模式,事實上有啟動 SELinux 的功能,但是僅進行分析與紀錄,並不會實際抵擋網路程序的運作。
例題 2.1.A:你的 SELinux 似乎不是在 Enforcing 的階段,如何檢查並且修改,同時未來每次都生效呢?可以這樣處理:
  1. 使用 getenforce 觀察目前你的系統使用哪種 SELinux 的模式?
  2. 使用 setenforce [0|1] 搭配 getenforce 來觀察 SELinux 的模式變化!
  3. 觀察 /etc/selinux/config 這個檔案的內容,看如何設定預設的 SELinux 模式。
  4. 觀察 /boot/grub2/grub.cfg 裡面的設定,若有 selinux=0 亦代表預設關閉 SELinux 的模式,而成為 disable 喔!
  5. 未來系統一定要預設就是 Enforcing 狀態

讀者須注意,最好不要使用 Disable 模式來與其他兩種模式交互切換,因為切換成 disable 後,系統內的每個檔案的 inode 內容會被修改,可能造成無法預知的問題!

  • 第二關:每種網路程序要能提供某些服務時,需要透過一些規則與政策

如前圖示所述,當你使用了 Enforcing 或者是 Permissive 之後,你的被管制的 process 想要處理某些操作的動作時,就會被迫接受某些規範。 舉例來說,網頁程序 httpd 這個資料,就是不能讀取 /var/www/html 以外其他目錄 (當然有例外,這裡只是舉個例子),因為預設的『政策規則』就是不允許! 除非你將該規則改變才行!這就是第二關卡,規則與政策。(semanage 可能預設不安裝,請找到相關的軟體後安裝!)

  • 可以使用『 sestatus 』觀察目前的 SELinux 狀態
  • 可以使用『 getsebool -a 』查詢現階段 SELinux 所支援的各項規則與放行否
  • 可以使用『 semanage boolean --list 』查詢每個 SELinux 規則的簡易說明
  • 可以使用『 setsebool -P rule=[0|1] 』修改設定檔並直接啟用某個規則
例題 2.1.B:直接嘗試修改 SELinux 的規則
  1. 透過 semanage boolean --list 找出所有跟 FTP 有關的規則有哪些?
  2. 讓 FTP 可以完整的存取 (full access) 系統資訊
  3. 再次將設定檔改回原本的規則模樣
  • 第三關:每個程序要讀取檔案,程序的安全本文與檔案的安全本文要能夠搭配

就有點像 student 帳號只能讀屬於 student 的檔案一樣,SELinux 會根據每種 process 的安全本文,搭配到檔案的安全本文, 兩者相符合才能夠讀取這樣。也就是說, process 會有一個安全本文,檔案本身也會有個安全本文的意思。至於相關的查詢對照方式: (注意,安全本文是在第三個欄位上面喔!)

  1. 可以透過『 ps -Z 』觀察到每一種程序使用的安全本文為何
  2. 可以透過『 ls -Z 』觀察每一個檔案的安全本文為何
  3. 可以透過『 semanage fcontext --list 』觀察每個檔案的預設安全本文為何
  4. 可以透過『 chcon -t type 檔名 』修改檔案的安全本文
  5. 可以透過『 restorecon -Rv 目錄 』修改目錄下的檔案恢復原本的安全本文
  6. 可以透過觀察『 /var/log/messages 』的內容了解如何修改 SELinux 的錯誤
例題 2.1.C:為了要讓 /var/log/messages 裡面有 SELinux 的錯誤訊息,我們必須要安裝 setroubleshoot 的服務才行! 在最小安裝中,這個服務預設並沒有被安裝喔!所以,我們現在得要安裝這東西才行。
  1. 先搜尋系統有沒有任何安裝以 setrouble 為名的軟體?
  2. 用 yum 搜尋 yum server 有沒有提供 setrouble 為名的軟體?
  3. 請安裝上述的軟體
  4. 安裝完畢之後,可能需要重新啟動一次 Linux 才會比較完整的生效。

接下來讓我們測試一下 setroubleshoot 的功能。

例題 2.1.D:管理 FTP 伺服器的一般帳號登入權限
  1. 讓你的系統安裝 vsftpd 這個 FTP 伺服器軟體,並且啟動這個伺服器軟體
  2. 查詢一下 vsftpd 這個 process 的安全本文名稱為何?
  3. 查詢一下 vsftpd 所屬的檔案名稱,並查詢可能的匿名登入目錄所在的 SELinux 安全本文為何?
  4. 請安裝 links 軟體,然後使用 links ftp://localhost 看看是否能夠查詢到 pub 等目錄?
  5. 在 /root 底下建立一個檔案,內容填寫你的學號與姓名,然後將檔案移動到 /var/ftp/pub 底下, 再以匿名登入瀏覽,能否看到這個檔案?能否讀取這個檔案?為什麼?
  6. 如何改善上面的情況?
  • 全系統的 SELinux 更新方式

如果你不知道做了什麼事情,導致 SELinux 的安全本文錯亂時,只好透過全系統更新的方法來處理了。此外,若在沒有 SELinux 的環境下更動到檔案的 inode 內容,則原本紀錄在 inode 內的 SELinux 將會被清空。 例如在基礎訓練篇裡面的關於 root 救援進入 rescue 的模式中,就是一個最基本的案例。此時你可以這樣做:

  • 在離開救援模式前,使用 touch /.autorelable ,則下次重新開機後,系統會重新根據預設定義重建 SELinux 對每個檔案的安全本文!重新定義完畢會再次的重新開機就正常了
  • 離開救援模式之前,將 /etc/selinux/config 修改成為 permissive 的模式,正常進入系統後, 使用 root 下達 restorecon -Rv / 來處理全系統的 SELinux 復原,之後修改 /etc/selinux/config 成為 Enforcing 再重開機。 或直接 setenforce 1 而不用重新開機也行。

2.2: OSI 七層協定與 TCP/IP

網路最早的參考模型是 OSI 七層協定,後來才開發出 TCP/IP 的四層協定。不過目前世界上還是多以 OSI 七層協定來定義網際網路的分層概念。

  • 認識 OSI 七層協定與 TCP/IP 的四層協定相關性:
  1. 無論哪種協定都是在規範網路主程式的撰寫行為
  2. 分層負責的好處是可以讓程式碼比較方便抽換 (堆疊的優點)
  3. 程式碼主要是由作業系統所提供,因此有提供 TCP/IP 的作業系統稱為網路作業系統
  4. OSI 七層協定從底層到上層分別是:實體層、資料鏈結層、網路層、傳輸層、會談層、表現層與應用層
    OSI, TCP/IP
  5. 因為 OSI 七層協定規範的太嚴謹,後來美國軍方與柏克萊大學合作,開發了一個當時給學術單位使用的網路程式, 後來被稱為 TCP/IP 協定,這也是大家都知道的『 Internet, 網際網路 』的學名!
  6. TCP/IP 四層分別為『資料連結層、網路層、傳輸層與應用層』
    OSI, TCP/IP

一般來說,偏向硬體的層級,我們稱為訊框 (frame),大多就是在第一、二層,而以軟體打包的資料,我們稱為封包 (packet),一般就是第三層以上的各層封包! 接下來就來談談每種封包上面的表頭資料吧。

  • 基礎網路通常指的是 OSI 七層協定的 layer2, layer3, layer4 這三層!
  1. Layer2 主要的訊框 (frame) 名稱為何?同時,在這個訊框表頭 (header) 有那兩個重要的位址?
  2. Layer2 的這個重要的位址,每個位址的資料各佔用多少個位元組 (bytes)?
  3. Layer3 的主要封包 (packet) 名稱為何?在這個封包表頭有那兩個重要的位址?
  4. Layer3 的這個重要的位址,每個位址各佔用多少個位元 (bits)
  5. Layer4 的主要封包名稱有那兩個?那一個具有『三向交握』的功能?那一個是非連接導向的封包?
  6. Layer4 的封包表頭有個重要的數值號碼,那個號碼的名稱為何?一般這個號碼具有 0~65535 個!
例題 2.2.A:繪圖說明何謂三向交握?並且說明哪個流程需要回應 (ACK) 及發送新旗標 (SYN) ?

TCP 封包與 UDP 封包是有差異的,一般穩定連線都是採用 TCP,而非連接則使用 UDP。但是 UDP 速度較快, google chrome 漸進的採用 UDP 封包來傳送 youtube, 在某些阻擋 UDP 封包的防火牆範圍內, chrome 的速度好像會慢一點,原因就是這個問題。請將 chrome 的這個 QUIC 功能關閉看看 (chrome://flags/)。

例題 2.2.B:實際監測各層 layer 的表頭資料
  1. 如何在 windows 上面使用指令查出 MAC 位址號碼?
  2. 如何在 Linux 上面使用指令查出 MAC 位址號碼?
  3. 如何在 Linux 上面查出 IP 位址?(這題很重要!因為指令太多了!)
  4. 那一個封包是『可靠的連線』封包格式?
  5. 底下這些在『應用層』裡面的協定,其使用的 port number 一般為何? DNS, HTTP, SSH, SMTP, FTP, HTTPS, POP3, SMB

網路是雙向的,封包會由 Client--> Server 也會由 Server --> Client,因此兩邊均需要告知對方自己的 IP 與所使用的埠口!這就是所謂的網路 socket:

  • IP1:port1 <--> IP2:Port2 稱為網路的 socket!
  • 區域網路的連線

你應該經常聽到廣域網路 (WAN) 與區域網路 (LAN) 這兩個名詞~其中 LAN 更是經常聽到!區域網路簡單的說,就是『住在同一條巷子的人們』, 同一條巷子內的所有住戶就是區域網路!

  1. 在目前的乙太網路架構上,只要所有的機器透過一部 hub/switch 連接在一塊,如果能夠使用同一區段的 IP 位址,就能夠稱為區域網路
  2. 同一段區域網路的情況下,網路資料的傳遞主要是透過『網卡對網卡』來直接傳遞
  3. 由於網卡對網卡傳遞,因此每部主機就得要知道互相傳遞資料的網卡位址 (這就是 MAC address 的重要性!)
  4. 現階段區域網路的制定主要還是依據 IP address 的項目,因此機器對機器之間的傳遞,還是透過所謂的 IP 位址來達成的。
  5. 電腦的傳遞透過網路卡的廣播 (卡號),網際網路資料的傳遞主要透過 IP 位址的傳遞!這兩者間會有相關性! 由 IP 去找出 MAC 的流程就是 ARP (address resolution protocol) 的功能!
例題 2.2.C:使用 arp 來找出 MAC 與 IP 的對應
  1. 先使用網路環境測試你的網路卡是否驅動了;
  2. 使用 ping 這個指令來 ping 老師寫在白板上面的 IP
  3. 使用 arp -n 這個指令,查詢該 IP 所在的區域網路 MAC address 為那一個
  4. 你能不能 ping google 之後,找到 google 伺服器的 MAC 呢?為何?

七層協定與 TCP/IP 就是個網路模型參考,基本上就是一個網路層級的程式撰寫指引。因此,只要你符合該指引的參考去撰寫可以相容的軟體, 就可以讓你的 OS 加入 Internet 了!

2.3: 乙太網路的 CSMA/CD 協定

目前網際網路使用最廣的類型就是乙太網路~所以讓我們來了解一下什麼是乙太網路。

  1. 全名為: Carrier Sense and Multiple Access with Collision Detection,至於運作模式的情況是:
    1. CS(監聽):
      要發送訊息的機器會先監聽一次共用媒體 (Carrier Sense)
    2. MA(多點傳送):
      若無人使用,就會發送訊息 (發送量通常就是 MAC 訊框的大小)!這個訊息在共用媒體上面會以廣播的方式傳遞, 所有在區域網路的機器均會接收到這個訊息,但若 destination MAC address 不是自己,就會將該訊息丟棄, 若是自己則收下來解析。
    3. CD(碰撞偵測):
      同時若有兩個機器同時送出訊息,此時將導致封包碰撞,兩個封包均會損毀。兩部機器在各自的隨機時間內, 再次的進行監聽與傳送的功能,此及碰撞偵測。
  2. 媒體共享不共享很重要:
    • Hub 就是共用媒體,以 gigabit 的網路速度來說,連接在 Hub 上的所有的機器會共用 1Gbit 的總傳輸量
    • swtich 內建一個記憶體紀錄了 switch port 與 MAC address 的對應,因此當封包傳送時, switch 會透過這個記憶體將這些資訊傳送到正確的 destination MAC address,因此就不會使用廣播的功能, 此時即可避免碰撞的發生。此外, switch 的埠口均有各自獨立的 1Gbit 頻寬
例題 2.3.A:嘗試思考底下的問題:
  1. 使用星形連線圖示說明 hub 與 switch 在 CSMA/CD 的狀況下,他是如何進行資料傳遞的?
  2. 回家後,嘗試注意自己家裡的 switch/hub,當有任何封包傳輸行為時,是兩兩對傳?還是全部燈會都會閃動?藉以了解 switch/hub 的相關功能。
  3. 如何在 CSMA/CD 的相關環境中,透過『不登入他人電腦,即可取得該電腦的所有網路封包』? 該有哪幾個重要的項目需要思考 (僅透過 CSMA/CD 的相關原則,並沒有使用任何的攻擊軟體的環境下!)
  4. 有沒有可能在連接到無密碼的 AP wifi 時,會讓你的資料被竊取?為什麼?
  • 乙太網路 CAT 網路線等級
  1. CAT 5:標準速度 100Mbit/s,無法到達 1Gbit/s 的速度。
  2. CAT 5e:過渡時期標準,可達到 1Gbit/s 的速度。
  3. CAT 6:標準的 1Gbit/s 的速度
  4. CAT 6e:過渡時期標準,可達到 10Gbits/s 的速度
  5. CAT 6a:標準的 10Gbit/s 的速度
  6. 早期有所謂的跳線與平行線,自從推出 1Gbit/s 以上速度的網卡與媒體設備後,目前是否為跳線都可以透過網卡或網路媒體的『 auto MDI/MDIX 』等相關技術來判斷,因此無須判斷平行線或跳線了,都可以通!只要水晶頭都是符合 568A 或 568B 的配置即可!
例題 2.3.B:找一找,你手邊的網路線,看看是什麼等級的網路線呢?

2.4: IP 封包與 IP 位址

目前的 IP 封包有兩種版本,分別是 IPv4 及 IPv6,兩者最大的差異就是在於 IP address 的位元數的差別了!

  • IPv4 的 IP 等級範圍
  1. IP 協定版本分兩種,分別為 IPv4 與 IPv6,這兩個版本在表頭的 IP address 部份差異很大,IPv4 佔用 32bit 作為位址, IPv6 佔用 128bit 作為位址,兩者差了 2^96 倍數。
  2. 目前台灣地區主流還是 IPv4,不過未來等到 IPv6 的基礎網路佈建完成後,應該會以 IPv6 為基準了!因為物連網 (Internet Of Things, IOT) 的關係。
  3. IPv4 的 IP 位址格式為 32 個 0 或 32 個 1,亦即是:
    二進位最小:00000000000000000000000000000000
    二進位最大:11111111111111111111111111111111

    不過人類對於數字尤其是 2 進位相當不在行,所以就將 2 進位分 4 組,並轉成 10 進位,所以:
    二轉十進位最小:00000000.00000000.00000000.00000000 --> 0.0.0.0
    二轉十進位最大:11111111.11111111.11111111.11111111 --> 255.255.255.255

  4. 為了方便整組 IP 範圍的給予,因此 IP 是有『等級』之分的!主要有底下三種等級:
    • Class A: 2 進位開頭為 0 的那個位址,轉成 10 進位後,第一組號碼範圍在 0~127 之內的,都是 A 等級
    • Class B: 2 進位開頭為 10 的那個位址,轉成 10 進位後,第一組號碼在 128~191 之間的,都是 B 等級
    • Class C: 2 進位開頭為 110 的那個位址,轉成 10 進位後,第一組號碼在 192~223 之間的,都是 C 等級
  5. 等級 A 的 IP 位址所定義的區域網路中,若以 127 為例,則該 Class A 的區域網路所涵蓋的 IP 位址範圍在 127.0.0.0 ~ 127.255.255.255 之間, 亦即 127 為網域識別 (Network ID) 而後面三組位址則為主機識別 (host ID)。簡單的說,就像一般門牌號碼,分為同巷子內都相同的巷子號碼, 以及每戶均不同的家戶號碼。
  6. 同一個區域網路中,每一個 IP 位址均可以透過簡單的廣播功能來進行網路資料的傳輸,而不需要透過路由器或閘道器
  7. 正常預設 IPv4 的定義下,各 Class 的區域網路範圍是:
    • Class A: 1.0.0.0/8, 1.0.0.0/255.0.0.0, 1.0.0.0~1.255.255.255
    • Class B: 172.0.0.0/16, 172.0.0.0/255.255.0.0, 172.0.0.0~172.0.255.255
    • Class C: 192.0.0.0/24, 192.0.0.0/255.255.255.0, 192.0.0.0~192.0.0.255
  8. 以 172.16.0.0 這一個 IP 來說明一段區域網路的話,那麼區域網路的參數就會有:
    • netmask (子網域遮罩):255.255.0.0 或 /16:功能是在定義出區域網路的『巷子』號碼所在處,也是 32 位元,只是作為網域 ID 的位置全部為 1 , 而作為主機 ID 的位置則全部為 0 ,因此 Class B 的預設 netmask 就會是 11111111.11111111.00000000.00000000
    • network IP(網域 IP 位址,亦即是第一個 IP 位址的意思):172.16.0.0:網域 ID 是不可變的,而主機 ID 可以全部是 0 (最小),此時就是網域 IP 位址! 這個位址搭配 netmask 則是一整個網域的代表數字
    • broadcast IP (廣播 IP 位址,亦即是最後一個 IP 位址的意思):172.16.255.255:網域 ID 是不可變的,而主機 ID 可以全部是 1 (最大),此時就是廣播 IP。 network IP 與 broadcast IP 是有特殊用途的,因此不能作為一般裝置設定 IP 之用
    • 可用 IP 位址範圍:172.16.0.1 ~ 172.16.255.254 :就是去掉 network IP 與 broadcast IP 之後的其他 IP 位址。
例題 2.4.A:嘗試回答下列問題:
  1. 有個 IP 為 119.231.23.52,請問這個 IP 是 Class A, B, C 的那一個?
  2. 承上,那麼該 IP 所在的網段理論上,其 Netmask IP, Network IP, Broadcast IP, 可用 IP 範圍,個別是多少?
  3. 承上,有沒有可能存在類似 119.231.23.0 這樣的『可用 IP』呢?
  • IP 的種類:主要分為兩種
  1. public IP (公共 IP 或公開 IP 位址):
    這種 IP 必須要從 ISP 申請而來,以學校來說,就是要跟計算機中心申請;以住家來說,就是需要向類似中華電信申請 (要花錢)。 這種 IP 可以直接上網,也可以架設網站,全世界都可以直接跟這個 IP 連線與溝通。
  2. private IP (私有 IP 或保留 IP 位址):
    當初設計 IPv4 時,預設保留給內部網路設定用的 IP 區段。這種 IP 位址不能直接上網, 需要透過 IP 分享器 (透過 NAT 技術) 後才能夠上網。當區域網路還不需要連上 Internet 時,可以使用這種 IP 位址來設定裝置, 未來有 Internet 的需求,只需要加上 IP 分享器即可。這種 IP 位址所架設的網站,也需要透過 IP 分享器的轉遞 (port mapping) 後, 才有可能讓 Internet 瀏覽到。
  3. 根據 Class 的分類,private IP 位址也分三個 class 提供給用戶或企業來設定規劃自己的區域網路:
    • Class A:10.0.0.0/8,一組 Class A
    • Class B:172.16.0.0/16, 172.17.0.0/16..., 172.31.0.0/16,共 16 組 Class B
    • Class C:192.168.0.0/24, 192.168.1.0/24..., 192.168.255.0/24,共 256 組 Class C
例題 2.4.B:下列哪幾個是屬於 private IP,這種 IP 需要透過 IP 分享或偽裝才能夠連上 Internet
  1. 172.15.1.1/16
  2. 192.28.1.1/24
  3. 10.100.1.1/8
  4. 172.20.1.1/16
  5. 192.168.5.1/24
  6. 61.5.5.1/8
  • 無等級 IP 位址 (Classless Interdomain Routing)
  1. 除了上述的預設的等級外,區域網路管理員也能夠指定非正規的區域網路。非正規的區域網路就被稱為無等級 IP 位址 (CIDR)
  2. 若以『 台南市 . 永康區 . 崑大路 . 195 號 』為例,我們可以說:
    • 崑大路的管理者,他的網域 IP 位址可以到『台南市 . 永康區 . 崑大路』,因此不論幾號都是屬於他的管轄範圍
    • 永康區的區長,他的網域 IP 位址可以到『台南市 . 永康區』,因此不論永康區的什麼路,都是他的管轄範圍
    • 台南市的市長,他的網域 IP 位址可以到『台南市』,因此不論什麼區的什麼路,都是他的管轄範圍
  3. 定義出崑大路長、永康區長、台南市長的參數,就是『netmask (子網路遮罩)』。
  4. 計算 192.168.5.30/24 的相關參數有:
    • netmask: 255.255.255.0
    • Network IP: 192.168.5.0
    • Broadcast IP: 192.168.5.255
    • 可用 IP: 192.168.5.1 ~ 192.168.5.254 (共 254 個)
  5. 計算 192.168.5.100/26 的相關參數有:
    • Netmask:首先,由 /26 推算出: 11111111.11111111.11111111.11000000,因此得到 255.255.255.192 這個參數
    • Network IP:由 192.168.5.100 中,前面 192.168.5 已經固定 (前面 24 個位址),而 100 推算 2 進位成為 01100100, 因為 2 個 bit 被設定為網域 ID 是不可動的,因此這個位址的範圍『 01 000000 』到『 01 111111 』之間, 所以得到第一個位址為 01000000 (二進位) --> 64 (十進位),所以 Network IP 就成為 192.168.5.64
    • Broadcast IP:承上,最後一個 IP 位址為 01111111 (二進位) --> 127 (十進位),所以 Broadcast IP 就成為: 192.168.5.127
    • 可用的 IP 位址範圍在: 192.168.5.65 ~ 192.168.5.126
例題 2.4.C:再請嘗試計算出 192.168.10.200/27 的 Netmask IP, Network IP, Broadcast IP, 可用 IP 範圍分別是什麼?
  • 離開區域網路的重要關鍵: Gateway, Router...
  1. 在區域網路內可以透過網路卡直接廣播,當然, IP 位址也需要是在同一個區域網路內
  2. 如果要前往的目標 IP 位址並不在區域網路內呢?則此時需要將 IP 封包送給一個專門轉送資料的地方,那就是區網內的通訊閘 (Gateway) 或稱為路由器 (Router)。
  3. 想像泡麵廣告,在區域網路內可以透過廣播呼叫小妹妹回家吃泡麵。但小妹妹如果不在巷子內呢?此時就得要將泡麵送到小 7 , 透過宅即便的功能轉送出巷子外!
  4. 但是你還是得要走到小 7 才行,所以這個小 7 必須要跟你在同一個區域網路內!
  5. 一般建議 Gateway 設定為最後一個可用 IP,例如 192.168.5.0/24 當中,建議 gateway 應設定為 192.168.5.254 較好。
  • 不要使用 IP 填寫在網址列了,透過 DNS 解析
  1. 現在已經沒有人在瀏覽器的網址列 (URL) 填寫 IP 了,都是透過主機名稱來處理的。
  2. 因為 Internet 就是 TCP/IP,因此上網一定要用 IP 才行 (不論是 IPv4 還是 IPv6)。
  3. 所以就需要透過 DNS 系統,讓瀏覽器直接去 DNS 系統詢問某主機名稱的 IP 後,瀏覽器再自行連上該伺服器!
  • 基本上,連上 Internet 所需要的幾個網路參數:
  1. IP/Netmask:這兩個參數設定後,系統會自動的算出 Network IP 及 broadcast IP;
  2. Gateway:當然重要!能不能離開區域網路的重要項目!
  3. DNS server IP:使用主機名稱連上 Internet 的重要設定項目!
  • IP 的取得方式有很多方法,台灣地區常見的方法為:
  1. 自動取得:學名為 dhcp 這個協定,通常使用 auto 取代此方法。網路參數統一放置於 DHCP server 上面,用戶端電腦開機時會去詢問 DHCP 伺服器, 藉以得到正確的網路參數的方式,常見於宿舍網路環境與辦公環境下。
  2. 手動設定:手動處理 (manual) 的方式,自己向 ISP 取得相關的網路參數,直接手動設定好網路參數之意。 常見於伺服器本身的環境設定中。
  3. 撥接:台灣地區包括 ADSL 以及中華電信光世代,對外都是走電話線,或者是 CAT5 (通常最多到 CAT 5e) 的網路線,只是都附掛在電話上, 需要透過數據機撥接的情況,這種情況的 IP 網路參數也是由 ISP 機房主動分配的,使用者無法手動設定。
  4. 第四台纜線 (Cable):透過電視纜線,第四台提供的線路來連網,同樣需要透過數據機,而 IP 的取得與 DHCP 雷同。

2.5: Linux 網路設定

預設使用一張網卡來設定一個 IP,方式很簡單,有指令方法也有直接設定的方法。就讓我們來實際設定網路參數吧!

  • 暫時的設定 (不改變設定檔,重新開機還是恢復原本參數的指令設定行為,通常用在測試環境中)
  1. 取得目前有多少網路卡以及網路卡的名稱:
    ifconfig -a
    ip link show
    
    請注意, lo 是內部網域 (local),vir 或 br 開頭的應該是虛擬化設備 (假的!不理他!),其他的才是目前實體網卡
  2. 改變 IP/netmask:
    ifconfig [NIC name] IP netmask NETMASK
    ifconfig eth0 192.168.5.* netmask 255.255.255.0
    
    上述的 * 請用自己的學號尾數去帶,不可以有重複的 IP 設定!
  3. 改變 gateway 的方法
    route add default gw GWIP
    route add default gw 192.168.5.254
    
  4. 改變 DNS server IP 的方法
    vim /etc/resolv.conf
    nameserver 168.95.1.1
  5. 查詢設定是否正確的流程:
    ifconfig eth0  
    	(查看 IP 與 netmask 是否正常,若不正常,則回 ifconfig [NIC name]... 重新設定)
    route -n 
    	(查看 0.0.0.0 開頭的那行,是否有正確的 gateway,若不對,回 route add default 修改)
    ping 192.168.5.254 
    	(看是否有回應封包,若沒有,應該是 IP 分享器的問題,詢問 ISP 管理員)
    ping 168.95.1.1 
    	(連線到中華電信提供的公開 DNS server,若有問題也只能問 ISP)
    dig www.google.com 
    	(查看有沒有找到正確的 google IP?若沒有,請回去查看 nameserver 的設定)
    
    上面幾個步驟請依序處理,因為是有相依性的喔!
  • 永久的設定 (直接用指令修改設定檔了!) - 針對外部區網

事實上,所有的設定檔都在 /etc/sysconfig/network-scripts/ifcfg-XXX 當中!你也可以自己瞧一瞧該檔案的內容。 不過, CentOS 7 之後,如果不是 Server 的型態,大概都被強迫使用 NetworkManager 這個服務!因此需要使用 nmcli 這個指令。 但是,你依舊可以在使用 nmcli 之後,關閉 NetworkManager 服務,單純使用舊版 network 腳本來啟動,這樣也沒問題!

  1. 查看目前的網路連線界面有哪些
    nmcli connection show
    
    通常會得到連線名稱『NAME』以及網卡裝置名稱『DEVICE』,這兩個名稱通常也相同!
  2. 查看目前網卡所在網路的設定值:
    # nmcli connection show eth0
    
    connection.id:                          eth0
    connection.uuid:                        ff0b88ed-7cc6-4803-be7d-e77c74fea95b
    connection.interface-name:              eth0
    connection.type:                        802-3-ethernet
    connection.autoconnect:                 yes
    connection.autoconnect-priority:        0
    connection.timestamp:                   1475170677
    connection.read-only:                   no
    connection.permissions:
    connection.zone:                        --
    connection.master:                      --
    connection.slave-type:                  --
    connection.autoconnect-slaves:          -1 (default)
    connection.secondaries:
    connection.gateway-ping-timeout:        0
    connection.metered:                     不明
    802-3-ethernet.port:                    --
    802-3-ethernet.speed:                   0
    802-3-ethernet.duplex:                  --
    802-3-ethernet.auto-negotiate:          yes
    802-3-ethernet.mac-address:             --
    802-3-ethernet.cloned-mac-address:      --
    802-3-ethernet.mac-address-blacklist:
    802-3-ethernet.mtu:                     auto
    802-3-ethernet.s390-subchannels:
    802-3-ethernet.s390-nettype:            --
    802-3-ethernet.s390-options:
    802-3-ethernet.wake-on-lan:             1 (default)
    802-3-ethernet.wake-on-lan-password:    --
    ipv4.method:                            manual
    ipv4.dns:                               120.114.100.1,120.114.150.1
    ipv4.dns-search:
    ipv4.addresses:                         192.168.254.100/24, 10.255.100.254/24
    ipv4.gateway:                           192.168.254.254
    ipv4.routes:
    ipv4.route-metric:                      -1
    ipv4.ignore-auto-routes:                no
    ipv4.ignore-auto-dns:                   no
    ipv4.dhcp-client-id:                    --
    ipv4.dhcp-send-hostname:                yes
    ipv4.dhcp-hostname:                     --
    ipv4.never-default:                     no
    ipv4.may-fail:                          yes
    ipv6.method:                            auto
    ipv6.dns:
    ipv6.dns-search:
    ipv6.addresses:
    ipv6.gateway:                           --
    ipv6.routes:
    ipv6.route-metric:                      -1
    ipv6.ignore-auto-routes:                no
    ipv6.ignore-auto-dns:                   no
    ipv6.never-default:                     no
    ipv6.may-fail:                          yes
    ipv6.ip6-privacy:                       -1(不明)
    ipv6.dhcp-send-hostname:                yes
    ipv6.dhcp-hostname:                     --
    GENERAL.NAME:                           eth0
    GENERAL.UUID:                           ff0b88ed-7cc6-4803-be7d-e77c74fea95b
    GENERAL.DEVICES:                        eth0
    GENERAL.STATE:                          已啟用
    GENERAL.DEFAULT:                        是
    GENERAL.DEFAULT6:                       否
    GENERAL.VPN:                            否
    GENERAL.ZONE:                           --
    GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
    GENERAL.SPEC-OBJECT:                    /
    GENERAL.MASTER-PATH:                    --
    IP4.ADDRESS[1]:                         192.168.254.100/24
    IP4.ADDRESS[2]:                         10.255.100.254/24
    IP4.GATEWAY:                            192.168.254.254
    IP4.DNS[1]:                             120.114.100.1
    IP4.DNS[2]:                             120.114.150.1
    IP6.ADDRESS[1]:                         fe80::5054:ff:fe5f:2182/64
    IP6.GATEWAY:
    
    你需要知道的是上面幾個粗體字的項目!小寫字元的是屬於設定檔的部份,大寫字元的是屬於目前正在運作中的實際網路參數狀況~這兩者需要搭配才行。 設定方面的參數主要有:
    • connection.autoconnect [yes|no]:是否需要啟動這個網路界面
    • ipv4.method [auto|manual]:取得的方式為自動或手動
    • ipv4.addresses [IP/Netmask]:直接設定 IP 位址與子網路遮罩
    • ipv4.gateway [GWIP]:設定 Gateway 的 IP 位址
    • ipv4.dns [DNSIP]:設定 DNS server 的 IP 位址
  3. 請依據底下的設定來設定好你的網路參數:
    nmcli connection modify eth0 ....
    
    • IP/Netmask: 192.168.254.*/24
    • GW IP: 192.168.254.254
    • DNS 1: 120.114.100.1
    • DNS 2: 120.114.150.1
    務必記得當完成上述的設定後 (modify),一定要使用底下的方式來啟動設定值:
    nmcli connection up eth0
  4. 事實上,這些設定值都紀錄在底下這個檔案中!
    /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME=eth0
    UUID=ff0b88ed-7cc6-4803-be7d-e77c74fea95b
    DEVICE=eth0
    ONBOOT=yes
    DNS1=120.114.100.1
    DNS2=120.114.150.1
    IPADDR=192.168.254.100
    PREFIX=24
    IPADDR1=10.255.100.254
    PREFIX1=24
    GATEWAY=192.168.254.254
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    
    你當然也能手動編輯這個檔案的內容,不過如果手動編輯過後,得要重新裝置 nmcli 才行!
    nmcli connection reload
  • 永久的設定 - 針對你的內部網域 (LAN)

這門課程的重點是希望讀者們能夠管理整個機房的區域網路,因此讀者得要了解到如何設定內部區網才行。雲端機器在 server 的部份提供了 eth1, eth2 這兩個連接到內部網路的網卡,請先使用 eth1 來設計你的區域網路!每個人的區域網路需要獨立才行,不可以重複,否則就會互相干擾。 上面的外部網路是在 192.168.254.0/24 這一段,而內部網路則預計為 10.255.XX.0/24 這一段!

  • 你的 eth1 網路參數請設定 10.255.XX.254/24,而未來用戶端的網路則先設定為 10.255.XX.1/24 !

因此,你有外部網路 (WAN) 的設定,也有內部網路 (LAN) 的存在喔!未來要處理任何工作前,先理解你要處理的室內網還是外網!

  • 主機名稱的設定方式
  1. 一般我們建議每部要連網的主機都要有自己的主機名稱。若沒有網路或者是尚未規範好主機名稱的系統,通常我們會分配一個名為 localhost 的本機主機名稱。 這是因為系統有個 localhost 對應到 127.0.0.1 這個固定 IP 的設定的原因。
  2. 你可以觀察 /etc/hosts 這個檔案的內容,一般來說,這個檔案內容的格式為:
    thereis.your.ip.address  your.host.name         your.host.alias
    127.0.0.1                localhost.localdomain  localhost
    
    所以你可以將你的主機名稱與對應的 IP 寫入到這個檔案中,無須重新啟動任何資料,他會自動設定好對應。
  3. 至於主機名稱的實際設定,可以使用 hostnamectl 來處理即可!請自行使用 man hostnamectl 查詢相關的應用。
例題 2.5.A:依據底下的資料來設定好這個系統 (eth0)
  1. 由於我們的雲系統是虛擬機器 clone 出來的,因此請將目前系統中的所有網路連線通通刪除,然後重建 eth0, eth1, eth2 的連線, 且分別對應到 eth0, eth1, eth2 的網卡上!
  2. eth0 外部網路參數為: 192.168.254.*/24 ,其中 * 為老師規定的 IP 尾數。另外 gateway 為 192.168.254.254,而 DNS 為 120.114.100.1 以及 168.95.1.1
  3. eth1 內部網路參數為: 10.255.*.254/24,不需要 gateway
  4. eth2 預設不要啟動喔!
  5. 主機名稱指定為: pc*.dic.ksu
  6. 最終你的主機名稱與 IP 的對應為:
    pc*.dic.ksu		192.168.254.*		別名為 pc*
    pc254.dic.ksu		192.168.254.254		別名為 pc254
    server.lan*.dic.ksu	10.255.*.254		別名為 server
    client.lan*.dic.ksu	10.255.*.1		別名為 client
    
  • 系統網路 debug 流程 (每個流程都有相依性喔!一步一步處理才行)
  1. 先查看 IP 與 netmask 的設定是否正確:
    ifconfig eth0
    ip addr show
    nmcli connection show eth0 (看最後面大寫字元的部份是否正確)
    
  2. 若不正確,請再使用 nmcli connection modify eth0 ... 的方式重新設定 ipv4.addresses 那個項目,然後 nmcli connection up eth0 重新啟用!
  3. 再查閱 router/gateway 的設定是否正確?:
    route -n 			(看 0.0.0.0 開頭的那一行)
    ip route show 			(看 default 開頭的那一行
    nmcli connection show eth0 	(看大寫字元的部份)
    
    若不正確,也是要使用nmcli connection modify eth0 ... 的方式重新設定 ipv4.gateway 那一個項目!
  4. 檢查你的機器與 gateway 之間的連線是否正常?
    ping GW_IP (停止用 [ctrl]+c )
    
    若沒有正確的回應,可能就是 gateway 設定錯誤,或者是 gateway 本身有問題,或者是網路線有問題等等, 反正理論上就是你的系統與 gateway 之間的過程有問題就是了。這時若不是自己檢查硬體問題,應該就是回報 ISP 了!
  5. 檢查你的 DNS server IP 設定
    dig www.google.com
    
    這個步驟的結果理論上應該會出現
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.google.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46866
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 4, ADDITIONAL: 5
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.google.com.                        IN      A
    
    ;; ANSWER SECTION:
    www.google.com.         188     IN      A       202.169.175.96
    www.google.com.         188     IN      A       202.169.175.102
    www.google.com.         188     IN      A       202.169.175.103
    www.google.com.         188     IN      A       202.169.175.109
    www.google.com.         188     IN      A       202.169.175.110
    www.google.com.         188     IN      A       202.169.175.116
    www.google.com.         188     IN      A       202.169.175.117
    www.google.com.         188     IN      A       202.169.175.123
    www.google.com.         188     IN      A       202.169.175.82
    www.google.com.         188     IN      A       202.169.175.88
    www.google.com.         188     IN      A       202.169.175.89
    www.google.com.         188     IN      A       202.169.175.95
    
    ;; AUTHORITY SECTION:
    google.com.             164038  IN      NS      ns3.google.com.
    google.com.             164038  IN      NS      ns2.google.com.
    google.com.             164038  IN      NS      ns1.google.com.
    google.com.             164038  IN      NS      ns4.google.com.
    
    ;; ADDITIONAL SECTION:
    ns1.google.com.         12624   IN      A       216.239.32.10
    ns2.google.com.         19127   IN      A       216.239.34.10
    ns3.google.com.         19127   IN      A       216.239.36.10
    ns4.google.com.         19127   IN      A       216.239.38.10
    
    ;; Query time: 2 msec
    ;; SERVER: 120.114.100.1#53(120.114.100.1)
    ;; WHEN: 五  9月 30 22:33:19 CST 2016
    ;; MSG SIZE  rcvd: 371
    
    這部份要看的大概是問題 (QUESTION) 的部份,是否主機名稱填寫正確,以及回應 (ANSWER) 是否真的有找到 IP , 最後再看伺服器 (SERVER) 是否是你設定的那一個項目?若不是,得要回去 nmcli 重新克服!
  6. 最後,若不放心,再使用『 ping 168.95.1.1 』確認與中華電信 DNS 伺服器的連線是否 OK!
例題 2.5.B:用另一個用戶端帳號,啟動客戶端電腦,並建立如下的網路參數:
  1. 由於我們的雲系統是虛擬機器 clone 出來的,因此請將目前系統中的所有網路連線通通刪除,然後重建 eth0 界面
  2. eth0 網路參數為: 10.255.*.1/24 ,其中 * 為老師規定的 IP 尾數。另外 gateway 為 10.255.*.254,而 DNS 為 120.114.100.1 以及 168.95.1.1
  3. 主機名稱預設為: client.lan*.dic.ksu
  4. 最終你的主機名稱與 IP 的對應為:
    pc*.dic.ksu		192.168.254.*		別名為 pc*
    pc254.dic.ksu		192.168.254.254		別名為 pc254
    server.lan*.dic.ksu	10.255.*.254		別名為 server
    client.lan*.dic.ksu	10.255.*.1		別名為 client
    
  5. 由於 Server 尚未設定好 IP 分享器的 NAT 功能,因此只需要能夠 ping 10.255.*.254 成功即可!
  6. 嘗試使用 ssh student@10.255.*.254,看看能不能登入系統!
  7. 記得要 exit 離開 server 喔!

2.6: 課後練習

  1. (60%)實作題:啟動 Server 作業硬碟 - unit2
    1. 使用預設 dhcp 的自動取得 IP 模式,讓你的 eth0 網卡啟動,以取得 ISP 所提供的環境
    2. 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
    3. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, links, bind-utils
    4. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
    5. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    6. 讓 /home/demouser/ 底下的所有檔案恢復成為正常的 SELinux 安全本文
    7. 當重新啟動 sshd 的時候 (systemctl restart sshd) ,該服務會報錯誤!請透過查詢登錄檔的方式,解決這個 SELinux 產生的問題 (注意,你可能需要安裝 setroubleshoot* 才能夠順利取得問題的解決方案,並且查看到有 port 2222 的產生才行!
    8. 網路參數的設定,請依據底下的方式來設定好:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。因此,請先刪除所有的連線界面後,再重建三個網卡界面 (eth0, eth1,.eth2) 之後, 才開始底下的設定任務。
      2. eth0 外部網路參數為: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數。另外 gateway 為 172.18.255.254,而 DNS 為 172.16.200.254 以及 168.95.1.1
      3. eth1 內部網路參數為: 172.19.*.254/24,不需要 gateway
      4. eth2 開機後設定為『不啟動』模式
      5. 主機名稱指定為: pc*.example.dic
      6. 最終你的主機名稱與 IP 的對應為:
        pc*.example.dic		172.18.255.*		別名為 pc*
        pc254.example.dic	172.18.255.254		別名為 pc254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
  2. (10%)實作題:啟動 client 作業硬碟 - unit2
    1. 因為系統是 clone 來的,因此請先刪除 eth0 連線後,重新建立新的 eth0 連線名稱
    2. 網路參數的設定,請依據底下的方式來設定好:
      • eth0 網路參數為: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數。另外 gateway 為 172.19.*.254,而 DNS 為 172.16.200.254 以及 168.95.1.1
      • 主機名稱指定為: client.lan*.example.dic
  3. (30%)簡易問答題: 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 網路功能是硬體、作業系統、系統呼叫、應用程式中,哪些層級所提供的功能?
    2. OSI 七層協定,從最底層的硬體層寫起,將七層的中文名稱依序寫下來
    3. 一般來說,所謂的網路基礎,指的是哪幾層?同時,上課提到,每一層的表頭資料中,最重要的參數各為何 (經常用在防火牆的管理上)
    4. TCP/IP 將 OSI 的七層簡化成為哪幾層?
    5. 常見的網路資料中,MAC/IP/TCP/UDP ,哪些被稱為 frame ?哪些被稱為 packet ?
    6. 什麼是 MTU?一般來說,正常的 MTU 大概是多少?而通常比較好的 switch 又可以接受多大的 MTU 呢?
    7. 思考,為何需要修改 MTU (效能、頻寬、內網的 LAN、外網的 WAN?)
    8. 何謂網路的 Socket pair ?
    9. 找出 568A 及 568B 的 RJ-45 接頭的顏色排序各為何?
    10. 計算出 192.168.5.200/26 的 Network IP, broadcast IP, Netmask IP 以及可用 IP 範圍
  4. 上傳成績
    1. 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
    2. 在 Server 硬碟上面登入,然後執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
    3. 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
    4. 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
    5. Please use links http://172.18.255.250/upload/unit02 to check your filename