預設虛擬網路架構
對於虛擬系統來說, 網路架構是否正確, 連線功能是否正常, 是攸關整個虛擬系統能否發揮功能的重要關鍵, 即使是 LXC 核心模組也不例外. 但早期的網路系統, 大多利用網路硬體裝置, 如實體的 Router, Switch 等, 來串接各個網路區段的主機, 或是公司內部網路的連結, 除了建置成本昂貴外, 還需要投入不少人力在維護網路硬體設備的運作. 這對於一般中小企業來說, 若要架設一個公司專屬的私有雲, 在經費與人力上, 都是相當沉重的負擔.
若能利用 Linux 原生的虛擬網路, 就可以達到大部分內部私有雲所需要的網路架構. 這不只可以大大減省網路硬體設備的支出, 更可以利用現有 Linux 系統的管理人員, 直接管控系統與網路的運作, 讓架構公司內部的私有雲, 成為一種可能, 且不管是那一套虛擬系統, 只要是運作在 Linux 系統下, 大多會使用 Linux 原生的虛擬網路架構, 當然 Linux Container 也不例外.
Linux 原生的虛擬網路架構, 其實是由 Linux 系統早已存在的虛擬網路元件所組成. 而這些元件包含了 "TUN/TAP 虛擬網路卡", "虛擬 Bridge", "iptables" 與 "dnsmasq". 各個元件在 Linux 原生虛擬網路架構中, 扮演不同的角色, 且每個元件都可以獨立運作, 也可以互相搭配為我們所需的網路架構.
LXC 虛擬網路橋接器及 TUN/TAP 虛擬網路卡
虛擬網路構成元件中的 "虛擬橋接器", 主要負責連接不同的網路系統, "TUN" 和 "TAP" 是以軟體來模擬虛擬網路卡, 就功能來說, "TUN" 是屬於 OSI 的第三層, 也就是網路層, 主要處理 IP 與 Route 封包的傳遞; 而 "TAB" 則是屬於 OSI 網路通訊協定的第二層, 也就是資料連結層, 主要負責實體網路封包的傳遞, 總結一句話 "TUN/TAP" 就是 Ethernet 虛擬網路卡!
雖然在 Linux 系統內要建立 Bridge 網路連線模式看似有些複雜, 但幸運的是 LXC 核心模組已經將這些繁瑣的步驟一次處理完畢, 只需要裝好 LXC 核心模組, 在 Linux 系統中, 就會產生一個 "虛擬橋接器" 了, 這個橋接器可以透過命令 brctl 檢視:
上圖可以觀察到 "lxcbr0" 這個名稱, 這就是安裝好 LXC 核心模組後所產生的 "虛擬橋接器". 而 vethxxx 就是連接到此橋接器的 TUN/TAP 虛擬網路卡. 此虛擬橋接器同時也是 "核心網路卡名稱", 我們可以使用 ip 指令查看 lxcbr0 橋接器的 "網路卡" 資訊:
LXC 預設 NAT 轉址功能 (iptables)
NAT (Network Address Translation) 轉址功能, 是 iptables (IP 過濾器) 的規則之一, 當 IP 封包往外送時, 會將來源 IP 位址偽裝的一種網路技術. 輸入以下指令來查看 iptables 中的 NAT 規則:
從上面訊可以發現實體主機上的 iptables 加入了一筆 "10.0.3.0/24" 的資訊, 而這筆資訊就是透過 iptables 啟動了 NAT 轉址功能, 只要是從 "source" 欄位的 IP 位址等於 "10.0.3.0/24" 發送出去的封包, 都會透過 NAT 轉址的功能, 將虛擬主機的私有 IP 偽裝成外部連結網路的 IP 位址; 而 "destination" 代表的是目的 IP 位址, 此欄位設定值 "! 10.0.3.0/24" 中的驚嘆號, 代表除了 "10.0.3.0/24" 這個 Network ID 之外, 其餘連結外部網路的 IP位址, 都可以透過 NAT 轉址功能順利溝通.
Note.
LXC 預設 DHCP Server 與 DNS Cache Server (dnsmasq)
虛擬網路構成元件中的 "dnsmasq" 是一個輕量級的 "DHCP Server" 及 "DNS Cache Server". 其中 "DHCP Server" 的功能是負責分派 IP 位址; 而 "DNS Cache Server" 則是網域名稱解析伺服器, 負責儲存 Client 端曾經拜訪的網域名稱, 並提供名稱解析的快取功能, 方便 Client 端再次查詢時可以快速回覆網域名稱.
輸入以下指令查看 "dnsmasq" 的設定:
上面可以觀察到 "dnsmasq" 再啟動時就分別了 "DHCP Server" 與 "DNS Cache Server" 的功能. 設定 "--listen-address 10.0.3.1" 就是 "DHCP Server" 的 IP 位址; 設定 "--dhcp-range 10.0.3.2,10.0.3.254" 說明 DHCP 可以派發的 IP 位址的範圍. 更多的設定說明可以參考 "dnsmasq" 的 man page.
修改預設虛擬網路架構
修改 LXC 核心模組網路設定檔 (lxc-net)
由前面觀察到的預設 LXC 網路架構, 可以透過編輯檔案 /etc/default/lxc-net 進行變更:
接著我們進行如下的修改:
接著停止所有運行的虛擬機, 並使用下面指令重啟 LXC 網路設定:
從上面的輸出可以確認核心網卡的 IP 位址已經修改為我們剛剛設定的 "10.0.100.1/24", 接著可以再確認 dnsmasq 的設定:
使用異動後的虛擬網路架構
雖然可以利用指令讓 LXC 虛擬主機連結到新的網路架構上, 但是虛擬主機是不是真的能夠在異動後的網路架構中運作? 這裡使用 myUS14 虛擬主機作為示範:
由上面輸出可以知道變更後的網路架構生效, 接著我們要建立新的虛擬主機 "ubuntu14" 來確認其網路架構:
由上面可以確認派發的 IP 落在設定的範圍 "10.0.100.200~10.0.100.250" 內. 接著來檢視一下網路連線狀況:
對於虛擬系統來說, 網路架構是否正確, 連線功能是否正常, 是攸關整個虛擬系統能否發揮功能的重要關鍵, 即使是 LXC 核心模組也不例外. 但早期的網路系統, 大多利用網路硬體裝置, 如實體的 Router, Switch 等, 來串接各個網路區段的主機, 或是公司內部網路的連結, 除了建置成本昂貴外, 還需要投入不少人力在維護網路硬體設備的運作. 這對於一般中小企業來說, 若要架設一個公司專屬的私有雲, 在經費與人力上, 都是相當沉重的負擔.
若能利用 Linux 原生的虛擬網路, 就可以達到大部分內部私有雲所需要的網路架構. 這不只可以大大減省網路硬體設備的支出, 更可以利用現有 Linux 系統的管理人員, 直接管控系統與網路的運作, 讓架構公司內部的私有雲, 成為一種可能, 且不管是那一套虛擬系統, 只要是運作在 Linux 系統下, 大多會使用 Linux 原生的虛擬網路架構, 當然 Linux Container 也不例外.
Linux 原生的虛擬網路架構, 其實是由 Linux 系統早已存在的虛擬網路元件所組成. 而這些元件包含了 "TUN/TAP 虛擬網路卡", "虛擬 Bridge", "iptables" 與 "dnsmasq". 各個元件在 Linux 原生虛擬網路架構中, 扮演不同的角色, 且每個元件都可以獨立運作, 也可以互相搭配為我們所需的網路架構.
LXC 虛擬網路橋接器及 TUN/TAP 虛擬網路卡
虛擬網路構成元件中的 "虛擬橋接器", 主要負責連接不同的網路系統, "TUN" 和 "TAP" 是以軟體來模擬虛擬網路卡, 就功能來說, "TUN" 是屬於 OSI 的第三層, 也就是網路層, 主要處理 IP 與 Route 封包的傳遞; 而 "TAB" 則是屬於 OSI 網路通訊協定的第二層, 也就是資料連結層, 主要負責實體網路封包的傳遞, 總結一句話 "TUN/TAP" 就是 Ethernet 虛擬網路卡!
雖然在 Linux 系統內要建立 Bridge 網路連線模式看似有些複雜, 但幸運的是 LXC 核心模組已經將這些繁瑣的步驟一次處理完畢, 只需要裝好 LXC 核心模組, 在 Linux 系統中, 就會產生一個 "虛擬橋接器" 了, 這個橋接器可以透過命令 brctl 檢視:
上圖可以觀察到 "lxcbr0" 這個名稱, 這就是安裝好 LXC 核心模組後所產生的 "虛擬橋接器". 而 vethxxx 就是連接到此橋接器的 TUN/TAP 虛擬網路卡. 此虛擬橋接器同時也是 "核心網路卡名稱", 我們可以使用 ip 指令查看 lxcbr0 橋接器的 "網路卡" 資訊:
LXC 預設 NAT 轉址功能 (iptables)
NAT (Network Address Translation) 轉址功能, 是 iptables (IP 過濾器) 的規則之一, 當 IP 封包往外送時, 會將來源 IP 位址偽裝的一種網路技術. 輸入以下指令來查看 iptables 中的 NAT 規則:
從上面訊可以發現實體主機上的 iptables 加入了一筆 "10.0.3.0/24" 的資訊, 而這筆資訊就是透過 iptables 啟動了 NAT 轉址功能, 只要是從 "source" 欄位的 IP 位址等於 "10.0.3.0/24" 發送出去的封包, 都會透過 NAT 轉址的功能, 將虛擬主機的私有 IP 偽裝成外部連結網路的 IP 位址; 而 "destination" 代表的是目的 IP 位址, 此欄位設定值 "! 10.0.3.0/24" 中的驚嘆號, 代表除了 "10.0.3.0/24" 這個 Network ID 之外, 其餘連結外部網路的 IP位址, 都可以透過 NAT 轉址功能順利溝通.
Note.
LXC 預設 DHCP Server 與 DNS Cache Server (dnsmasq)
虛擬網路構成元件中的 "dnsmasq" 是一個輕量級的 "DHCP Server" 及 "DNS Cache Server". 其中 "DHCP Server" 的功能是負責分派 IP 位址; 而 "DNS Cache Server" 則是網域名稱解析伺服器, 負責儲存 Client 端曾經拜訪的網域名稱, 並提供名稱解析的快取功能, 方便 Client 端再次查詢時可以快速回覆網域名稱.
輸入以下指令查看 "dnsmasq" 的設定:
上面可以觀察到 "dnsmasq" 再啟動時就分別了 "DHCP Server" 與 "DNS Cache Server" 的功能. 設定 "--listen-address 10.0.3.1" 就是 "DHCP Server" 的 IP 位址; 設定 "--dhcp-range 10.0.3.2,10.0.3.254" 說明 DHCP 可以派發的 IP 位址的範圍. 更多的設定說明可以參考 "dnsmasq" 的 man page.
修改預設虛擬網路架構
修改 LXC 核心模組網路設定檔 (lxc-net)
由前面觀察到的預設 LXC 網路架構, 可以透過編輯檔案 /etc/default/lxc-net 進行變更:
接著我們進行如下的修改:
- LXC_BRIDGE="lxcbr0"
- LXC_ADDR="10.0.100.1"
- LXC_NETMASK="255.255.255.0"
- LXC_NETWORK="10.0.100.0/24"
- LXC_DHCP_RANGE="10.0.100.200,10.0.100.250"
- LXC_DHCP_MAX="10"
- LXC_SHUTDOWN_TIMEOUT=120
從上面的輸出可以確認核心網卡的 IP 位址已經修改為我們剛剛設定的 "10.0.100.1/24", 接著可以再確認 dnsmasq 的設定:
使用異動後的虛擬網路架構
雖然可以利用指令讓 LXC 虛擬主機連結到新的網路架構上, 但是虛擬主機是不是真的能夠在異動後的網路架構中運作? 這裡使用 myUS14 虛擬主機作為示範:
由上面輸出可以知道變更後的網路架構生效, 接著我們要建立新的虛擬主機 "ubuntu14" 來確認其網路架構:
由上面可以確認派發的 IP 落在設定的範圍 "10.0.100.200~10.0.100.250" 內. 接著來檢視一下網路連線狀況:
沒有留言:
張貼留言