23 基本網路知識 #
Linux 提供所有必要的網路工具及功能,以整合到所有類型的網路結構。可以透過 YaST 設定使用網路卡進行的網路存取。也可使用手動方式來設定組態。本章僅介紹基本機制及相關的網路組態檔案。
Linux 及其他 Unix 作業系統使用 TCP/IP 通訊協定。這不是單一網路通訊通訊協定,而是提供多種服務的一系列網路通訊協定。TCP/IP 通訊協定系列中的數種通訊協定中所列的通訊協定用於透過 TCP/IP 在兩部機器之間交換資料。由 TCP/IP 組合而成的各個網路形成了一個跨國網路,也稱為「網際網路」。
RFC 代表要求建議 (Request for Comments)。RFC 由一些文件組成,用來描述網際網路通訊協定和作業系統及其應用程式的實作程序。RFC 文件描述網際網路通訊協定的設定。如需有關 RFC 的詳細資訊,請參閱 https://datatracker.ietf.org/。
- TCP
傳輸控制通訊協定:連接導向的安全通訊協定。傳輸的資料首先由應用程式當做資料流傳送出去,然後再由作業系統轉換為適當格式。資料送達目的地主機的相關應用程式時,使用的仍是最初傳送的原始資料流格式。TCP 可以判斷在傳輸期間是否有遺失或打亂了任何資料。只要是資料順序很重要的地方,就會執行 TCP。
- UDP
使用者資料包通訊協定:無連接、不安全的通訊協定。要傳送的資料以應用程式產生的封包形式加以傳送。不會保證資料抵達接收者時的順序,而且可能會發生資料遺失的情況。UDP 適用以記錄為導向的應用程式。它的特點是延遲時間比 TCP 短。
- ICMP
網際網路控制訊息通訊協定:這不是用於最終使用者的通訊協定,而是用來發出錯誤報告的特殊控制通訊協定,能夠控制參與 TCP/IP 資料傳輸的機器的行為。此外,它還提供特殊的回音模式,可以使用 ping 程式檢視。
- IGMP
網際網路群組管理通訊協定:此通訊協定用於在實作 IP 多點傳送時控制機器的行為。
如 圖形 23.1 「TCP/IP 的簡化層模型」 中所顯示,資料交換發生在不同層。實際的網路層是透過 IP (網際網路通訊協定,Internet Protocol) 進行不安全的資料傳輸。在 IP 的上方,TCP (傳輸控制通訊協定,Transmission Control Protocol) 可以保證資料傳輸某種程度的安全性。IP 層由基礎硬體相依通訊協定提供支援,例如乙太網路。
圖表提供每層的一或兩個範例。層的順序是依據抽象階層 (abstraction level)。最底層離硬體很近。不過,最上層對硬體而言幾乎是完全抽象的。每層都有自己的特殊功能。每一層的特殊功能隱含在其描述中。資料連結層及實體層代表所使用的實體網路 (例如乙太網路)。
幾乎所有的硬體通訊協定都是採用封包導向模式。要傳輸的資料會收集在封包中 (無法一次全部傳送)。TCP/IP 封包的大小上限約為 64 KB。由於網路硬體可能有所限制,因此封包一般都很小。乙太網路上資料封包的大小上限約為 1500 個位元組。在乙太網路上傳送資料時,TCP/IP 封包的大小不能超過此限制。如果傳送更多資料,則需要由作業系統傳送更多資料封包。
因為每層有自己指定的功能,關於每層的其他資訊必須儲存於資料封包中。這些資訊放在封包的「標頭」中。每層皆在產生的封包前端附加小的資料區塊,稱為通訊協定標頭。有關在乙太網路纜線上傳送的 TCP/IP 資料封包範例,請參閱圖形 23.2 「TCP/IP 乙太網路封包」中的說明。proof sum 位於封包結尾,不在開頭處。這樣可幫助網路硬體簡化程序。
當應用程式在網路上傳送資料時,資料會經過每一層,除實體層外,全部在 Linux 核心執行。每層都負責準備資料使其能夠傳送到下一層。最底層最後要負責傳送資料。接收到資料時則反轉執行整個程序。就如同洋蔥的層級一般,在每層中,會從已傳輸的資料上移除通訊協定標頭。最後,傳輸層負責讓目的地端的應用程式可以使用資料。以這種方式,每層僅直接與上下兩層通訊。對於應用程式而言,資料是透過無線連接還是有線連接傳輸都無關緊要。同樣,只要封包的格式正確,傳輸哪種類型的資料對資料行而言也無關緊要。
23.1 IP 位址和路由 #
在此節中的討論僅限於 IPv4 網路。如需有關 IPv6 通訊協定 (IPv4 的後繼者) 的資訊,請參閱第 23.2 節 「IPv6 - 新一代網際網路」。
23.1.1 IP 位址 #
網際網路上的每台電腦都有唯一的 32 位元位址。這些 32 位元 (或 4 位元組) 通常按範例 23.1 「撰寫 IP 位址」中第二列所述寫入。
IP Address (binary): 11000000 10101000 00000000 00010100 IP Address (decimal): 192. 168. 0. 20
採用十進位格式,四位元組以十進位數字系統撰寫,以句號分隔。IP 位址是指定給主機或網路介面。每個 IP 位址在全球範圍內只能使用一次。此規則有例外狀況,但下文中並未提及。
IP 位址中的點表示階層系統。直到 1990 年代,IP 位址仍嚴格地以類別加以分類。然而,事實證明此系統太過死板,因此已停止使用。現在,則是使用無類別路由 (classless routing),即 CIDR (無類別網域間路由,classless interdomain routing)。
23.1.2 網路遮罩和路由 #
網路遮罩用於定義子網路的位址範圍。如果兩台主機位於相同的子網路內,它們之間可直接連接。如果它們不在同一個子網路內,則需要用於處理子網路所有流量之閘道的位址。若要檢查兩個 IP 位址是否位於同一子網路,只要使用網路遮罩 「AND」 兩個位址。如果結果相同,兩個 IP 位址位於同一個網路。如果不同,遠端的 IP 位址,即為遠端介面,只能透過閘道來通訊。
若要瞭解網路遮罩如何作用,請參閱範例 23.2 「將 IP 位址連結到網路遮罩」。網路遮罩由 32 位元組成,可辨認 IP 位址有多少屬於網路。這些位元為 1
標示 IP 位址中的對應位元,即表示為同屬一個網路。對於所有值為 0
的位元,標示其屬於子網路內。這表示愈多位元為 1
,子網路就愈小。因為網路遮罩永遠由多個連續的 1
位元組成,也可以計算網路遮罩內的位元數。在範例 23.2 「將 IP 位址連結到網路遮罩」中,第一個 24 位元的網路也可寫成 192.168.0.0/24
。
IP address (192.168.0.20): 11000000 10101000 00000000 00010100 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------- Result of the link: 11000000 10101000 00000000 00000000 In the decimal system: 192. 168. 0. 0 IP address (213.95.15.200): 11010101 10111111 00001111 11001000 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------- Result of the link: 11010101 10111111 00001111 00000000 In the decimal system: 213. 95. 15. 0
再舉個例子:透過同一乙太網路纜線連接的所有機器通常都位於同一子網路中,可以直接存取。即使以交換器或橋接器實際分配子網路時,仍然可以直接連接這些主機。
位於本地子網路外的 IP 位址只能在設定目標網路的閘道時,才能與本地通訊。在大部分的狀況下,只能有一個閘道來處理所有對外的通訊。但是,您也可以為不同的子網路,設定多個閘道。
如果已經設定閘道,所有的外部 IP 封包會傳送到適當的閘道。然後此閘道會試圖以同樣方式傳送封包--主機對主機--直到連結到目標主機或封包 TTL (持續時間) 過期。
- 基本網路位址
這是網路遮罩「及」網路中的任何位址,如範例 23.2 「將 IP 位址連結到網路遮罩」中的
Result
區段所顯示。此位址不能指定給任何主機。- 廣播位址
這可以解釋為:「存取此子網路中的所有主機。」。若要產生此位址,網路遮罩會以二進位格式反轉,連結到具有邏輯 OR 的基本網路位址。因此以上範例會得到 192.168.0.255。此位址無法指派給任何主機。
- 本地主機
位址
127.0.0.1
是指定到每個主機上的「迴路裝置」(loopback device)。使用此位址以及完整迴路網路127.0.0.0/8
中的所有位址 (使用 IPv4 定義),可以設定與您自己機器之間的連接。如果使用 IPv6,則只有一個迴路位址 (::1
)。
因為 IP 位址在全世界必須是唯一的,您不能選取隨機位址。有三種位址領域可以用來設立私人 IP 架構的網路。這些將無法從其他網際網路取得連結,因為他們無法透過網路傳送。這些位址網域在 RFC 1597 指定並列於 表格 23.1 「私人 IP 位址網域」 中。
網路/網路遮罩 |
領域 |
---|---|
|
|
|
|
|
|
23.2 IPv6 - 新一代網際網路 #
IBM Z 硬體的 CTC 和 IUCV 網路連接不支援 IPv6。
由於全球資訊網 (WWW) 的出現,過去十五年內,越來越多的電腦透過 TCP/IP 進行通訊,網際網路的規模發生了爆炸性的增長。自從 CERN 的 Tim Berners-Lee (http://public.web.cern.ch) 於 1990 年發明 WWW 以來,網際網路主機的數量從幾千台成長為幾百萬台。
如前面所述,IPv4 位址僅由 32 個位元組成。而且還損失了一些 IP 位址 - 這些 IP 位址由於網路組織方式的原因而無法使用。您的子網路中可用的位址數量是位元數的平方減 2。舉例來說,一個子網路可能有 2 個、6 個或 14 個可用位址。例如,如果要連接 128 個主機到網際網路,則子網路需要 256 個 IP 位址,但是其中只有 254 個可用,因為子網路結構本身需要用掉兩個 IP 位址:廣播與基本網路位址。
在目前的 IPv4 通訊協定之下,DHCP 或 NAT (網路位址轉譯,Network Address Translation) 是典型的機制,可用來避免位址可能不足的問題。搭配保持私人和公用位址空間分開的方式,能夠減輕短少的情形。若要在 IPv4 網路中設定主機,您需要一些位址項目,例如主機自身的 IP 位址、子網路路遮罩、閘道位址,可能還要提供名稱伺服器位址。您必須知道所有這些項目,且無法從其他地方取得。
透過 IPv6,位址短少及繁複組態的情形應該都成為過去式了。以下小節說明更多 IPv6 改善的部分及它帶來的好處,還有關於從舊通訊協定轉移到新通訊協定的資訊。
23.2.1 優點 #
IPv6 通訊協定帶來的最為重要同時也最為顯著的改進是極大地延伸了可用的位址空間。IPv6 位址是由 128 個位元值組成,而不是傳統的 32 個位元。這樣提供了數以千兆的 IP 位址。
然而,IPv6 位址不僅是在長度方面與之前的位址不同;這些位置的內部結構也不同,可能包含有關系統及其所屬網路的更明確資訊。有關 IPv6 的詳細資訊,可以在 第 23.2.2 節 「位址類型和結構」 中找到。
下面列出了 IPv6 通訊協定的其他優點:
- 自動設定
IPv6 使網路能夠「隨插即用」,這表示無需以手動方式進行任何組態,即可將新設定的系統整合到 (本地) 網路中。新主機使用其自動設定組態機制,從鄰近的路由器上可用的資訊取得自己的位址,依賴的是稱為「網路芳鄰探查」(Neighbor Discovery,ND) 的通訊協定。這個方法不需要管理員的介入,而且不需要維護分配位址的中央伺服器,這是 IPv4 的另一個優勢,因為自動位址分配需要 DHCP 伺服器。
但是,如果路由器連接到交換器,則路由器應傳送具有旗標的週期性通告,告知網路中的主機彼此如何進行互動。如需詳細資訊,請參閱 RFC 2462 和
radvd.conf(5)
手冊頁,以及 RFC 3315。- 機動性
IPv6 能夠同時將數個位址指定給一個網路介面。這樣使用者能夠輕鬆存取多個網路,如同使用行動電話企業提供的國際漫遊服務一般輕鬆自如。當您帶著行動電話出國時,電話只要進入通訊區域就會自動登入國外的服務,這樣無論您身處何地,用同一個號碼都可以聯絡到您,而且您也能像在國內一樣撥打電話。
- 安全通訊
使用 IPv4,網路安全性是附加的功能。IPv6 包括 IPSec 為其中一個核心功能,允許系統在安全的通道上進行通訊,避免網際網路上的外人竊聽。
- 反向相容性
實際上,不可能一次將整個網際網路從 IPv4 切換到 IPv6。因此關鍵在於,兩個通訊協定不僅能夠共存於網際網路上,而且能夠共存於一個系統中。使用相容位址 (IPv4 位址可以輕鬆轉換為 IPv6 位址) 和多個通道可以確保這一點。請參閱第 23.2.3 節 「IPv4 與 IPv6 的共存」。另外,系統可以仰賴「雙重堆疊 IP」(Dual Stack IP) 技術,同時支援這兩種通訊協定,這表示系統有兩個完全分開的網路堆疊,如此一來,兩種通訊協定版本不會相互干擾。
- 透過多點傳送自訂量身訂做的服務
使用 Ipv4 時,有些服務 (如 SMB) 需要廣播它們的封包到區域網路上的所有主機。IPv6 使伺服器能夠透過多點傳播對主機定址 (即將多個主機做為群組的一部分定址),因而提供了更精細的方法。這種方法與透過廣播對所有主機定址,或透過單點傳播個別對每個主機定址均不同。定址為群組的主機,取決於具體的應用程式。可使用預先定義的特定群組來定址,例如定址所有名稱伺服器 (所有名稱伺服器多點傳送群組),或定址所有路由器 (所有路由器多點傳送群組)。
23.2.2 位址類型和結構 #
如上所述,目前的 IP 通訊協定存在兩個重要限制:IP 位址日益短缺,並且設定網路、維護路由表的任務變得越來越複雜繁重。IPv6 透過擴充位址空間到 128 個位元解決了第一個問題。透過引入階層位址結構,結合尖端網路位址配置技術及多重定址功能 (將數個位址指定給同一個裝置,進而支援對多個網路的存取),第二個問題也得到緩解。
使用 IPv6 時,瞭解三種不同類型的位址是很有用的:
- 單點傳播
這類位址恰好與一個網路介面有關聯。這類位址的封包僅傳送到一個目的地。因此,單點廣播位址用來傳送封包到區域網路或網際網路上的個別主機。
- 多點傳播
這類位址與一組網路介面有關聯。這類位址的封包會傳送到屬於該組的所有目的地。多點傳播位址主要由特定網路服務使用,可直接與特定主機群組通訊。
- 任點廣播 (Anycast)
這類位址與一組介面有關聯。這類位址的封包會根據基礎路由通訊協定的原則,傳送到最靠近傳送者的群組成員。使用任點廣播位址,讓主機更易於找出在指定網路區域中提供特定服務的伺服器。相同類型的所有伺服器擁有一樣的任點廣播位址。只要主機要求服務,它會從最靠近位置的伺服器接收回覆,由路由通訊協定決定。如果此伺服器無法回應,通訊協定會自動選取第二近的伺服器,然後是第三近的伺服器,依此類推。
IPv6 位址由八個四位數欄位組成,每個都代表 16 個位元,以十六進位標記法寫入。它們之間用冒號 (:
) 分隔。指定欄位內的任何前導零位元組可以刪除,但是欄位內或尾端的零不能刪除。另一個慣例是多於四個連續的零位元組可能會摺疊成兩個冒號。不過,每個位址只允許有一個 ::
。這類的簡略的標記法,顯示於範例 23.3 「範例 IPv6 位址」 中,其中三行都是代表相同的位址。
fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4 fe80 : 0 : 0 : 0 : 0 : 10 : 1000 : 1a4 fe80 : : 10 : 1000 : 1a4
IPv6 位址的每個部分都有定義的功能。第一個位元組形成字首,指定位址類型。中間的部分是位址的網路部分,但是可能不會使用。位址的尾端形成主機部分。透過 IPv6,在位址尾端的斜線後表示字首的長度,可以定義網路遮罩。位址如 範例 23.4 「指定字首長度的 IPv6 位址」 中所示,包含的資訊是形成位址網路部分的前 64 個位元以及形成其主機部分的最後 64 個位元。換句話說,64
表示網路遮罩從左邊開始填入 64 個 1 位元值。就像 IPv4 一樣,IP 位址使用 AND 結合網路遮罩的值,判斷主機是否位於相同的子網路或在另一個子網路。
fe80::10:1000:1a4/64
IPv6 知道關於數個字首的預定類型。IPv6 字首中列出了其中的一部分。
00
IPv4 位址與透過 IPv6 的 IPv4 相容位址。這些位址用來維護與 IPv4 的相容性。其使用仍然要求路由器能夠轉譯 IPv6 封包為 IPv4 封包。數個特殊的位址,如迴路裝置的位址,也有此字首。
2
或3
做為第一個數字可彙總的全域單點廣播位址。類似 IPv4,可以指定介面來構成特定子網路的部分。目前有下列位址空間:
2001::/16
(產品品質位址空間) 與2002::/16
(6to4 位址空間)。fe80::/10
連結本地位址。不應路由具有這種字首的位址,因此僅能從相同的子網路內進行連接。
fec0::/10
本地網站位址。這些位址可以傳送,但是僅能在所屬組織的網路內傳送。事實上,它們等同於目前私人網路位址空間的 IPv6 (例如,
10.x.x.x
)。ff
這些都是多點傳播位址。
單點廣播位址由三個基本元件組成:
- 公用拓撲
第一個部分 (也包含上述的其中一種字首) 用來透過公用網際網路傳送封包。它包含了有關提供網際網路存取的公司或機構資訊。
- 站點拓樸
第二個部分包含有關傳送封包的目的地子網路的路由資訊。
- 介面識別碼 (Interface ID)
第三個部分識別傳送封包的介面。它也允許 MAC 形成部分的位址。由於 MAC 是硬體廠商在裝置中編碼的全球唯一的固定識別碼,組態程序有所簡化。事實上,結合前 64 個位址位元形成
EUI-64
記號,加上從 MAC 取得的最後 48 個位元,而其餘的 24 個位元則包含有關記號類型的特殊資訊。這樣還可以將EUI-64
記號指定給沒有 MAC 的介面,如基於點對點通訊協定 (PPP) 的介面。
在此基本結構的最上層,IPv6 會分辨五種不同類型的單點廣播位址:
::
(未指定的)在首次啟始化介面時 (此時尚無法透過其他方法確定位址),主機會使用此位址做為其來源位址。
::1
(迴路)迴路裝置的位址。
- IPv4 相容位址
IPv6 位址是由 IPv4 位址以及由 96 個零位元組成的字首形成的。這類相容性位址用於通道 (請參閱第 23.2.3 節 「IPv4 與 IPv6 的共存」),允許 IPv4 與 IPv6 主機在純 IPv4 環境中彼此通訊。
- 對應至 IPv6 的 IPv4 位址
這類位址以 IPv6 標記法指定純 IPv4 位址。
- 本地位址
有兩種位址類型用於本地:
- 連結本地
這類位址僅能用於本地子網路。不應將此類型之來源位址或目標位址的封包路由到網際網路或其他子網路。這些位址包含特殊字首 (
fe80::/10
) 以及網路卡的介面識別碼,加上由空位元組所組成的中間部分。自動設定組態以便與屬於相同子網路中的其他主機通訊時,會使用這類位址。- 網站本地
具有這種位址的封包可以路由到其他子網路,但是不能路由到更寬廣的網際網路 — 不得跨越組織內部網路。這類位址用於內部網路,而且等同於 IPv4 所定義的私人位址空間。其中包含特殊字首 (
fec0::/10
)、介面 ID,及指定子網路 ID 的 16 位欄位。同樣地,餘下的將填入零位元組。
做為 Ipv6 引入的新功能,每個網路介面通常可以獲得數個 IP 位址,其優點是可透過同一介面存取數個網路。其中一個網路可以使用 MAC 和已知字首自動設定,這樣當啟用 IPv6 (使用連結-本地位址) 後,即可存取本地網路中的所有主機。利用形成位址部分的 MAC,全球使用的任何 IP 位址都成為唯一的。位址的唯一變數部分,是指定網站拓撲和公用拓撲,該部分視主機目前正在操作的實際網路而定。
如果主機要在不同的網路之間往返,至少需要兩個位址。其中一個,即主位址,不僅包含了介面識別碼,也包含了其通常所屬之主網路 (及其對應字首) 的識別碼。主位址是靜態位址,因此它通常不會變更。儘管如此,預定要送到行動主機的所有封包,還是可以傳送到主位址,無論是在主網路或其他外部網路中操作。這可藉由 IPv6 引入的新功能來實現,如無狀態自動組態和網路芳鄰探查。除了其主位址外,行動主機也取得一或多個其他的位址,這些位址屬於漫遊的外部網路。這些外部網路稱為 care-of 位址。主網路具有封包在外部漫遊時轉寄預定要送到主機的裝置。在 IPv6 環境中,這個任務是由主代理程式執行的,它會取得所有預定要送到主位址的封包,透過通道轉送它們。預定要傳送到轉送位址的那些封包會直接傳送到行動主機,不會特別繞行。
23.2.3 IPv4 與 IPv6 的共存 #
連接網際網路的所有主機從 IPv4 轉移到 IPv6 是一種漸進程序。這兩種通訊協定將共存一段時間。在一個系統上共存,可保證執行兩種通訊協定的「雙重堆疊」。但這仍然沒有解決啟用了 IPv6 的主機如何與 IPv4 主機通訊,以及應如何透過目前的網路 (絕大部分都以 IPv4 為基礎) 傳輸 IPv6 封包的問題。最佳的解決方案是提供通道及相容性位址 (請參閱第 23.2.2 節 「位址類型和結構」)。
IPv6 主機孤立於 (全球) IPv4 網路,它可透過通道通訊:IPv6 封包會封裝成 Ipv4 封包在 IPv4 網路中移動。兩個 IPv4 主機之間的連接,稱為「通道」。為實現此功能,封包必須包含 IPv6 目的地位址 (或對應字首) 以及通道接收端上遠端主機的 IPv4 位址。基本通道可以根據主機管理員之間的協議「手動」設定;這也稱為「靜態通道」。
不過,靜態通道的組態及維護通常需要密集勞力,才能使用它們應付每天的通訊需求。因此,IPv6 提供三種不同的「動態通道」方法:
- 6over4
IPv6 封包會自動封裝成 IPv4 封包,透過能夠多點傳播的 IPv4 網路進行傳送。IPv6 的訣竅是將整個網路 (網際網路) 視為一個大型的區域網路 (LAN)。如此即能自動判定 IPv4 通道的接收端。不過,這種方法的可延伸性不好,而且不易推廣,因為 IP 多播在網際網路上尚未普及。所以,它僅能為啟用多點傳播的小型公司或機構的網路提供解決方案。這個方法的規格詳述於 RFC 2529。
- 6to4
利用此方法,IPv4 位址會自動從 IPv6 位址產生,使得隔離的 IPv6 主機能夠在 IPv4 網路上通訊。不過,用此方法在隔離的 IPv6 主機與網際網路之間通訊時存在一些問題。該方法詳述於 RFC 3056。
- IPv6 通道仲介
這個方法仰賴提供 IPv6 主機專屬通道的特殊伺服器。詳述於 RFC 3053。
23.2.4 設定 IPv6 #
若要設定 IPv6,通常不需要在個別工作站中做任何變更。IPv6 預設會開啟這個選項。若要在安裝的系統上停用或啟用 IPv6,請使用 YaST root
身分輸入 modprobe
-i ipv6
。載入 IPv6 模組後無法將其卸載。
由於 IPv6 的自動組態概念,網路卡會在連結本地網路中指定一個位址。工作站通常不會進行路由表格管理。工作站可使用「路由器通告通訊協定」,向網路路由器查詢應使用的前置號碼和閘道。可使用 radvd 程式來設定 IPv6 路由器。此程式會通知工作站該 IPv6 位址應使用的前置號碼和路由器。或者,也可使用 zebra/quagga 自動設定位址和路由的組態。
如需如何使用 /etc/sysconfig/network
檔案設定多種通道的資訊,請參閱 ifcfg-tunnel
的手冊頁 (man ifcfg-tunnel
)。
23.2.5 更多資訊 #
上述綜覽沒有完整地涵蓋 IPv6 主題。如果要深入瞭解該新通訊協定,請參閱以下線上文件和書籍:
- http://www.ipv6.org/
所有有關 IPv6 的入門資訊。
- http://www.ipv6day.org
啟動您 IPv6 網路所需的所有資訊。
- http://www.ipv6-to-standard.org/
啟用 IPv6 產品的清單。
- http://www.bieringer.de/linux/IPv6/
在此處可找到 Linux IPv6-HOWTO 和許多與此主題相關的連結。
- RFC 2460
有關 IPv6 的基本 RFC。
- IPv6 essentials
描述此主題所有重要面向的書籍,《IPv6 Essentials》由 Silivia Hagen 所著 (ISBN 0-596-00125-8)。
23.3 名稱解析 #
DNS 協助指定 IP 位址給一或多個名稱以及指定名稱給 IP 位址。在 Linux 中,這種轉換通常由一種稱為 bind 的特殊軟體來完成。處理這個轉換的機器稱為「名稱伺服器」(name server)。所有名稱元件之間以句號分隔,它們共同組成一個階層系統。但是,名稱階層與上述的 IP 位址階層無關。
考慮使用完整名稱,如 jupiter.example.com
,以 hostname.domain
格式來寫入。完整名稱,也稱為完全合格的網域名稱 (FQDN),由主機名稱和網域名稱 (example.com
) 組成。後者也包含了「最上層網域」(top level domain) 或 TLD (com
)。
TLD 指定由於歷史原因已經變得混亂。習慣上,美國使用三個字母的網域名稱。全世界的其他國家,則是使用兩個字母的 ISO 國際代碼為標準。此外,2000 年還引入了較長的 TLD 來表示特定的活動範圍 (例如 .info
、.name
、.museum
)。
在網際網路發展的早期階段 (1990 年之前),檔案 /etc/hosts
用來儲存網際網路上表示的所有機器名稱。這種方式,對於連接到網際網路、快速增長的電腦數量層面而言,很快就證實是不切實際的。基於此因素,又開發出分散式的資料庫,以廣泛分散的方式來儲存主機名稱。這種資料庫與名稱伺服器類似,沒有有關網際網路上所有主機的立即可用資料,但是可以分派申請到其他名稱伺服器。
階層的最上層是由「root 名稱伺服器」(root name server) 所使用。這些 root 名稱伺服器管理最上層網域,且由「網路資訊中心」(Network Information Center,NIC) 負責管理。每個 root 名稱伺服器知道負責指定最上層網域的名稱伺服器。有關最上層網域 NIC 的資訊可從 http://www.internic.net 取得。
DNS 的功能不只是解析主機名稱。名稱伺服器也知道哪個主機,即「郵件交換器」(Mail Exchanger,MX),負責接收該領域的電子郵件。
若要讓您的機器能夠解析 IP 位址,它必須知道至少一個名稱伺服器及其 IP 位址。使用 YaST 可輕鬆指定此類名稱伺服器。 如需使用 SUSE® Linux Enterprise Server 設定名稱伺服器存取組態的資訊,請參閱第 23.4.1.4 節 「設定主機名稱和 DNS」。關於如何設定您自己的名稱伺服器的資訊,請參閱第 39 章 「網域名稱系統」。
whois
通訊協定與 DNS 密切相關。利用此程式,可快速找出負責指定網域的伺服器。
解析程式會將 .local
頂層網域視為連結-本地網域。DNS 申請做為多點傳送 DNS 申請 (而不是一般 DNS 申請) 傳送。如果已在名稱伺服器組態中使用 .local
網域,則必須在 /etc/host.conf
中關閉此選項。如需詳細資訊,請參閱 host.conf
手冊頁。
若要在安裝期間關閉 MDNS,請使用 nomdns=1
開機參數。
如需有關多點傳播 DNS 的詳細資訊,請參閱 http://www.multicastdns.org。
23.4 使用 YaST 設定網路連接 #
Linux 可支援多種網路類型。大多數使用不同的裝置名稱和組態檔,會分佈在檔案系統的不同位置。要更瞭解手動網路組態的綜覽,請參閱第 23.5 節 「手動設定網路連接」。
已建立連結的所有網路介面 (已連接網路線纜) 將自動進行設定。可隨時在安裝的系統上設定其他的硬體。以下幾節將說明 SUSE Linux Enterprise Server 支援之所有網路連接類型的網路組態。
IBM Z 平台支援可熱插拔網路卡,但不支援透過 DHCP 自動將它們進行網路整合 (與 PC 情況相同)。偵測到網路卡後,您需要手動設定介面。
23.4.1 使用 YaST 設定網路卡 #
若要在 YaST 中設定以太網路卡或 Wi-Fi/藍芽卡,請選取
› 。啟動模組後,YaST 將顯示 對話方塊,其中包含四個索引標籤: 、 、 和 。 索引標籤可設定一般網路選項,例如網路設定方法、IPv6 和一般 DHCP 選項。如需詳細資訊,請參閱第 23.4.1.3 節 「設定未偵測到的網路卡」。若要變更所設定網路卡的組態,請參閱第 23.4.1.2 節 「變更網路卡的組態」。
索引標籤包含有關已安裝網路介面與組態的資訊。此處會列出所有正確偵測到之網路卡的名稱。在此對話方塊中,您可以手動設定新網路卡、移除或變更其組態。若要手動設定未自動偵測到的網路卡,請參閱 索引標籤可設定機器的主機名稱以及要使用伺服器的名稱。如需詳細資訊,請參閱 索引標籤用於設定路由組態。如需詳細資訊,請參閱23.4.1.1 設定全域網路選項 #
使用 YaST
模組的 索引標籤,可以設定重要的全域網路選項,例如使用 NetworkManager、IPv6 和 DHCP 用戶端選項。這些設定適用於所有網路介面。NetworkManager 現在由 SUSE Linux Enterprise Workstation Extension 提供。若要安裝 NetworkManager,請啟用 Workstation Extension 儲存庫,然後選取 NetworkManager 套件。
在nm-applet
設定網路選項,且 模組的 、 和 索引標籤都會處於停用狀態。如需 NetworkManager 的詳細資訊,請參閱 SUSE Linux Enterprise Desktop 文件。
在
中,選擇是否要使用 IPv6 協定。可以同時使用 IPv6 和 IPv4。預設會啟用 IPv6。但是,在不使用 IPv6 通訊協定的網路中,停用 IPv6 通訊協定時回應較快。若要停用 IPv6,請停用 。如果停用了 IPv6,核心將不再自動載入 IPv6 模組。重新開機後會套用此設定。在
中,設定 DHCP 用戶端的選項。在一個網路中,每個 DHCP 用戶端的 均不能相同。若將其留為空白,則預設會使用網路介面的硬體位址。但是,如果您要使用同一個網路介面執行多個虛擬機,因此會使用同一個硬體位址,則請在此處指定不限格式的唯一識別碼。
AUTO
,將傳送目前的主機名稱 (即 /etc/HOSTNAME
中定義的主機名稱)。將選項欄位留為空白則不會傳送主機名稱。
如果您不希望根據 DHCP 的資訊變更預設路由,請停用
。23.4.1.2 變更網路卡的組態 #
若要變更網路卡的組態,請在 YaST 的
› 中偵測到的網路卡清單中選取網路卡,然後按一下 。 對話方塊隨即出現,您可以使用 、 和 索引標籤調整網路卡的組態。23.4.1.2.1 設定 IP 位址 #
在
對話方塊的 索引標籤中,可以設定網路卡的 IP 位址或確定其 IP 位址的方式。系統支援 IPv4 和 IPv6 兩種位址。您可以為網路卡設定 (適用於 Bonding 裝置)、 (IPv4 或 IPv6),也可以透過 或/與 為其指定 。若要使用
,請選擇是使用 (適用於 IPv4)、 (適用於 IPv6),還是 。若情況適合,系統會將安裝時第一個可用的已連結網路卡自動設定為使用透過 DHCP 設定的自動位址。
在 IBM Z 平台上,只有擁有 MAC 位址的網路卡才支援基於 DHCP 的位址組態。此情況只適用於 OSA 和 OSA 高速網路卡。
若您用的是 DSL 連線而非 ISP (網際網路服務提供者) 指定的靜態 IP,還應該使用 DHCP。若您決定使用 DHCP,請在 YaST 網路卡組態模組中開啟
對話方塊,於 索引標籤的 中設定詳細資料。若您將虛擬主機設定為透過同一個介面與不同的主機進行通訊,則需要使用 來分辨它們。DHCP 對於用戶端組態是不錯的選擇,但不適用於伺服器組態。若要設定靜態 IP 位址,請如下執行:
在 YaST 網路卡組態模組的
索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在
索引標籤中,選擇 。輸入
。使用 IPv4 和 IPv6 位址都可以。在 中輸入網路遮罩。如果使用 IPv6 位址,請以/64
格式使用 做為字首長度。或者,您可以為此位址輸入完全合格的
,該主機名稱將寫入/etc/hosts
組態檔案。按一下
。若要啟用組態,請按一下
。
在啟動網路介面期間,wicked
會檢查載體,並且只有在偵測到連結之後,才會套用 IP 組態。如果不論連結狀態如何,您都需要套用該組態 (例如,您要測試監聽某個位址的服務),則可以在 /etc/sysconfig/network/ifcfg
內的介面組態檔案中新增變數 LINK_REQUIRED=no
,以跳過連結偵測。
另外,您可以使用變數 LINK_READY_WAIT=5
來指定等待連結的逾時值 (以秒為單位)。
如需 ifcfg-*
組態檔案的詳細資訊,請參閱第 23.5.2.5 節 「/etc/sysconfig/network/ifcfg-*
」和 man 5 ifcfg
。
若使用靜態位址,系統將不會自動設定名稱伺服器和預設閘道。若要設定名稱伺服器,請依第 23.4.1.4 節 「設定主機名稱和 DNS」 中的說明進行。若要設定閘道,請依第 23.4.1.5 節 「設定路由」 中的說明進行。
23.4.1.2.2 設定多個位址 #
一部網路裝置可以有多個 IP 位址 (稱為別名或標籤)。
別名或標籤僅適用於 IPv4。利用 iproute2
網路介面,您可以使用一或多個位址。
若要使用 YaST 為網路卡設定更多位址,請執行以下操作:
在 YaST
對話方塊的 索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在
› 索引標籤中,按一下 。輸入
、 和 。請注意,新增 IP 別名時必須指定/32
網路遮罩。別名中不要包含介面名稱。若要啟用組態,請確認設定。
23.4.1.2.3 變更裝置名稱和 udev 規則 #
可以在網路卡正在使用中時變更它的裝置名稱。也可以決定網路卡是否應由 udev 透過其硬體 (MAC) 位址或透過匯流排 ID 識別。後一個選項更適合大型伺服器,因為便於熱插拔網路卡。若要使用 YaST 設定這些選項,請執行下列步驟:
在 YaST
對話方塊的 索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。移至
索引標籤。目前的裝置名稱顯示在 中。按一下 。選擇 udev 是應透過網路卡的
還是透過 來識別網路卡。網路卡目前的 MAC 位址和匯流排 ID 將顯示在對話方塊中。若要變更裝置名稱,請選取
選項,然後編輯名稱。若要啟用組態,請確認設定。
23.4.1.2.4 變更網路卡核心驅動程式 #
有些網路卡可能有多個核心驅動程式可供使用。如果網路卡已設定,YaST 可讓您從可用且適合的驅動程式清單中選取要使用的核心驅動程式。還可以為核心驅動程式指定選項。若要使用 YaST 設定這些選項,請執行下列步驟:
在 YaST 網路設定模組的
索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。移至
索引標籤。在
中選取要使用的核心驅動程式。在 中以=
= VALUE 格式為所選驅動程式輸入任何選項。若要使用多個選項,應以空格將其隔開。若要啟用組態,請確認設定。
23.4.1.2.5 啟動網路裝置 #
若使用結合 wicked
的方法,則可以將裝置設定為在開機時、連接纜線時、偵測到網路卡時啟動,或以手動方式啟動,或永不啟動。若要變更裝置啟動,請執行下列步驟:
在 YaST 的
› 中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在
索引標籤中,從 中選擇希望的項目。選擇
可在系統開機時啟動裝置。若使用 ,系統會監控介面,探查是否有實體的連接。若使用 ,會在介面可用時對其進行設定。它與 選項類似,唯一的區別在於如果開機時介面不存在,則不會發生錯誤。選擇 可以透過ifup
手動控制介面。選擇 則不會啟動裝置。 與 相似,區別是使用systemctl stop network
指令不會關閉介面;如果wicked
處於使用中狀態,則network
服務還會處理wicked
服務。若您使用的是 NFS 或 iSCSI 根檔案系統,請使用此選項。若要啟用組態,請確認設定。
在透過網路將根分割區掛接為 NFS 共用的 (無磁碟) 系統中,設定 NFS 共用可供存取的網路裝置時請保持謹慎。
將系統關閉或重新開機時,預設的處理順序是先關閉網路連接,然後卸載根分割區。對於 NFS 根分割區,這種順序會造成問題,因為在尚未與 NFS 共用啟動網路連接的情況下,根分割區無法完全卸載。為防止系統停用相關的網路裝置,請依第 23.4.1.2.5 節 「啟動網路裝置」中所述開啟網路裝置組態索引標籤,然後在 窗格中選取 。
23.4.1.2.6 設定最大傳輸單元大小 #
您可以設定介面的最大傳送單元 (MTU)。MTU 指允許的最大封包大小 (以位元組計)。MTU 越高,頻寬效率就越高。但是,大型封包可能會將慢速介面阻擋一段時間,這會加劇後續封包的延遲。
在 YaST 的
› 中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在
索引標籤中,從 清單中選取所需的項目。若要啟用組態,請確認設定。
23.4.1.2.7 PCIe 多功能裝置 #
支援 LAN、iSCSI 與 FCoE 的多功能裝置受支援。YaST FCoE 用戶端 (yast2 fcoe-client
) 會在額外的欄中顯示私人旗標,讓使用者可以選取用於 FCoE 的裝置。YaST 網路模組 (yast2 lan
) 會在網路組態中排除「僅供儲存的裝置」。
如需 FCoE 的詳細資訊,請參閱第 16.3 節 「使用 YaST 管理 FCoE 服務」。
23.4.1.2.8 IP-over-InfiniBand (IPoIB) 的 Infiniband 組態 #
在 YaST 的
› 中選取 InfiniBand 裝置,然後按一下 。在
索引標籤中,選取一種 (IPoIB) 模式: (預設) 或 。若要啟用組態,請確認設定。
如需 InfiniBand 的詳細資訊,請參閱 /usr/src/linux/Documentation/infiniband/ipoib.txt
。
23.4.1.2.9 設定防火牆 #
您不必依Section 23.4, “firewalld
”中所述執行詳細的防火牆設定,只需在設定裝置的過程中決定裝置的基本防火牆組態。請執行下列步驟:
開啟 YaST 的
› 模組。在 索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。進入
對話方塊的 索引標籤。決定您要將介面指定至的
。可用的選項如下:- 防火牆已停用
只有當防火牆已停用或未執行時,此選項才可用。唯有您的機器位於受外部防火牆保護的更大網路中時,才能使用此選項。
- 自動指定區域
只有當防火牆已啟用時,此選項才可用。防火牆會執行,並且介面會自動指定至防火牆區域。包含關鍵字
any
的區域或外部區域將會用於這類介面。- 內部區域 (不受保護)
防火牆會執行,但不強制執行任何保護此介面的規則。如果您的機器位於受外部防火牆保護的更大網路中,請使用此選項。如果機器具有多個網路介面,此選項也適用於連接到內部網路的介面。
- 非軍事區域
廢除區域是內部網路與 (有潛在風險的) 網際網路之前的另一道防線。從內部網路與網際網路都可連接到指派至此區域的主機,但主機無法連存取內部網路。
- 外部區域
防火牆在此介面上執行,且會完全保護其抵禦其他可能有害的網路流量。此為預設選項。
若要啟用組態,請確認設定。
23.4.1.3 設定未偵測到的網路卡 #
如果未能正確偵測到某個網路卡,該卡將不會包含在已偵測到的網路卡清單中。若您確定您的系統具備網路卡的驅動程式,可手動設定。也可設定特殊的網路裝置類型,如橋接、Bond、TUN 或 TAP。若要設定未偵測到的網路卡或特殊裝置,請執行下列步驟:
在 YaST 的
› › 對話方塊中,按一下 。在
對話方塊中,從可用的選項中設定介面的 和 。如果網路卡為 USB 裝置,請啟用相應的核取方塊,並按 結束此對話方塊。否則,您可以根據需要定義要用於網路卡的核心 以及卡的 。在
中,可以設定ifup
用於介面的ethtool
選項。如需可用選項的資訊,請參閱ethtool
手冊頁。如果選項字串以
-
開頭 (例如-K INTERFACE_NAME rx on
),則會以目前的介面名稱取代字串中的第二個單字。否則 (例如autoneg off speed 10
)ifup
會新增-s INTERFACE_NAME
至開頭。按一下
。- 、 和 索引標籤中設定介面的所有必要選項,例如 IP 位址、裝置啟動或防火牆區域。如需組態選項的詳細資訊,請參閱
若您介面裝置類型選擇
,請在下一個對話設定無線連接。若要啟用新的網路組態,請確認設定。
23.4.1.4 設定主機名稱和 DNS #
若您在安裝期間未變更網路組態,且已有乙太網路卡可用,則系統會自動為您的電腦產生主機名稱並啟動 DHCP。同時也會自動產生您主機要整合至網路環境所需的的名稱服務資訊。若網路位址設定使用 DHCP,則網域名稱伺服器清單會自動填入適當的資料。若您希望使用靜態設定,請手動設定數值。
若要變更您電腦的名稱並調整名稱伺服器搜尋清單,請如下執行:
在 YaST 的
› 網路設定 索引標籤。輸入
。請注意,主機名稱是全域的,將套用於所有網路介面。若您要使用 DHCP 獲取 IP 位址,則電腦的主機名稱將由 DHCP 伺服器自動設定。若要連接到其他網路,應禁止此行為,因為其他網路可能會指定其他主機名稱,而且在執行時期變更主機名稱會混淆圖形桌面。若要停止使用 DHCP 獲取 IP 位址,請停用
。在
中,請選取修改 DNS 組態 (名稱伺服器、搜尋清單以及/run/netconfig/resolv.conf
檔案的內容) 的方式。若選取
選項,則組態由netconfig
程序檔來處理,這樣會將靜態定義的資料 (使用 YaST 或在組態檔案中) 與從 DHCP 用戶端或 NetworkManager 動態取得的資料合併。一般情況均可採用此預設規則。如果選取了
選項,系統將不允許netconfig
修改/run/netconfig/resolv.conf
檔案。但是可以手動編輯此檔案。若選取
選項,則應指定定義合併規則的 字串。該字串包含要視為設定之有效來源的介面名稱清單 (以逗號分隔)。除完整的介面名稱外,還允許使用基本萬用字元來對應多個介面。例如,eth* ppp?
首先以所有 eth 為目標,然後是 ppp0 到 ppp9 的所有介面。可以使用兩個特殊規則值來指示如何套用/etc/sysconfig/network/config
檔案中定義的靜態設定:STATIC
靜態設定需要與動態設定合併在一起。
STATIC_FALLBACK
只有動態組態不可用時才會使用靜態設定。
如需詳細資訊,請參閱
netconfig
(8) 的手冊頁 (man 8 netconfig
)。輸入
並填寫 清單。名稱伺服器必須透過 IP 位址 (例如 192.168.1.116) 而非主機名稱指定。在 索引標籤中指定的名稱就是用於解析主機名稱 (沒有指定網域) 的網域名稱。如果使用多個 ,請以逗號或空格將網域隔開。若要啟用組態,請確認設定。
還可以使用 YaST 透過指令列編輯主機名稱。YaST 進行的變更會立即生效 (手動編輯 /etc/HOSTNAME
檔案時則不是這樣)。若要變更主機名稱,請使用下列指令:
#
yast dns edit hostname=HOSTNAME
若要變更名稱伺服器,請使用下列指令:
#
yast dns edit nameserver1=192.168.1.116#
yast dns edit nameserver2=192.168.1.117#
yast dns edit nameserver3=192.168.1.118
23.4.1.5 設定路由 #
若要讓您的電腦與其他電腦和其他網路通訊,必須提供路由資訊,以讓網路流量採取正確的路徑。若使用 DHCP,會自動提供此資訊。若使用靜態設定,必須手動新增此資料。
在 YaST 中,移至
› 。輸入
的 IP 位址 (必要時可以輸入 IPv4 和 IPv6)。預設閘道會比對每個可能的目的地,但是如果某個符合所需位址的路由表項目已經存在,就會使用該項目,而非透過預設閘道使用預設路由。可以在
中輸入更多項目。輸入 網路 IP 位址、 IP 位址和 。選取要透過其將流量路由至所定義網路的 (減號表示任意裝置)。 若要忽略這些值中的任意一個,請使用減號-
。若要在表中輸入預設閘道,請在「default
目的地 。注意:路由優先程度若使用了多個預設路由,則可以指定權值選項確定哪個路由的優先程度較高。若要指定度量選項,請在
中輸入- metric NUMBER
。可能的最低度量為 0。度量最低的路由具有最高的優先程度,將做為預設路由使用。如果該網路裝置已解除連接,將會移除其路由,使用下一個路由。如果系統是路由器,請視需要在
中啟用 和 。若要啟用組態,請確認設定。
23.4.2 IBM Z:設定網路裝置 #
SUSE Linux Enterprise Server for IBM Z 支援數種類型的網路介面。您可使用 YaST 設定所有類型。
23.4.2.1 qeth-hsi 裝置 #
若要將 qeth-hsi
(Hipersocket) 介面新增至安裝的系統中,請啟動 YaST 中的 › 模組。選取其中一個標示為 的裝置做為「讀取」裝置位址,然後按一下 。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0800
)。然後按「下一步」。在 對話方塊中,為新介面指定 IP 位址和網路遮罩,然後按 和 結束網路組態。
23.4.2.2 qeth-ethernet 裝置 #
若要將 qeth-ethernet
(IBM OSA Express 乙太網路卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取其中一個標記為 的裝置來做為「讀取」裝置位址,然後按一下 。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0700
)。輸入所需的連接埠名稱、連接埠號碼 (如適用)、一些其他選項、您的 IP 位址以及適用的網路遮罩。按 與 結束網路組態。
23.4.2.3 ctc 裝置 #
若要將 ctc
(IBM 平行埠 CTC 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取一個標示為 的裝置做為您的讀取通道,然後按一下 。選擇適合您裝置的 (通常為 )。指定您和遠端合作夥伴的 IP 位址。如有需要,可透過 › 來調整 MTU 的大小。按 與 結束網路組態。
不建議使用此介面。未來的 SUSE Linux Enterprise Server 版本將不支援此介面。
23.4.2.4 lcs 裝置 #
若要將 lcs
(IBM OSA-2 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取標示為 的裝置,然後按一下 。輸入所需的連接埠號碼、一些其他選項、您的 IP 位址以及適用的網路遮罩。按 與 結束網路組態。
23.4.2.5 IUCV 裝置 #
若要將 iucv
(IUCV) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取標示為 的裝置,並按一下 。YaST 會提示您提供 IUCV 合作夥伴的名稱 ( )。輸入名稱 (本項目區分大小寫) 然後選取 。指定合作夥伴的 及 。如果需要,在 索引標籤中 大小。按 與 結束網路組態。
不建議使用此介面。未來的 SUSE Linux Enterprise Server 版本將不支援此介面。
23.5 手動設定網路連接 #
手動設定網路軟體應為最後採取的替代方案。建議使用 YaST。不過,這個有關網路組態的背景資訊也可協助您使用 YaST。
23.5.1 wicked
網路組態 #
名為 wicked
的工具和程式庫提供了一個新的架構用於設定網路。
傳統網路介面管理面臨的其中一項挑戰是,各種不同的網路管理層混雜在一個程序檔中,最多在兩個不同的程序檔中。這些程序檔彼此之間如何互動沒有明確的定義。這會導致出現無法預測的問題、模糊的條件約束和慣例等情況。針對各種不同的情況部署多個特殊入侵層增加了維護負擔。所用的位址組態通訊協定透過 dhcpcd 等精靈來實作,而這些精靈與基礎架構中其他元件的互動相當不通暢。為了持續識別介面,引入了新潮的介面命名規劃,這一規劃需要繁重的 udev 支援。
wicked 的構想是透過多種方法分解問題。它沒有採用任何全新的理念,而是嘗試將不同專案中的想法集中在一起,以期形成一個更好的整體解決方案。
實現此目的的方法之一是使用用戶端/伺服器模型。此方法可讓 wicked 為位址組態等項目定義能夠很好地整合到整個架構中的標準化功能。例如,使用特定的位址組態時,管理員可能要求應該透過 DHCP 或 IPv4 zeroconf 設定介面。在這種情況下,位址組態服務只會從它的伺服器獲得租用,並傳遞到安裝了所要求位址和路由的 wicked 伺服器程序。
分解問題的另一個方法是強制執行分層機製。對於任何類型的網路介面,都可以定義一個 dbus 服務,用於設定網路介面的裝置層 — VLAN、橋接器、結合或半虛擬化裝置。位址組態等常用功能將透過在這些裝置特定服務頂層的聯合服務來實作,而無需專門實作。
wicked 架構使用各種 dbus 服務來實現這兩個方面的功能,這些服務將根據其類型連接至網路介面。本文提供了 wicked 中當前物件階層的簡要綜覽。
每個網路介面均以 /org/opensuse/Network/Interfaces
的子物件來表示。子物件的名稱由其 ifindex 指定。例如,通常 ifindex 為 1 的迴路介面是 /org/opensuse/Network/Interfaces/1
,註冊的第一個乙太網路介面是 /org/opensuse/Network/Interfaces/2
。
每個網路介面都有一個關聯的「類別」,用於選取該介面支援的 dbus 介面。依預設,每個網路介面的類別為 netif
,wickedd
將自動連接與此類別相容的所有介面。在目前實作中,包括以下介面:
- org.opensuse.Network.Interface
一般網路介面功能,例如,開啟或關閉連接、指定 MTU 等。
- org.opensuse.Network.Addrconf.ipv4.dhcp, org.opensuse.Network.Addrconf.ipv6.dhcp, org.opensuse.Network.Addrconf.ipv4.auto
適用於 DHCP、IPv4 zeroconf 等的位址組態服務
除此之外,網路介面可能還需要或者提供特殊的組態機制。例如,對於某個乙太網路裝置,您應該能夠控制連結速度和檢查總數卸載等。為了實現此目的,乙太網路裝置都有一個名為 netif-ethernet
的自己的類別,該類別屬於 netif
的子類別。因此,指定給乙太網路介面的 dbus 介面具有上面列出的所有服務,以及 org.opensuse.Network.Ethernet
服務,後者僅可用於屬於 netif-ethernet
類別的物件。
同樣,橋接器、VLAN、結合裝置或 infiniband 等介面類型也存在適用類別。
您要如何與某個首先需要建立的介面 (例如 VLAN,它實際上是位於乙太網路裝置上的虛擬網路介面) 互動呢?為此,wicked 定義了出廠介面,例如 org.opensuse.Network.VLAN.Factory
。這種出廠介面只提供一個功能,就是讓您建立所需類型的介面。這些出廠介面連接至 /org/opensuse/Network/Interfaces
清單節點。
23.5.1.1 wicked
架構和功能 #
wicked
服務包含多個部份,如圖形 23.4 「wicked
架構」中所述。
wicked
架構 #
wicked
目前支援以下功能:
使用組態檔案後端來分析 SUSE 樣式的
/etc/sysconfig/network
檔案。使用內部組態後端以 XML 格式表示網路介面組態。
開啟和關閉「一般」網路介面,例如乙太網路或 InfiniBand、VLAN、橋接器、結合裝置、tun、tap、虛構裝置、macvlan、macvtap、hsi、qeth、iucv 和無線 (目前限制為一個 wpa-psk/eap 網路) 裝置。
內建 DHCPv4 用戶端和內建 DHCPv6 用戶端。
預設啟用的 nanny 精靈有助於在裝置可用 (介面熱插入) 時自動啟動設定的介面,以及在偵測到連結 (載體) 時設定 IP 組態。如需詳細資訊,請參閱第 23.5.1.3 節 「Nanny」。
wicked
實作為一組與 systemd 相整合的 DBus 服務。因此,常用的systemctl
指令都將適用於wicked
。
23.5.1.2 使用 wicked
#
在 SUSE Linux Enterprise 上,預設會執行 wicked
。如果您要檢查目前啟用了哪個元件,以及該元件是否正在執行,請呼叫:
systemctl status network
如果已啟用 wicked
,則會看到類似下面的行:
wicked.service - wicked managed network interfaces Loaded: loaded (/usr/lib/systemd/system/wicked.service; enabled) ...
如果執行的是其他元件 (例如 NetworkManager) 並且您想要切換到 wicked
,請先停止正在執行的元件,然後啟用 wicked
:
systemctl is-active network && \ systemctl stop network systemctl enable --force wicked
如此可啟用 wicked 服務、建立從 network.service
到 wicked.service
的別名連結,並在下次開機時啟動網路。
啟動伺服器程序:
systemctl start wickedd
這會啟動 wickedd
(主要伺服器) 和關聯的要求者:
/usr/lib/wicked/bin/wickedd-auto4 --systemd --foreground /usr/lib/wicked/bin/wickedd-dhcp4 --systemd --foreground /usr/lib/wicked/bin/wickedd-dhcp6 --systemd --foreground /usr/sbin/wickedd --systemd --foreground /usr/sbin/wickedd-nanny --systemd --foreground
然後開啟網路:
systemctl start wicked
或者使用 network.service
別名:
systemctl start network
這些指令使用 /etc/wicked/client.xml
中定義的預設或系統組態來源。
若要啟用除錯功能,請在 /etc/sysconfig/network/config
中設定 WICKED_DEBUG
,例如:
WICKED_DEBUG="all"
或者,若要省略一些資訊:
WICKED_DEBUG="all,-dbus,-objectmodel,-xpath,-xml"
使用用戶端公用程式顯示所有介面的介面資訊,或者顯示以 IFNAME 指定的介面的介面資訊:
wicked show all wicked show IFNAME
XML 格式的輸出:
wicked show-xml all wicked show-xml IFNAME
開啟一個介面:
wicked ifup eth0 wicked ifup wlan0 ...
由於未指定組態來源,wicked 用戶端會檢查 /etc/wicked/client.xml
中為它定義的預設組態來源:
firmware:
iSCSI 開機韌體表 (iBFT)compat:
ifcfg
檔案 — 為實現相容性而實作
將會套用 wicked
從指定介面的這些來源中取得的任何設定。預期的重要性順序為 firmware
、compat
- 將來這種順序可能會發生變更。
如需詳細資訊,請參閱 wicked
的手冊頁。
23.5.1.3 Nanny #
Nanny 是一個由事件與規則驅動的精靈,負責熱插拔裝置等非同步或被動性案例。因此,nanny 精靈可幫助啟動或者重新啟動延遲的裝置,或臨時消失的裝置。Nanny 會監視裝置和連結的變化,並整合目前規則集定義的新裝置。由於指定的逾時條件約束的原因,即使 ifup
已結束,Nanny 仍會繼續設定。
依預設,nanny 精靈在系統上處於使用中狀態。您可在 /etc/wicked/common.xml
組態檔案中啟用該精靈:
<config> ... <use-nanny>true</use-nanny> </config>
如果使用此設定,ifup 和 ifreload 會將包含有效組態的規則套用至 nanny 精靈;然後,nanny 將會設定 wickedd
,從而確定支援熱插拔。nanny 將在背景中等待事件或變更 (例如,開啟新的裝置或載體)。
23.5.1.4 啟用多個介面 #
對於結合裝置和橋接器,有效的做法是在一個檔案 (ifcfg-bondX) 中定義整個裝置拓撲,並一次性將它開啟。然後,當您指定 (橋接器或結合裝置的) 頂層介面名稱時,wicked 可以開啟整個組態:
wicked ifup br0
此指令會依適當的順序自動設定橋接器及其相依項,而無需分別列出相依項 (連接埠等)。
若要在一個指令中開啟多個介面:
wicked ifup bond0 br0 br1 br2
若要開啟所有介面:
wicked ifup all
23.5.1.5 將通道與 Wicked 配合使用 #
如果需要將通道與 Wicked 配合使用,可以使用 TUNNEL_DEVICE
。它可用於指定可選的裝置名稱,讓通道繫結到該裝置。通道式封包只會透過此裝置進行路由。
如需詳細資訊,請參閱man 5 ifcfg-tunnel
。
23.5.1.6 處理增量變更 #
有了 wicked
,當您要重新設定某個介面時,並不需要真正將它關閉 (除非核心有此要求)。例如,若要將另一個 IP 位址或路由新增到靜態設定的網路介面,請將該 IP 位址新增到介面定義,然後再次執行「ifup」操作。伺服器會儘量做到只更新那些已變更的設定。這適用於連結級別的選項,例如裝置 MTU 或 MAC 位址;也適用於網路級別的設定,例如位址、路由,甚至位址組態模式 (例如,從靜態組態轉到 DHCP 時)。
當然,對於合併了多個真實裝置 (例如橋接器或結合裝置) 的虛擬介面,事情會變得有些棘手。對於結合裝置,當裝置運作時,您無法變更某些參數,否則會導致出錯。
但是,您仍可以新增或移除結合裝置或橋接器的子裝置,或者選擇結合裝置的主要介面。
23.5.1.7 Wicked 延伸:位址組態 #
wicked
設計為可使用外圍程序檔延伸。這些延伸可在 config.xml
檔案中定義。
目前支援數種類別的延伸:
連結組態:這些程序檔負責根據用戶端提供的組態來設定裝置的連結層,以及負責將連結層再次拆開。
位址組態:這些程序檔負責管理裝置的位址組態。通常,位址組態和 DHCP 由
wicked
自身管理,但是,可借助延伸來執行。防火牆延伸:這些程序檔可以套用防火牆規則。
通常,延伸中包含一個啟動指令和一個停止指令、一個選擇性的「pid 檔案」,以及要傳遞給程序檔的一組環境變數。
為了說明此延伸的工作原理,請查看 etc/server.xml
中定義的防火牆延伸:
<dbus-service interface="org.opensuse.Network.Firewall"> <action name="firewallUp" command="/etc/wicked/extensions/firewall up"/> <action name="firewallDown" command="/etc/wicked/extensions/firewall down"/> <!-- default environment for all calls to this extension script --> <putenv name="WICKED_OBJECT_PATH" value="$object-path"/> <putenv name="WICKED_INTERFACE_NAME" value="$property:name"/> <putenv name="WICKED_INTERFACE_INDEX" value="$property:index"/> </dbus-service>
該延伸連接至 <dbus-service>
標記,並定義了用於進行此介面的各項動作所需執行的指令。此外,宣告可以定義並啟始化傳遞給動作的環境變數。
23.5.1.8 Wicked 延伸:組態檔案 #
您也可以使用程序檔來延伸組態檔案的處理。例如,extensions/resolver
程序檔根據 server.xml
中設定的行為來最終處理租用中的 DNS 更新:
<system-updater name="resolver"> <action name="backup" command="/etc/wicked/extensions/resolver backup"/> <action name="restore" command="/etc/wicked/extensions/resolver restore"/> <action name="install" command="/etc/wicked/extensions/resolver install"/> <action name="remove" command="/etc/wicked/extensions/resolver remove"/> </system-updater>
當 wickedd
收到更新時,系統更新程式常式會剖析租用,並呼叫解析程式程序檔中的適當指令 (backup
、install
等)。此後便可使用 /sbin/netconfig
或者透過手動寫入 /run/netconfig/resolv.conf
(做為後援) 來組態 DNS 設定。
23.5.2 組態檔案 #
本節提供網路組態檔的綜覽,並說明其用途和使用的格式。
23.5.2.1 /etc/wicked/common.xml
#
/etc/wicked/common.xml
檔案包含所有應用程式都應使用的通用定義。它源自或包含在位於同一目錄下的其他組態檔案中。儘管您可以使用此檔案允許在所有 wicked
元件間除錯,但建議使用 /etc/wicked/local.xml
檔案來實現此目的。執行維護更新後,/etc/wicked/common.xml
可能會被覆寫,因此您所做的變更可能會遺失。/etc/wicked/common.xml
檔案包含預設安裝中的 /etc/wicked/local.xml
,因此您通常不需要修改 /etc/wicked/common.xml
。
如果要透過將 <use-nanny>
設定為 false
來停用 nanny
,請重新啟動 wickedd.service
,然後執行以下指令以套用所有組態和規則:
>
sudo
wicked ifup all
如果 wickedd
、wicked
或 nanny
程式自己的組態檔案不存在,它們會嘗試讀取 /etc/wicked/common.xml
。
23.5.2.2 /etc/wicked/server.xml
#
wickedd
伺服器程序會在啟動時讀取檔案 /etc/wicked/server.xml
。該檔案將延伸儲存到 /etc/wicked/common.xml
中。除此之外,此檔案還會設定解析器的處理方式以及從 addrconf
要求者 (例如 DHCP) 接收資訊的方式。
建議您將需要對此檔案進行的變更新增至單獨的檔案 /etc/wicked/server-local.xml
(/etc/wicked/server.xml
會包含該檔案)。使用單獨的檔案可以避免所做的變更在更新維護期間遭到覆寫。
23.5.2.3 /etc/wicked/client.xml
#
/etc/wicked/client.xml
供 wicked
指令使用。該檔案指定探查由 ibft 管理的裝置時所用程序檔的位置,並可設定網路介面組態的位置。
建議您將需要對此檔案進行的變更新增至單獨的檔案 /etc/wicked/client-local.xml
(/etc/wicked/server.xml
會包含該檔案)。使用單獨的檔案可以避免所做的變更在更新維護期間遭到覆寫。
23.5.2.4 /etc/wicked/nanny.xml
#
/etc/wicked/nanny.xml
設定連結層的類型。建議您將特定組態新增至單獨的檔案 /etc/wicked/nanny-local.xml
中,以免在進行維護更新期間遺失所做的變更。
23.5.2.5 /etc/sysconfig/network/ifcfg-*
#
這些檔案包含網路介面的傳統組態。
wicked
和 ifcfg-*
檔案
如果您指定 compat:
字首,wicked
會讀取這些檔案。根據 /etc/wicked/client.xml
中 SUSE Linux Enterprise Server 的預設組態, wicked
會嘗試先讀取這些檔案,然後再讀取 /etc/wicked/ifconfig
中的 XML 組態檔案。
提供的 --ifconfig
參數主要用於測試。如果指定該參數,則不會套用 /etc/wicked/ifconfig
中定義的預設組態來源。
ifcfg-*
檔案包含啟動模式和 IP 位址等資訊。可以使用的參數請參閱 ifup
的手冊頁。此外,如果一個一般設定只能用於一個介面,則檔案 dhcp
和 wireless
中的大多數變數在 ifcfg-*
檔案中都可以使用。但是,/etc/sysconfig/network/config
中的大多數變數是全域變數,在 ifcfg
檔案中無法覆寫它們。例如,NETCONFIG_*
變數就是全域變數。
若要設定 macvlan
和 macvtab
介面,請參閱 ifcfg-macvlan
和 ifcfg-macvtap
手冊頁。例如,對於 macvlan 介面,請提供使用以下設定的 ifcfg-macvlan0
:
STARTMODE='auto' MACVLAN_DEVICE='eth0' #MACVLAN_MODE='vepa' #LLADDR=02:03:04:05:06:aa
如需 ifcfg.template
,請參閱 第 23.5.2.6 節 「/etc/sysconfig/network/config
, /etc/sysconfig/network/dhcp
, 和 /etc/sysconfig/network/wireless
」。
IBM Z
IBM Z 不支援 USB。介面檔案的名稱和網路別名包含 IBM Z 特定的元素,例如 qeth
。
23.5.2.6 /etc/sysconfig/network/config
, /etc/sysconfig/network/dhcp
, 和 /etc/sysconfig/network/wireless
#
檔案 config
包含 ifup
、ifdown
和 ifstatus
行為的一般設定。dhcp
包含 DHCP 設定,wireless
包含無線 LAN 卡的設定。所有三個組態檔中的變數都已被註解。/etc/sysconfig/network/config
中的一些變數也可以在 ifcfg-*
檔案中使用,而且在這些檔案中它們的優先程度更高。/etc/sysconfig/network/ifcfg.template
檔案列出了可以依介面指定的變數。但是,/etc/sysconfig/network/config
中的大多數變數是全域變數,在 ifcfg-files 中無法覆寫它們。例如,NETWORKMANAGER
或 NETCONFIG_*
變數就是全域變數。
在 SUSE Linux Enterprise 11 中,即使是在未正確設定 IPv6 路由器廣播 (RA) 的網路中,DHCPv6 一向也能正常運作。從 SUSE Linux Enterprise 12 開始,DHCPv6 要求網路中至少有一個路由器發出 RA,用於指示由 DHCPv6 管理此網路。
對於無法在其中正確設定路由器的網路,使用者可以透過在 ifcfg
檔案中指定 DHCLIENT6_MODE='managed'
,使用 ifcfg
選項來覆寫此行為。您也可以在安裝系統中使用開機參數來實現這種解決方案:
ifcfg=eth0=dhcp6,DHCLIENT6_MODE=managed
23.5.2.7 /etc/sysconfig/network/routes
和 /etc/sysconfig/network/ifroute-*
#
TCP/IP 封包的靜態路由是由 /etc/sysconfig/network/routes
和 /etc/sysconfig/network/ifroute-*
檔案確定的。可以在 /etc/sysconfig/network/routes
中指定各種系統任務所需的所有靜態路由:到主機的路由、透過閘道到主機的路由以及到網路的路由。對於需要個別路由的每個介面,請定義另一個組態檔案:/etc/sysconfig/network/ifroute-*
。以介面名稱取代萬用字元 (*
)。在路由組態檔中的項目看起來就像這樣:
# Destination Gateway Netmask Interface Options
路由的目的地是在第一欄。此欄可能包含網路或主機的 IP 位址,這是指可到達的名稱伺服器、完整合格的網路或主機名稱。應該以 CIDR 表示法 (地址加上關聯的路由字首長度) 寫入網路,例如 10.10.0.0/16 (對於 IPv4 路由) 或 fc00::/7 (對於 IPv6 路由)。關鍵字 default
表示該路由是與閘道位於相同位址系列中的預設閘道。對於沒有閘道的裝置,請使用明確的 0.0.0.0/0 或 ::/0 目的地。
第二欄包含預設的閘道或是可以存取主機或網路的閘道。
第三欄已廢棄;該欄用於包含目的地的 IPv4 網路遮罩。對於 IPv6 路由、預設路由,或者如果在第一欄中使用了字首長度 (CIDR 表示法),請在此處輸入破折號 (-
)。
第四欄包含介面名稱。如果使用破折號 (-
) 將它保保留空白,可能會導致 /etc/sysconfig/network/routes
出現非預期的行為。如需詳細資訊,請參閱 routes
的手冊頁。
第五欄 (選擇性) 可用於指定特殊選項。如需詳細資訊,請參閱 routes
的手冊頁。
# --- IPv4 routes in CIDR prefix notation: # Destination [Gateway] - Interface 127.0.0.0/8 - - lo 204.127.235.0/24 - - eth0 default 204.127.235.41 - eth0 207.68.156.51/32 207.68.145.45 - eth1 192.168.0.0/16 207.68.156.51 - eth1 # --- IPv4 routes in deprecated netmask notation" # Destination [Dummy/Gateway] Netmask Interface # 127.0.0.0 0.0.0.0 255.255.255.0 lo 204.127.235.0 0.0.0.0 255.255.255.0 eth0 default 204.127.235.41 0.0.0.0 eth0 207.68.156.51 207.68.145.45 255.255.255.255 eth1 192.168.0.0 207.68.156.51 255.255.0.0 eth1 # --- IPv6 routes are always using CIDR notation: # Destination [Gateway] - Interface 2001:DB8:100::/64 - - eth0 2001:DB8:100::/32 fe80::216:3eff:fe6d:c042 - eth0
23.5.2.8 /var/run/netconfig/resolv.conf
#
主機所屬的網域在 /var/run/netconfig/resolv.conf
中指定 (關鍵字 search
)。使用 search
選項最多可以指定六個網域,總共 256 個字元。解析不完整的名稱時,會嘗試附加個別 search
項目產生一個名稱。使用 nameserver
選項最多可以指定三個名稱伺服器,一行指定一個。備註前面標有井號或分號 (#
或 ;
)。如需取得範例說明,請參閱範例 23.6 「/var/run/netconfig/resolv.conf
」。
但是,您不應手動編輯 /etc/resolv.conf
。此檔案由 netconfig
程序檔產生,是 /run/netconfig/resolv.conf
的符號連結。若要定義靜態 DNS 組態而不使用 YaST,請手動編輯 /etc/sysconfig/network/config
檔案中的適當變數:
NETCONFIG_DNS_STATIC_SEARCHLIST
用於主機名稱查詢的 DNS 網域名稱清單
NETCONFIG_DNS_STATIC_SERVERS
用於主機名稱查詢的名稱伺服器 IP 位址清單
NETCONFIG_DNS_FORWARDER
需要設定的 DNS 轉遞者名稱,例如
bind
或resolver
NETCONFIG_DNS_RESOLVER_OPTIONS
將寫入
/var/run/netconfig/resolv.conf
的任意選項,例如:debug attempts:1 timeout:10
如需詳細資訊,請參閱
resolv.conf
的手冊頁。NETCONFIG_DNS_RESOLVER_SORTLIST
最多 10 個項目的清單,例如:
130.155.160.0/255.255.240.0 130.155.0.0
如需詳細資訊,請參閱
resolv.conf
的手冊頁。
若要使用 netconfig 停用 DNS 組態,請設定 NETCONFIG_DNS_POLICY=''
。如需 netconfig
的詳細資訊,請參閱 netconfig(8)
手冊頁 (man 8 netconfig
)。
/var/run/netconfig/resolv.conf
## Our domain search example.com # # We use dns.example.com (192.168.1.116) as nameserver nameserver 192.168.1.116
23.5.2.9 /sbin/netconfig
#
netconfig
是一個模組化工具,用於管理其他網路組態設定。它根據預先定義的規則,將靜態定義的設定與自動組態機制 (如 DHCP 或 PPP) 提供的設定進行合併。透過呼叫負責修改組態檔案和重新啟動服務或類似動作的 netconfig 模組,將必要的變更套用至系統。
netconfig
可以辨識三個主要動作。DHCP 或 PPP 等精靈使用 netconfig modify
與 netconfig remove
指令提供或移除 netconfig 的設定。使用者僅可使用 netconfig update
指令︰
modify
netconfig modify
指令會修改目前的介面和服務特定的動態設定,並更新網路組態。Netconfig 會從標準輸入或從使用--lease-file FILENAME
選項指定的檔案中讀取設定,並將其儲存於內部,直至系統重新開機 (或者執行下一個修改或刪除動作) 為止。系統會覆寫同一個介面與服務組合的現有設定。該介面由-i INTERFACE_NAME
參數指定。該服務由-s SERVICE_NAME
參數指定。remove
netconfig remove
指令為指定介面和服務組合移除由編輯動作提供的動態設定,並更新網路組態。該介面由-i INTERFACE_NAME
參數指定。該服務由-s SERVICE_NAME
參數指定。update
netconfig update
指令會使用目前的設定更新網路組態。當規則或靜態組態變更時可以使用此指令。如果只想更新指定的服務 (dns
、nis
或ntp
),請使用-m MODULE_TYPE
參數。
netconfig 規則和靜態組態設定可透過手動方式定義,或使用 YaST 在 /etc/sysconfig/network/config
檔案中定義。自動組態工具 (如 DHCP 或 PPP) 提供的動態組態設定經由這些工具,透過 netconfig
modify
和 netconfig remove
動作直接傳送。NetworkManager 啟用時,netconfig (在 auto
規則模式中) 只會使用 NetworkManager 設定,而忽略使用傳統 ifup 方法設定的任何其他介面的設定。如果 NetworkManager 未提供任何設定,則使用靜態設定做為備用設定。系統不支援同時使用 NetworkManager 與 wicked
方法。
如需 netconfig
的詳細資訊,請參閱 man 8
netconfig
。
23.5.2.10 /etc/hosts
#
在此檔案中 (請參閱範例 23.7 「/etc/hosts
」),將為主機名稱指定 IP 位址。如果沒有執行任何名稱伺服器,將使用此 IP 連接設定的所有主機將列示於此。對於每個主機,請在檔案中輸入一行資訊,其中包含 IP 位址、完全合格的主機名稱及主機名稱。IP 位址必須在行的開頭,然後以空格和定位點分隔這些項目。備註前面一律標有 #
符號。
/etc/hosts
#127.0.0.1 localhost 192.168.2.100 jupiter.example.com jupiter 192.168.2.101 venus.example.com venus
23.5.2.11 /etc/networks
#
在此檔中,網路名稱會轉換為網路位址。格式與 hosts
檔案格式相似,但是網路名稱在位址前面。請參閱 範例 23.8 「/etc/networks
」。
/etc/networks
#loopback 127.0.0.0 localnet 192.168.0.0
23.5.2.12 /etc/host.conf
#
名稱解析--透過解析器庫分析主機和網路的名稱--由此檔案收集。該檔案僅用於與 libc4 或 libc5 連結的程式。對於目前的 glibc 程式,請參閱 /etc/nsswitch.conf
中的設定。每個參數都必須單獨佔用一行。備註前面標有 #
符號。表格 23.2 「/etc/host.conf 的參數」 顯示了可用的參數。/etc/host.conf
範例是顯示在 範例 23.9 「/etc/host.conf
」。
order hosts, bind |
指定針對名稱解析存取服務的順序。可用的引數有 (以空格或逗號分隔): |
hosts:搜尋 | |
bind:存取名稱伺服器 | |
nis:使用 NIS | |
multi on/off |
定義 |
nospoof on spoofalert on/off |
這些參數會影響名稱伺服器 spoofing,但並不會對網路組態產生任何影響。 |
trim domainname |
在主機名稱解析後,指定的網域名稱會與主機名稱分隔開來 (前提是主機名稱包括網域名稱)。只有在本地網域分隔出來的名稱包含在 |
/etc/host.conf
## We have named running order hosts bind # Allow multiple address multi on
23.5.2.13 /etc/nsswitch.conf
#
GNU C Library 2.0 的介紹隨附於名稱服務切換 (NSS,Name Service Switch) 的介紹。如需詳細資料,請參閱 nsswitch.conf(5)
手冊頁和《GNU C 庫參考手冊》。
查詢的順序在檔案 /etc/nsswitch.conf
中定義。nsswitch.conf
範例是顯示在 範例 23.10 「/etc/nsswitch.conf
」。備註前面標有 #
符號。在此範例中,hosts
資料庫下的項目表示透過 DNS (請參閱第 39 章 「網域名稱系統」) 將申請傳送到 /etc/hosts
(files
)。
/etc/nsswitch.conf
#passwd: compat group: compat hosts: files dns networks: files dns services: db files protocols: db files rpc: files ethers: files netmasks: files netgroup: files nis publickey: files bootparams: files automount: files nis aliases: files nis shadow: compat
NSS 上可用的「資料庫」列示於 表格 23.3 「透過 /etc/nsswitch.conf 可用的資料庫」。表格 23.4 「NSS「資料庫」的組態選項」中列出了 NSS 資料庫的組態選項。
|
|
|
乙太網路位址。 |
|
網路及其子網路遮罩的清單。當您使用子網路時才需要。 |
|
|
|
|
|
在網路中用於控制存取權限的有效主機和使用者清單,請參閱 |
|
|
|
NFS 及 NIS+ 使用之 Secure_RPC 的公開金鑰和私密金鑰。 |
|
|
|
|
|
|
|
|
|
|
|
直接存取檔案,例如 |
|
透過資料庫存取 |
|
NIS,請參閱Chapter 3, Using NIS |
|
只能做為 |
|
只能做為 |
23.5.2.14 /etc/nscd.conf
#
此檔案用來設定 nscd (名稱服務快取精靈)。請參閱 nscd(8)
和 nscd.conf(5)
手冊頁。依預設,nscd 會快取 passwd
、groups
和 hosts
的系統項目。這對 NIS 與 LDAP 等目錄服務的效能而言十分重要,因為存取名稱、群組或主機都不再需要網路連接。
如果啟用 passwd
的快取,通常需要 15 秒,才能辨識新增的本地使用者。使用以下指令重新啟動 nscd,縮短這段等待時間:
>
sudo
systemctl restart nscd
23.5.2.15 /etc/HOSTNAME
#
/etc/HOSTNAME
包含完全合格的主機名稱 (FQHN)。完全合格的主機名稱是附加網域名稱的主機名稱。此檔案只能包含一行,其中設定了主機名稱。機器開機時會讀取此檔案。
23.5.3 測試組態 #
將組態寫入您的組態檔案之前,可先進行測試。若要設定測試組態,請使用 ip
指令。若要測試連接,請使用 ping
指令。
ip
指令會直接變更網路組態,而不會將其儲存到組態檔案中。除非您將組態輸入正確的組態檔案,否則重新開機之後網路組態的變更就會遺失。
ifconfig
和 route
已過時
ifconfig
和 route
工具已過時。請改用 ip
。例如,ifconfig
會將介面名稱限制為 9 個字元。
23.5.3.1 使用 ip
設定網路介面 #
ip
是一項可顯示及設定網路裝置、路由、規則路由和通道的工具。
ip
是非常複雜的工具。它的常用語法為 ip
OPTIONS
OBJECT
COMMAND
。您可使用下列物件:
- link
此物件代表網路裝置。
- address
此物件代表裝置的 IP 位址。
- neighbor
此物件代表 ARP 或 NDISC 快取項目。
- route
此物件代表路由表格項目。
- rule
此物件代表路由原則資料庫中的規則。
- maddress
此物件代表多點傳播位址。
- mroute
此物件代表多點傳播路由快取項目。
- tunnel
此物件表示 IP 上的通道。
若未提供指令,會使用預設指令 (通常是 list
)。
使用以下指令變更裝置的狀態:
>
sudo
ip link set DEV_NAME
例如,若要停用裝置 eth0,請輸入
>
sudo
ip link set eth0 down
若要再次啟用該裝置,請使用
>
sudo
ip link set eth0 up
如果使用以下指令停用某部裝置
>
sudo
ip link set DEV_NAME down
該指令會在軟體層級停用網路介面。
如果您想要模擬拔下乙太網路纜線或關閉已連接交換器之類的連結丟失,請執行
>
sudo
ip link set DEV_NAME carrier off
例如,ip link set
DEV_NAME down
會丟棄使用 DEV_NAME 的所有路由,而 ip link set DEV carrier
off
則不會。請注意,carrier off
需要網路裝置驅動程式的支援。
若要將裝置再次連接回實體網路,請執行
>
sudo
ip link set DEV_NAME carrier on
啟用裝置之後,就可加以設定。若要設定 IP 位址,請使用
>
sudo
ip addr add IP_ADDRESS + dev DEV_NAME
例如,若要將介面 eth0 的位址設定為帶有標準廣播 (選項 brd
) 的 192.168.12.154/30,請輸入
>
sudo
ip addr add 192.168.12.154/30 brd + dev eth0
若要具備作用中連接,必須設定預設閘道。若要為您的系統設定閘道,請輸入
>
sudo
ip route add default via gateway_ip_address
若要顯示所有裝置,請使用
>
sudo
ip link ls
若要只顯示執行中介面,請使用
>
sudo
ip link ls up
若要輸出裝置的介面統計資料,請輸入
>
sudo
ip -s link ls DEV_NAME
若要檢視其他有用資訊 (特別是有關虛擬網路裝置的資訊),請輸入
>
sudo
ip -d link ls DEV_NAME
另外,若要檢視裝置的網路層 (IPv4、IPv6) 位址,請輸入
>
sudo
ip addr
在輸出中,可以找到有關裝置 MAC 位址的資訊。若要顯示所有路由,請使用
>
sudo
ip route show
如需使用 ip
的詳細資訊,請輸入 ip
help
或參閱 man 8 ip
手冊頁。help
選項也適用於所有 ip
子指令,如:
>
sudo
ip addr help
可在 /usr/share/doc/packages/iproute2/ip-cref.pdf
中找到 ip
手冊。
23.5.3.2 使用 ping 測試連接 #
ping
指令是測試 TCP/IP 連接運作的標準工具。其使用 ICMP 通訊協定,將小型資料封包 ECHO_REQUEST 傳送至目的地主機,要求立即回應。如果成功,ping
將顯示表示這一結果的訊息。這表示網路連結正在作用。
ping
不僅會測試兩台電腦之間能否連接,還會提供一些關於連接品質的基本資訊。您可在 範例 23.11 「指令 ping 的輸出」 中看到 ping
輸出的一些範例。倒數第二行包含送出的封包數、封包遺失率以及執行 ping
總共花費的時間等資訊。
對於目的地,您可以使用主機名稱或 IP 位址,例如 ping
example.com
或 ping
192.168.3.100
。程式會持續傳送封包,直到您按下 Ctrl– C 為止。
如果只需要檢查連接功能,則可使用 -c
選項來限制封包數量。例如,若要將 ping 限制為三個封包,請輸入 ping
-c 3 example.com
。
ping -c 3 example.com PING example.com (192.168.3.100) 56(84) bytes of data. 64 bytes from example.com (192.168.3.100): icmp_seq=1 ttl=49 time=188 ms 64 bytes from example.com (192.168.3.100): icmp_seq=2 ttl=49 time=184 ms 64 bytes from example.com (192.168.3.100): icmp_seq=3 ttl=49 time=183 ms --- example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2007ms rtt min/avg/max/mdev = 183.417/185.447/188.259/2.052 ms
兩個封包之間的預設間隔為一秒。ping 提供了選項 -i
來變更間隔。例如,若要將 ping 間隔增加到十秒,請輸入 ping
-i 10 example.com
。
在具備多網路裝置的系統中,透過特定介面位址傳送 ping 非常實用。若要執行此操作,可將 -I
選項與選定裝置名稱配合使用,例如 ping
-I wlan1
example.com
。
如需使用 ping 的更多選項和資訊,請輸入 ping
-h
或參閱 ping (8)
手冊頁。
對於 IPv6 位址,請使用 ping6
指令。請注意,若要 ping 連結-本地位址,必須使用 -I
指定介面。如果該位址可透過 eth1
存取,則可以使用以下指令實現目的:
ping6 -I eth1 fe80::117:21ff:feda:a425
23.5.4 單元檔案和啟動程序檔 #
除了上述的組態檔案之外,還有一些在機器開機時載入網路服務的 systemd 單元檔案和各種程序檔。當系統切換為 multi-user.target
目標時,會啟動這些單元檔案和程序檔。網路程式的一些單元檔案和啟動程序檔中介紹了一些單元檔案和程序檔。如需 systemd
的詳細資訊,請參閱第 19 章 「systemd
精靈」;如需 systemd
目標的詳細資訊,請參閱 systemd.special
的手冊頁 (man
systemd.special
)。
network.target
network.target
是網路的 systemd 目標,但其具體含義取決於系統管理員提供的設定。如需詳細資訊,請參閱 http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/。
multi-user.target
multi-user.target
是包含所有必需網路服務的多使用者系統的 systemd 目標。rpcbind
啟動可將 RPC 程式號碼轉換為通用位址的 rpcbind 公用程式。NFS 伺服器等 RPC 服務需要用到。
ypserv
啟動 NIS 伺服器。
ypbind
啟動 NIS 用戶端。
/etc/init.d/nfsserver
啟動 NFS 伺服器。
/etc/init.d/postfix
控制後置程序。
23.6 路由器基本設定 #
路由器是一種網路裝置,可接收和傳送往來於多個網路的資料 (網路封包)。路由器常用於將本地網路連接至遠端網路 (網際網路) 或連接多個本地網路區段。透過 SUSE Linux Enterprise Server,您可以建構一個具備 NAT (網路位址翻譯) 或進階防火牆等功能的路由器。
下面是將 SUSE Linux Enterprise Server 轉變為路由器的基本步驟。
啟用轉遞,例如在
/etc/sysctl.d/50-router.conf
中啟用net.ipv4.conf.all.forwarding = 1 net.ipv6.conf.all.forwarding = 1
然後,為介面提供靜態 IPv4 與 IPv6 IP 設定。啟用轉遞會停用多項機制,例如 IPv6 不再接受 IPv6 RA (路由器廣播),這也會妨礙建立預設路由器。
許多情況下 (例如,當您可以透過多個介面連接同一個網路,或者通常使用的是 VPN 且已位於「正常的多宿主主機」上時),必須停用 IPv4 逆向路徑過濾 (此功能目前不適用於 IPv6):
net.ipv4.conf.all.rp_filter = 0
不過,您還可以改用防火牆設定進行過濾。
若要接受來自路由器 (位於外部、上行或 ISP 介面) 的 IPv6 RA,並再次建立預設 (亦或更具特定性) 的 IPv6 路由,請設定:
net.ipv6.conf.${ifname}.accept_ra = 2 net.ipv6.conf.${ifname}.autoconf = 0
(注意:在以點分隔的 sysfs 路徑中,「
eth0.42
」需寫成eth0/42
。)
如需更多路由器行為和轉遞相依項的資訊,請造訪 https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt。
若要在內部 (DMZ) 介面上提供 IPv6,並將您自己宣告為 IPv6 路由器,同時為用戶端「自動設定網路」,請安裝 radvd
並在 /etc/radvd.conf
中對其進行設定,例如:
interface eth0 { IgnoreIfMissing on; # do not fail if interface missed AdvSendAdvert on; # enable sending RAs AdvManagedFlag on; # IPv6 addresses managed via DHCPv6 AdvOtherConfigFlag on; # DNS, NTP... only via DHCPv6 AdvDefaultLifetime 3600; # client default route lifetime of 1 hour prefix 2001:db8:0:1::/64 # (/64 is default and required for autoconf) { AdvAutonomous off; # Disable address autoconf (DHCPv6 only) AdvValidLifetime 3600; # prefix (autoconf addr) is valid 1 h AdvPreferredLifetime 1800; # prefix (autoconf addr) is preferred 1/2 h } }
設定防火牆,以透過 NAT 偽裝從 LAN 進入 WAN 的流量,並在 WAN 介面上阻擋內傳流量:
>
sudo
firewall-cmd
--permanent --zone=external --change-interface=WAN_INTERFACE>
sudo
firewall-cmd
--permanent --zone=external --add-masquerade>
sudo
firewall-cmd
--permanent --zone=internal --change-interface=LAN_INTERFACE>
sudo
firewall-cmd
--reload
23.7 設定結合裝置 #
對於某些系統而言,實作的網路連接除了需要符合一般乙太網路裝置的標準資料安全性或可用性要求之外,還需要符合其他要求。在這些情況下,數個乙太網路裝置可以結集成單個 Bonding 裝置。
bonding 裝置的組態是透過 bonding 模組選項來設定,而其行為主要受 Bonding 裝置的模式影響。該模式預設為 active-backup
,這表示如果使用中的連接埠發生故障,另一個結合連接埠將變成使用中連接埠。可以使用以下結合模式:
- (balance-rr)
封包依次透過第一個到最後一個可用介面傳輸。提供容錯和負載平衡。
- (active-backup)
只有一個網路介面處於使用中狀態。如果它失敗,另一個介面將變成使用中狀態。此設定是 SUSE Linux Enterprise Server 的預設設定。提供容錯。
- (balance-xor)
流量會根據結合中包含的裝置數量在所有可用介面間拆分。這需要交換器的支援。提供容錯和負載平衡。
- (broadcast)
在所有介面上廣播所有流量。需要交換器的支援。提供容錯。
- (802.3ad)
將介面聚合成共用相同速度和雙工設定的群組。需要介面驅動程式中的
ethtool
支援,以及支援 IEEE 802.3ad 動態鏈結聚合並進行了相應設定的交換器。提供容錯和負載平衡。- (balance-tlb)
調適性傳輸負載平衡。需要介面驅動程式中的
ethtool
支援,但不需要交換器支援。提供容錯和負載平衡。- (balance-alb)
調適性負載平衡。需要介面驅動程式中的
ethtool
支援,但不需要交換器支援。提供容錯和負載平衡。
如需各種模式的詳細描述,請參閱 https://www.kernel.org/doc/Documentation/networking/bonding.txt。
Bonding 裝置僅適用於具有多個實際網路卡的機器。在大多數組態中,這表示您只應該在 Dom0 中使用結合組態。此外,只有在您將多個網路卡指定給 VM 客體系統的情況下,在 VM 客體中設定結合才有用。
tlb/alb 結合組態與 Power 韌體之間存在衝突。簡言之,處於 tlb/alb 模式的結合驅動程式會傳送同時包含來源與目的地 MAC 位址 (列做虛擬乙太網路 MAC 位址) 的乙太網路迴路封包。Power 韌體不支援這些封包。因此,ibmveth 不支援結合模式 5 和 6。
若要設定 bonding 裝置,請執行以下程序:
23.7.1 結合連接埠的熱插拔 #
在特定網路環境 (如高可用性) 中,有時需要以另一個結合連接埠介面取代目前的介面。原因可能在於網路裝置不斷發生故障。解決方案是設定結合連接埠的熱插拔。
請依一般方式設定 Bond (根據 man 5
ifcfg-bonding
),例如:
ifcfg-bond0 STARTMODE='auto' # or 'onboot' BOOTPROTO='static' IPADDR='192.168.0.1/24' BONDING_MASTER='yes' BONDING_SLAVE_0='eth0' BONDING_SLAVE_1='eth1' BONDING_MODULE_OPTS='mode=active-backup miimon=100'
使用 STARTMODE=hotplug
和 BOOTPROTO=none
可指定結合連接埠:
ifcfg-eth0 STARTMODE='hotplug' BOOTPROTO='none' ifcfg-eth1 STARTMODE='hotplug' BOOTPROTO='none'
BOOTPROTO=none
使用 ethtool
選項 (如果提供),但不會在 ifup
eth0
上設定連結,這是因為結合連接埠介面由結合裝置控制。
STARTMODE=hotplug
會使結合連接埠介面在可用時自動加入結合。
需要變更 /etc/udev/rules.d/70-persistent-net.rules
中的 udev
規則,以便依匯流排 ID (udev KERNELS
關鍵字等同於 hwinfo
--netcard
中的「SysFS BusID」) 比對裝置,而不是依 MAC 位址比對。這樣將允許更換有缺陷的硬體 (位於同一插槽但 MAC 不同的網路卡),並避免在結合變更其所有結合連接埠的 MAC 位址時出現混淆。
例如:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:00:19.0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
在開機時,systemd network.service
不會等待熱插拔結合連接埠就緒,而是等待結合就緒,後者至少需要有一個結合連接埠可用。當從系統中移除一個結合連接埠介面 (從 NIC 驅動程式解除結合、執行 NIC 驅動程式的 rmmod
指令,或真正移除 PCI 熱插拔) 時,核心會自動將其從結合中移除。當新增新網路卡至系統 (更換插槽中的硬體) 時,udev
會使用基於匯流排的永久命名規則將其重新命名為結合連接埠的名稱,並為其呼叫 ifup
。呼叫 ifup
會自動將新卡加入結合。
23.8 設定用於網路組合的組合裝置 #
「連結彙總」一詞是描述結合 (或聚合) 網路連接以提供邏輯層的一般性詞彙。有時,您會看到「通道組合」、「乙太網路結合」、「連接埠截斷」等詞彙,它們是同義詞,指的是同一個概念。
這一概念便是廣為人知的「結合」,並且最初整合於 Linux 核心之內 (請參閱第 23.7 節 「設定結合裝置」瞭解其原始實作)。網路組合一詞指的是這一概念的新型實作。
結合與網路組合的主要不同之處在於,組合提供的是一組小型核心模組,它們負責為 teamd 例項提供介面。其餘所有操作都在使用者空間內處理。這與原始的結合實作不同,原始的結合實作單獨在其核心內包含了其所有功能。如需兩者的比較,請參閱表格 23.5 「結合與組合的功能比較」。
特性 | 結合 | 組合 |
---|---|---|
廣播、輪替 TX 規則 | 是 | 是 |
使用中備份 TX 規則 | 是 | 是 |
LACP (802.3ad) 支援 | 是 | 是 |
以雜湊為基礎的 TX 規則 | 是 | 是 |
使用者可以設定雜湊函數 | 否 | 是 |
TX 負載平衡支援 (TLB) | 是 | 是 |
針對 LACP 的 TX 負載平衡支援 | 否 | 是 |
Ethtool 連結監控 | 是 | 是 |
ARP 連結監控 | 是 | 是 |
NS/NA (IPV6) 連結監控 | 否 | 是 |
針對 TX/RX 路徑的 RCU 鎖定 | 否 | 是 |
連接埠優先程度和粘性 | 否 | 是 |
單獨的依連接埠連結監控設定 | 否 | 是 |
多連結監控設定 | 受限制 | 是 |
VLAN 支援 | 是 | 是 |
多裝置堆疊 | 是 | 是 |
來源:http://libteam.org/files/teamdev.pp.pdf |
結合與網路組合兩種實作可以同時使用。網路組合是現有結合實作的一個備用方案。它不會取代結合。
網路組合可用於多種用途。下文中將介紹兩種最重要的用途,分別是:
實現不同網路裝置之間的負載平衡。
當其中一個網路裝置出現故障時,容錯移轉至另一個裝置。
目前還沒有支援建立組合裝置的 YaST 模組。您需要手動設定網路組合。一般程序如下所示,該程序適用於所有網路組合組態:
確定您已安裝所有必要的套件。安裝 libteam-tools、libteamdctl0 和 python-libteam 套件。
在
/etc/sysconfig/network/
下建立一個組態檔案,通常為ifcfg-team0
。如果需要多部網路組合裝置,請為它們加上數字並依次遞增。此組態檔案包含數個變數,手冊頁中有相關說明 (請參閱
man ifcfg
和man ifcfg-team
)。系統內的/etc/sysconfig/network/ifcfg.template
檔案中提供了範例組態。移除將用於組合裝置的介面的組態檔案 (通常為
ifcfg-eth0
和ifcfg-eth1
)。建議製做一個備份並移除兩個檔案。Wicked 將重新建立這些組態檔案,並收入適用於組合的必要參數。
(選擇性) 檢查 Wicked 組態檔案中是否已包含所需的一切內容。
>
sudo
wicked show-config
啟動網路組合裝置
team0
:>
sudo
wicked ifup all team0
如果您需要其他除錯資訊,請在
all
子指令後面使用--debug all
選項。檢查網路組合裝置的狀態。此動作可藉由下列指令來完成:
從 Wicked 取得 teamd 實例的狀態:
>
sudo
wicked ifstatus --verbose team0
取得整個實例的狀態:
>
sudo
teamdctl team0 state
取得 teamd 實例的 systemd 狀態:
>
sudo
systemctl status teamd@team0
三者顯示的視圖依您的需求而定,略有不同。
如果日後需要變更
ifcfg-team0
檔案中的內容,請使用以下指令重新載入其組態:>
sudo
wicked ifreload team0
不要使用 systemctl
來啟動或停止組合裝置!而應使用 wicked
指令,如上所述。
若要徹底移除組合裝置,請執行以下程序:
停止網路組合裝置
team0
:>
sudo
wicked ifdown team0
將檔案
/etc/sysconfig/network/ifcfg-team0
重新命名為/etc/sysconfig/network/.ifcfg-team0
。在檔案名稱前面插入一個點,以使 wicked「看不到」它。如果您確實不再需要該組態,也可以移除該檔案。重新載入組態:
>
sudo
wicked ifreload all
23.8.1 使用案例:網路組合的負載平衡 #
負載平衡用於提升頻寬。使用下面的組態檔案可建立具有負載平衡能力的網路組合裝置。繼續執行程序 23.1 「一般程序」中的步驟以設定裝置。使用 teamdctl
檢查輸出。
STARTMODE=auto 1 BOOTPROTO=static 2 IPADDRESS="192.168.1.1/24" 2 IPADDR6="fd00:deca:fbad:50::1/64" 2 TEAM_RUNNER="loadbalance" 3 TEAM_LB_TX_HASH="ipv4,ipv6,eth,vlan" TEAM_LB_TX_BALANCER_NAME="basic" TEAM_LB_TX_BALANCER_INTERVAL="100" TEAM_PORT_DEVICE_0="eth0" 4 TEAM_PORT_DEVICE_1="eth1" 4 TEAM_LW_NAME="ethtool" 5 TEAM_LW_ETHTOOL_DELAY_UP="10" 6 TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6
控制組合裝置的啟動。
如果您需要自行控制裝置 (並防止其自動啟動),請將 | |
設定靜態 IP 位址 (此處對於 IPv4 指定
如果網路組合裝置應該使用動態 IP 位址,請設定 | |
將 | |
指定應聚合以建立網路組合裝置的一或多部裝置。 | |
定義連結監控器以監控從屬裝置的狀態。使用預設值
如果您需要進一步確信連接的可用性,請使用 | |
以毫秒為單位定義連結建立 (或斷開) 與執行器收到通知之間的延遲。 |
23.8.2 使用案例:使用網路組合實現容錯移轉 #
容錯移轉引入了一個平行的備份網路裝置,用於確保關鍵網路組合裝置的高可用性。備份網路裝置將全天候執行,並在主要裝置出現故障時接管其工作。
使用以下組態檔案可以建立具有容錯移轉功能的網路組合裝置。繼續執行程序 23.1 「一般程序」中的步驟以設定裝置。使用 teamdctl
檢查輸出。
STARTMODE=auto 1 BOOTPROTO=static 2 IPADDR="192.168.1.2/24" 2 IPADDR6="fd00:deca:fbad:50::2/64" 2 TEAM_RUNNER=activebackup 3 TEAM_PORT_DEVICE_0="eth0" 4 TEAM_PORT_DEVICE_1="eth1" 4 TEAM_LW_NAME=ethtool 5 TEAM_LW_ETHTOOL_DELAY_UP="10" 6 TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6
控制組合裝置的啟動。
如果您需要自行控制裝置 (並防止其自動啟動),請將 | |
設定靜態 IP 位址 (此處對於 IPv4 指定
如果網路組合裝置應該使用動態 IP 位址,請設定 | |
將 | |
指定應聚合以建立網路組合裝置的一或多部裝置。 | |
定義連結監控器以監控從屬裝置的狀態。使用預設值
如果您需要進一步確信連接的可用性,請使用 | |
以毫秒為單位定義連結建立 (或斷開) 與執行器收到通知之間的延遲。 |
23.8.3 使用案例:組合裝置上的 VLAN #
VLAN 是虛擬區域網路 (Virtual Local Area Network) 的縮寫。它允許在單個實體乙太網路上執行多個邏輯 (虛擬) 乙太網路。會在邏輯上將網路分割成不同的廣播網域,以便封包只可在為同一 VLAN 指定的連接埠之間進行交換。
下面的使用案例會在組合裝置的基礎上建立兩個靜態 VLAN:
vlan0
,結合到 IP 位址192.168.10.1
vlan1
,結合到 IP 位址192.168.20.1
請執行下列步驟:
在交換器上啟用 VLAN 標記。若要針對組合裝置使用負載平衡,交換器需要支援連結聚合控制通訊協定 (LACP) (802.3ad)。如需詳細資料,請參閱硬體手冊。
確定是否要針對組合裝置使用負載平衡或容錯移轉。依第 23.8.1 節 「使用案例:網路組合的負載平衡」或第 23.8.2 節 「使用案例:使用網路組合實現容錯移轉」所述設定組合裝置。
在
/etc/sysconfig/network
中,建立包含以下內容的ifcfg-vlan0
檔案:STARTMODE="auto" BOOTPROTO="static" 1 IPADDR='192.168.10.1/24' 2 ETHERDEVICE="team0" 3 VLAN_ID="0" 4 VLAN='yes'
將
/etc/sysconfig/network/ifcfg-vlan0
檔案複製到/etc/sysconfig/network/ifcfg-vlan1
,並變更以下值:將
IPADDR
從192.168.10.1/24
變更為192.168.20.1/24
。將
VLAN_ID
從0
變更為1
。
啟動兩個 VLAN:
#
wicked
ifup vlan0 vlan1檢查
ifconfig
的輸出:#
ifconfig
-a [...] vlan0 Link encap:Ethernet HWaddr 08:00:27:DC:43:98 inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:816 (816.0 b) vlan1 Link encap:Ethernet HWaddr 08:00:27:DC:43:98 inet addr:192.168.20.1 Bcast:192.168.20.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:816 (816.0 b)
23.9 使用 Open vSwitch 的軟體定義的網路 #
軟體定義網路 (SDN) 表示控制流量傳送目標的系統 (控制平面) 與轉遞流量至所選目的地的基礎系統 (資料平面,也稱為轉遞平面) 區分開來。這表示之前由單個而且往往不太靈活的交換器執行的功能,現在可以分給交換器 (資料平面) 及其控制器 (控制平面) 共同執行。在此模式下,可以對控制器編寫程式,使其變得非常靈活,而且可以快速適應不斷變化的網路條件。
Open vSwitch 是實作與 OpenFlow 通訊協定相容的分散式虛擬多層交換器的軟體。OpenFlow 允許控制器應用程式修改交換器的組態。它會分層至 TCP 通訊協定,並對一定範圍的軟體和硬體實作。於是,單個控制器便可以驅動多個大相逕庭的交換器。
23.9.1 Open vSwitch 的優勢 #
使用 Open vSwitch 的軟體定義網路有多項優勢,尤其是與虛擬機器配合使用時:
可以輕鬆識別網路狀態。
網路及其即時狀態可以從一個主機移動至另一個主機。
可以追蹤網路動態,並啟用外部軟體對它們進行回應。
可以套用並處理網路封包中的標記以識別它們的來源或目標機器,並維護其他網路位置。可以設定及移轉標記規則。
Open vSwitch 會實作 GRE 通訊協定 (泛型路由封裝)。有了這點,舉例而言,您便可以將私人 VM 網路彼此相連。
Open vSwitch 可以單獨使用,不過其設計是與網路硬體整合,可用於控制硬體交換器。
23.9.2 安裝 Open vSwitch #
安裝 Open vSwitch 及補充套件:
#
zypper
install openvswitch openvswitch-switch如果您想讓 Open vSwitch 與 KVM 監管程式配合使用,請另外安裝 tunctl。如果您想讓 Open vSwitch 與 Xen 監管程式配合使用,請另外安裝 openvswitch-kmp-xen。
啟用 Open vSwitch 服務:
#
systemctl
enable openvswitch重新啟動電腦或使用
systemctl
立即啟動 Open vSwitch 服務:#
systemctl
start openvswitch若要檢查 Open vSwitch 是否已正確啟動,請使用:
#
systemctl
status openvswitch
23.9.3 Open vSwitch 精靈和公用程式綜覽 #
Open vSwitch 由一些元件組成,其中包括一個核心模組和不同的使用者空間元件。核心模組用於加速資料路徑,但 Open vSwitch 的精簡安裝並不需要該模組。
23.9.3.1 精靈 #
Open vSwitch 的中心可執行檔是其兩個精靈。啟動 openvswitch
服務時,它們也會間接啟動。
Open vSwitch 主要精靈 (ovs-vswitchd
) 提供交換器的實作。Open vSwitch 資料庫精靈 (ovsdb-server
) 為儲存 Open vSwitch 之組態和狀態的資料庫提供服務。
23.9.3.2 公用程式 #
Open vSwitch 還包含一些方便您配合使用的公用程式。以下列出了其中一部分,僅介紹了重要的指令。
ovsdb-tool
建立、升級、壓縮與查詢 Open vSwitch 資料庫。對 Open vSwitch 資料庫執行異動。
ovs-appctl
設定執行中
ovs-vswitchd
或ovsdb-server
精靈。ovs-dpctl
、ovs-dpctl-top
建立、修改、視覺化與刪除資料路徑。使用此工具可能會干擾
ovs-vswitchd
,後者也執行資料路徑管理。因此,它通常僅用於診斷。ovs-dpctl-top
可建立類似於top
的資料路徑視覺效果。ovs-ofctl
管理任何遵守 OpenFlow 通訊協定的交換器。
ovs-ofctl
不僅可以與 Open vSwitch 互動。ovs-vsctl
提供組態資料庫的概覽介面,可用於查詢及修改資料庫。實際上,它會顯示
ovs-vswitchd
的狀態,並可用於其設定。
23.9.4 使用 Open vSwitch 建立橋接器 #
以下範例組態使用 SUSE Linux Enterprise Server 上預設使用的 Wicked 網路服務。若要瞭解 Wicked 的詳細資訊,請參閱第 23.5 節 「手動設定網路連接」。
安裝並啟動 Open vSwitch 後,執行如下操作:
若要設定虛擬機器使用的橋接器,請建立包含如下內容的檔案:
STARTMODE='auto'1 BOOTPROTO='dhcp'2 OVS_BRIDGE='yes'3 OVS_BRIDGE_PORT_DEVICE_1='eth0'4
啟動網路服務時自動設定橋接器。
設定 IP 位址時使用的通訊協定。
將組態標記為 Open vSwitch 橋接器。
選擇應新增至橋接器的一或多部裝置。若要新增多部裝置,請在文件中為每部裝置附加一行:
OVS_BRIDGE_PORT_DEVICE_SUFFIX='DEVICE'
SUFFIX 可以是任何英數字串。不過,為了避免之前的定義被覆寫,請確定每部裝置的 SUFFIX 均唯一。
將檔案儲存到
/etc/sysconfig/network
目錄中,並命名為ifcfg-br0
。您也可以使用除 br0 以外自己喜歡的任何名稱。但檔案名稱必須以ifcfg-
- 開頭。若要瞭解更多選項,請參閱
ifcfg
的手冊頁 (man 5 ifcfg
) 以及ifcfg-ovs-bridge
的手冊頁 (man 5 ifcfg-ovs-bridge
)。現在,啟動橋接器:
#
wicked
ifup br0Wicked 完成後應該會輸出橋接器的名稱及狀態
up
(顯示在名稱的旁邊)。
23.9.5 將 Open vSwitch 直接與 KVM 配合使用 #
如第 23.9.4 節 「使用 Open vSwitch 建立橋接器」中所述建立橋接器後,您便可使用 Open vSwitch 來管理透過 KVM/QEMU 建立的虛擬機器的網路存取。
為了能夠發揮 Wicked 的最大效用,可以對之前設定的橋接器做進一步的變更。開啟先前建立的
/etc/sysconfig/network/ifcfg-br0
,為其他連接埠裝置附加一行:OVS_BRIDGE_PORT_DEVICE_2='tap0'
此外,請將
BOOTPROTO
設定為none
。現在,此檔案的內容形式如下:STARTMODE='auto' BOOTPROTO='none' OVS_BRIDGE='yes' OVS_BRIDGE_PORT_DEVICE_1='eth0' OVS_BRIDGE_PORT_DEVICE_2='tap0'
新的連接埠裝置 tap0 將在下一步中進行設定。
現在,為 tap0 裝置新增組態檔案:
STARTMODE='auto' BOOTPROTO='none' TUNNEL='tap'
將檔案儲存到
/etc/sysconfig/network
目錄中,並命名為ifcfg-tap0
。提示:允許其他使用者存取 Tap 裝置若要透過以非
root
使用者身分啟動的虛擬機器使用此 TAP 裝置,請附加:TUNNEL_SET_OWNER=USER_NAME
若要為整個群組授予存取權,請附加:
TUNNEL_SET_GROUP=GROUP_NAME
最後,開啟定義為第一個
OVS_BRIDGE_PORT_DEVICE
的裝置的組態。如果之前未變更過名稱,應為eth0
。因此,開啟/etc/sysconfig/network/ifcfg-eth0
並確定已設定以下選項:STARTMODE='auto' BOOTPROTO='none'
如果檔案尚不存在,請予以建立。
使用 Wicked 重新啟動橋接器介面:
#
wicked
ifreload br0此操作還會觸發系統重新載入新定義的橋接器連接埠裝置。
若要啟動某虛擬機器,請使用類似如下的內容:
#
qemu-kvm
\ -drive file=/PATH/TO/DISK-IMAGE1 \ -m 512 -net nic,vlan=0,macaddr=00:11:22:EE:EE:EE \ -net tap,ifname=tap0,script=no,downscript=no2如需使用 KVM/QEMU 的更多資訊,請參閱Part V, “Managing virtual machines with QEMU”。
23.9.6 Open vSwitch 與 libvirt
配合使用 #
如第 23.9.4 節 「使用 Open vSwitch 建立橋接器」中所述建立橋接器之後,可以將該橋接器新增至使用 libvirt
進行管理的現有虛擬機器。由於 libvirt
對 Open vSwitch 橋接器提供部份支援,因此您可以直接使用第 23.9.4 節 「使用 Open vSwitch 建立橋接器」中建立的橋接器,無需進一步變更網路組態。
開啟目標虛擬機器的網域 XML 檔案:
#
virsh
edit VM_NAME將 VM_NAME 取代為所需虛擬機器的名稱。預設的文字編輯器即會開啟。
尋找以
<interface type="...">
開頭並以</interface>
結尾的區段,找到文件的網路區段。將現有區段取代為類似如下的網路區段:
<interface type='bridge'> <source bridge='br0'/> <virtualport type='openvswitch'/> </interface>
重要:virsh iface-*
和虛擬機器管理員與 Open vSwitch 的相容性目前,在使用
virsh iface-*
工具和虛擬機器管理員的情況下,Open vSwitch 與libvirt
還不相容。如果您使用此類工具,組態可能會破壞。現在,您可以照常啟動或重新啟動虛擬機器。
如需使用 libvirt
的更多資訊,請參閱Part II, “Managing virtual machines with libvirt
”。
23.9.7 更多資訊 #
如需 SDN 的詳細資訊,請參閱 Open vSwitch 專案網站的文件區段,網址為 https://docs.openvswitch.org/en/latest/#documentation。