在 Linux 環境下,特別是 Debian 和 Ubuntu 系統中,橋接網路的設定已從傳統的 /etc/network/interfaces 檔案編輯方式轉變為使用 Netplan 這類別根據 YAML 的工具。Netplan 簡化了網路設定流程,讓管理者能更輕鬆地設定橋接網路。NetworkManager 則提供圖形化介面,讓不熟悉命令列操作的使用者也能輕鬆設定網路。設定橋接網路後,即可透過 ip a 命令驗證網路設定是否正確。此外,文章也說明瞭如何在 Linux 工作站上啟用新的網路組態,以及如何使用 NetworkManager 建立虛擬橋接網路。
在Debian和Ubuntu桌面系統上設定橋接網路
在過去,透過編輯/etc/network/interfaces檔案,可以在各種不同的Linux系統上手動組態網路。然而,近年來不同發行版之間的差異越來越大,使得手動組態變得更加困難。以最新的Ubuntu桌面系統為例,可以使用Netplan來設定橋接網路。Netplan是一種使用YAML引數來簡化網路組態的方法。與其編輯多個網路組態檔案,不如使用Netplan在一個地方處理所有細節,從而使其更容易修改。
使用NetworkManager設定Linux橋接網路
NetworkManager是一款廣泛可用的Linux桌面實用工具,允許使用者透過圖形介面建立穩定、運作正常的網路。它支援有線和無線LAN連線,並為熟悉Windows或macOS網路工具的人所熟悉。
許多Linux發行版都支援NetworkManager(或預設安裝,如Ubuntu和Debian),因此它是一個不錯的選擇,尤其對於新手。使用者可以透過點選偏好設定或控制台中的網路圖示來啟動NetworkManager GUI。
當使用NetworkManager時,使用者是在圖形介面中進行更改,這些設定會儲存在Linux系統可以理解的組態檔案中(/etc/NetworkManager)。透過使用圖形工具,使用者不需要手動編輯這些檔案。
首先,從系統的主應用程式視窗、面板或終端機輸入nm-connection-editor來開啟NetworkManager GUI。視窗的外觀將類別似於圖2-14中的範例。
圖2-14:NetworkManager主視窗
上述範例包含兩個不同的網路介面,分別對應於Linux工作站連線的兩個子網路:10.128.1.0/24和192.168.1.0/24。在範例中,這些連線分別命名為10-net和192-net;預設情況下,它們可能會顯示為“有線連線1”和“有線連線2”。
網路橋接的工作原理是建立一個新的虛擬網路物件,該物件使用一個或多個實體裝置。在上述範例中,br0橋接使用10-net作為其實體介面來存取網路。
要實作這一點,最簡單的方法是從NetworkManager視窗中刪除計劃用於橋接的乙太網路介面。方法是點選它一次,然後點選視窗底部的-圖示。完成後,點選+圖示並在虛擬裝置列表下選擇Bridge,然後點選Create。這將開啟一個新的視窗,如圖2-15所示。
圖2-15:使用NetworkManager建立虛擬網路橋接的初始視窗
請注意,視窗開啟時位於Bridge標籤頁,預設的連線名稱為Bridge connection 1,介面名稱為bridge0。您可以將這些名稱重新命名為您想要的名稱,但請保持名稱簡單易記,例如bridge0或br0。
# 範例程式碼:組態橋接網路
$ sudo nmcli connection add type bridge con-name br0 ifname br0
$ sudo nmcli connection add type ethernet slave-type bridge con-name eth0 ifname eth0 master br0
內容解密:
- 第一個指令使用
nmcli建立一個名為br0的橋接連線。 - 第二個指令將乙太網路介面
eth0新增為橋接br0的從屬裝置。
在“橋接連線”下的方框是空的,因此您需要在這裡新增一個網路介面。點選“新增”按鈕,從選單中選擇“乙太網”,然後點選“建立”。這將開啟一個新的對話方塊,如圖2-16所示。
圖2-16:為虛擬橋接建立乙太網從屬裝置
再次,NetworkManager為這個新的乙太網介面分配了一個名稱(bridge0 slave 1),但您可以將其更改為您想要的任何名稱。在前面的第一個範例中,這被設定為10-net,以幫助我記住。這個步驟中的關鍵部分是從下拉選單中選擇裝置。請務必選擇適合您的DevOps實驗室網路的正確介面,而不是,例如,第二個192.168.1.0/24網路的介面。完成後,點選“儲存”並傳回主橋接組態視窗。
使用NetworkManager設定網路介面時,您有多種選項來設定IPv4和IPv6地址。大多數Linux系統預設為自動(DHCP)。這對於日常網路連線來說是可以的,但在您的實驗室中,最好為工作站分配靜態地址。
點選主虛擬橋接視窗中的IPv4設定標籤,將方法切換為手動,然後點選“新增”。在地址方框中,輸入您的DevOps實驗室子網中的靜態IP,符合您網路的子網路掩碼(24),以及閘道,如圖2-17所示。請注意,我還增加了我實驗室中的兩個DNS伺服器(10.128.1.2和10.128.1.3)和8.8.8.8用於外部名稱解析。我還增加了devops.lab作為我的搜尋域,這將被附加到我嘗試ping或其他方式僅透過主機名存取的伺服器。
圖2-17:在NetworkManager中為虛擬橋接建立靜態IP地址
您可以選擇性地設定IPv6,但我通常保持不變或將其設定為忽略以停用它。在仔細檢查所有內容後,點選“儲存”按鈕。
在Linux工作站上啟用新網路組態
要在Linux工作站上啟用新的網路組態,可以重新啟動(如果開啟了許多視窗和應用程式,這樣做比較激烈),或者在Linux工作站的面板中右鍵點選NetworkManager圖示並取消選中「Enable networking」。也可以從CLI執行sudo systemctl restart NetworkManager。等待幾分鐘後再檢查。透過執行簡單的CLI命令來驗證網路是否組態正確:
$ ip a
網路介面組態詳解
在上述輸出中,物理介面(例如enp4s0)顯示為UP,但沒有IP地址。這是因為它現在與橋接器(之前命名的br0)連結,而橋接器具有分配給它的地址。
程式碼解析:檢視網路介面狀態
$ ip a
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 18:c0:4d:84:cc:20 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether de:64:d1:c4:02:a3 brd ff:ff:ff:ff:ff:ff
inet 10.128.1.10/24 brd 10.128.1.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::dc64:d1ff:fec4:2a3/64 scope link
valid_lft forever preferred_lft forever
內容解密:
- 物理介面狀態:
enp4s0被顯示為UP,但沒有IP地址,因為它現在是橋接器br0的從屬介面。 - 橋接器組態:
br0具有IP地址10.128.1.10/24,並且被設定為UP狀態。 - 網路設定:橋接器的IPv4地址和IPv6鏈路本地地址被正確組態。
使用Netplan在Ubuntu上設定橋接網路
在Ubuntu工作站上使用Netplan組態網路時,需要編輯預設的Netplan組態檔案/etc/netplan/50-cloud-init.yaml。註解或刪除預設的網路裝置,並新增一個程式碼區塊來定義橋接器。
Netplan組態範例
network:
version: 2
ethernets:
enp4s0:
dhcp4: false
dhcp6: false
bridges:
br0:
interfaces: [enp4s0]
addresses: [10.128.1.199/24]
gateway4: 10.128.1.1
mtu: 1500
nameservers:
addresses: [10.128.1.2, 10.128.1.3, 8.8.8.8]
search: [devops.lab]
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
內容解密:
- 註解原始網路組態:原始的網路組態被註解掉,以移除對物理裝置
enp4s0的地址設定。 - 定義橋接器:新增了橋接器
br0的組態,包括介面、地址、閘道、MTU、DNS伺服器和搜尋域。 - STP和轉發延遲:啟用了STP(生成樹協定)並設定了轉發延遲為4秒。
應用Netplan組態並啟動libvirtd服務
儲存檔案並應用組態,這將套用您的網路設定並啟動libvirtd守護程式:
$ sudo netplan apply
$ sudo systemctl start libvirtd.service
virt-manager操作
使用virt-manager建立您的第一個KVM虛擬機器。啟動virt-manager並連線到本地執行的libvirtd守護程式。建立一個新的虛擬機器,使用現有的.iso檔案,並設定記憶體、CPU和磁碟。確保選擇了先前建立的網路橋接器(例如br0)。
virt-manager步驟詳解:
- 啟動virt-manager:開啟virt-manager並連線到QEMU/KVM。
- 建立新虛擬機器:點選「File」>「New Virtual Machine」或黃色閃電圖示。
- 選擇安裝媒體:選擇本地安裝媒體(例如Ubuntu、AlmaLinux等的.iso檔案)。
- 設定虛擬機器引數:設定記憶體、CPU和磁碟大小。
- 選擇網路橋接器:在網路選擇中,選擇先前建立的橋接器(例如
br0)。
命令列佈署虛擬機器
Proxmox 和 KVM 的一大優勢是能夠從命令列建立和佈署虛擬機器,這使得您能夠自動化佈署系統,而無需經過 GUI 的繁瑣步驟。GUI 工具非常好,但命令列任務可以大大加快和自動化流程,以可重複的方式進行。
Proxmox 的 qm 命令
要在 Proxmox 中從命令列建立虛擬機器,請登入您的 Proxmox VE 主機並執行清單 2-9 中的命令。
清單 2-9. 從 CLI 建立 Proxmox 虛擬機器的命令
$ qm create 101 \
--cdrom local:iso/openSUSE-Leap-15.0-DVD-x86_64.iso \
--name opensuse \
--net0 virtio,bridge=vmbr0 \
--bootdisk scsi0 \
--ostype 26 \
--memory 2048 \
--onboot no \
--sockets 1
此處,您正在定義虛擬機器的九個引數。設定 ID 101、OS .iso 的磁碟路徑、opensuse 的虛擬機器名稱、網路介面 virtio 且橋接至 vmbr0、啟動磁碟 scsi0、OS 型別(Linux)、記憶體大小 2048、是否在主機啟動時自動啟動虛擬機器、以及 CPU 插槽數量 1。
內容解密:
qm create 101:建立一個新的虛擬機器,ID 為101。--cdrom local:iso/openSUSE-Leap-15.0-DVD-x86_64.iso:指定用於安裝作業系統的 ISO 映像檔。--name opensuse:設定虛擬機器的名稱為opensuse。--net0 virtio,bridge=vmbr0:設定第一個網路介面使用virtio驅動,並橋接至vmbr0網橋。--bootdisk scsi0:指定虛擬機器的啟動磁碟為scsi0。--ostype 26:設定作業系統型別為 Linux(這裡的26代表特定的 Linux 發行版)。--memory 2048:分配2048 MB(即 2 GB)的記憶體給虛擬機器。--onboot no:設定虛擬機器在主機啟動時不自動啟動。--sockets 1:指定虛擬機器的 CPU 插槽數量為1。
KVM 的 virt-install 命令
如果您在工作站上使用純 KVM,則過程類別似。要使用 virt-install 從命令列建立虛擬機器,請執行清單 2-10 中的命令。
清單 2-10. 從 CLI 建立 KVM 虛擬機器的命令
$ virt-install --name=ubuntu \
--vcpus=1 \
--memory=2048 \
--cdrom=/storage1/ubuntu-18.04.4-server-amd64.iso \
--network=bridge:br0 \
--disk size=32 \
--os-variant=ubuntu18.04
同樣,您正在定義虛擬機器的各個引數。設定名稱、vcpus 的數量、記憶體大小、.iso 映像檔、網路橋接、磁碟大小和 OS 型別(Ubuntu)。
內容解密:
--name=ubuntu:設定虛擬機器的名稱為ubuntu。--vcpus=1:分配1個虛擬 CPU 給虛擬機器。--memory=2048:分配2048 MB的記憶體給虛擬機器。--cdrom=/storage1/ubuntu-18.04.4-server-amd64.iso:指定用於安裝的 ISO 映像檔路徑。--network=bridge:br0:將虛擬機器的網路介面橋接至br0網橋。--disk size=32:建立一個大小為32 GB的虛擬磁碟。--os-variant=ubuntu18.04:指定作業系統變體為 Ubuntu 18.04。
本章中,您在工作站上佈署了 Proxmox 和 KVM,以建立 Linux 實驗室的基礎。這些資源將成為您工作的核心,因此請花一些時間探索這些選項,建立一些範例虛擬機器,並測試網路連線。擁有這些基礎系統後,您就可以開始在 Linux 實驗室環境中佈署服務。
設定 DNS 伺服器
在本章中,您將使用新佈署的虛擬化環境建立並啟動第一個有意義的工作負載:網域名稱伺服器(DNS),它可以將 IP 位址對應到易於記憶的名稱,並使生活更加便利。
為什麼 DNS 很重要
在您的私有網路上設定網域與在網際網路上設定公用網域一樣重要。它使您能夠更輕鬆地透過 SSH、HTTP 和無數其他服務埠連線到您的各個伺服器,並且它支援多種需要網域名稱解析而非 IP 位址的服務,例如根據憑證的連線。
DNS 是核心服務。您將一直執行它,並且隨著 Linux 實驗室的成長,您將定期編輯它。在本章中,您將設定基礎環境、建立網域名稱並新增一些名稱和 IP 位址,例如 router.devops.lab、dns01.devops.lab、web01.devops.lab 或 workstation.devops.lab。
規劃您的網路
在佈署 DNS 伺服器之前,請花一點時間思考您的 Linux 實驗室的佈局。這將使過程更加直觀、邏輯和容易,因為您的環境會不斷成長。
在本文中,您將建立幾個特定的伺服器,包括 DNS 伺服器、電子郵件伺服器和網頁伺服器。但這只是個開始。根據您的計劃,您最終可能會佈署十幾個或更多的虛擬機器來執行各種工作負載。其中一些可能包括:
- 資料函式庫伺服器
- Docker 容器主機
- 多個 Kubernetes 主機
- DNS 從伺服器
- Chef Infra Server
- Linux 發行版映象
- GitLab 伺服器
- WordPress 主機
- 其他非虛擬機器,如 Raspberry Pi、工作站和筆記型電腦
正如您所看到的,主機數量可能會迅速增加,因此在開始之前仔細考慮您的網路和網域名稱佈局非常重要。您的每個主機都將擁有自己的靜態 IP 位址和 DNS 名稱,因此考慮如何邏輯地組織所有內容是一個好主意。例如,您可以將單一數字的 IP 位址(10.128.1.2 至 10.128.1.9)分配給 DNS 伺服器、Proxmox 主機和 Linux 映象;將 10.128.1.20-29 分配給網頁伺服器;將 10.128.1.30-39 分配給 Raspberry Pi;將 10.128.1.40-49 分配給筆記型電腦,依此類別推。
網路規劃與DNS伺服器設定
在建立Linux實驗室的過程中,網路規劃是至關重要的一環。正確的網路組態不僅能確保實驗室的穩定執行,也能為未來的擴充套件提供便利。
網路硬體的選擇與限制
首先,我們需要了解可用的網路硬體裝置。對於剛開始建立Linux實驗室的人來說,可能會使用舊的四埠路由器作為私人網路的基礎裝置。這種情況下,初期將受到四個有線主機的限制。若要增加更多主機,就需要利用路由器的WiFi功能或新增額外的交換器。
網路埠的分配
由於每個實體Proxmox伺服器將承載多個虛擬機器,因此建議為每個Proxmox主機和工作站分配一個有線網路埠。這樣可以確保主要的裝置都有穩定的網路連線。剩餘的埠可以用於其他裝置,如備用筆記型電腦或Raspberry Pi。
虛擬機器的網路需求
每個Proxmox主機可以承載多個虛擬機器,這些虛擬機器將擁有各自的靜態IP地址和可路由的主機名稱,如dns01.devops.lab。雖然這些虛擬機器需要靜態IP地址,但不需要佔用實體網路埠。這樣一來,即使物理網路埠數量有限,也可以支援大量的虛擬機器。
多網路組態的考量
如果計劃將每個Proxmox主機連線到私人網路和公共網路,就需要在兩個網路上都分配靜態地址。這需要仔細管理靜態IP地址,以避免網路衝突。為不同的伺服器(無論是實體還是虛擬)分配相同的IP地址將導致網路混亂。
網域名稱的選擇
在設定Linux實驗室時,應避免使用像.com或.net這樣的公開網域名稱字尾。相反地,可以使用非公開路由的網域名稱,如test或lab。這樣可以避免與公共網際網路命名慣例衝突。可以選擇像devops.lab這樣的網域名稱,並為每個主機分配第三級網域名稱,如web01.devops.lab或gitlab.devops.lab。
IP地址的規劃
一旦決定了網域名稱,就可以使用試算表來規劃IP地址的分配。可以為私人網路上的所有實體和虛擬機器保留靜態IP地址。例如:
| IP地址 | 完整網域名稱 | 系統 | 實體 |
|---|---|---|---|
| 10.128.1.1 | router.devops.lab | NETGEAR 路由器 | x |
| 10.128.1.2 | dns01.devops.lab | Ubuntu 22.04 | |
| 10.128.1.3 | dns02.devops.lab | Ubuntu 22.04 | |
| 10.128.1.4 | pve01.devops.lab | Proxmox 7.2 | x |
| 10.128.1.5 | pve02.devops.lab | Proxmox 7.2 | x |
| 10.128.1.10 | workstation.devops.lab | Linux Mint 20.3 | x |
這樣的規劃可以幫助我們清楚地瞭解哪些IP地址已經被使用,哪些仍然可用。
路由器和交換器的組態
對於私人Linux實驗室網路,需要組態一個獨立的路由器和一個管理的或非管理的交換器。可以透過將路由器的空閒埠連線到交換器的空閒埠來增加實體網路埠。同樣地,也可以將交換器新增到公共網路中,以增加更多的埠。
為私人網路新增網際網路存取
將兩個路由器連線在一起比新增交換器到路由器稍微複雜一些。需要在公共路由器(ISP路由器)和私人路由器的WAN埠之間組態靜態IP地址。這樣的組態可以讓私人網路中的裝置存取網際網路。