
我試圖了解 MAAS 的兩種網路配置之間的差異。我的理解是,兩者都實現相同的任務,其中第一個網絡連接到互聯網,第二個網絡由 MAAS 管理。然後將第二網路配置為透過公共網路介面轉送流量。
儘管實現了相同的結果,但配置看起來卻相當不同,這就是我的困惑所在。
第一次配置
第一個建議的配置來自以下內容Cloudbase 解決方案 Wiki 頁面。他們提出了一個簡單的/etc/network/interfaces
方法,eth0
連接到外部網路並eth1
進入內部網路並獲得靜態位址:
# The primary network interface (external)
auto eth0
iface eth0 inet dhcp
# The secondary NIC (used internal for MAAS)
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
然後將對應的iptables
規則儲存在 中/etc/rc.local
。據我所知,這與eth1
和之間的網路流量轉送有關eth0
。
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
第二種配置
第二個配置來自適用於多安裝程式的 Ubuntu Openstack 安裝程式指南。他們的/etc/network/interfaces
文件有更多的網路接口,但與之前的配置類似,eth0
連接到外部網路並且eth1
是內部的:
# The loopback network interface
auto lo
iface lo inet loopback
dns-nameservers 127.0.0.1
pre-up iptables-restore < /etc/network/iptables.rules
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static
address 172.16.0.1
netmask 255.255.255.0
bridge_ports eth1
在這個階段我腦海中浮現的問題是為什麼要有lo
DNS 名稱伺服器並iptables
應用於它?為什麼在本例中使用橋接連接?
他們的iptable
規則看起來也不同,/etc/network/iptables.rules
並假設這可以轉送流量:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.1/24 ! -d 172.16.0.1/24 -j MASQUERADE
COMMIT
概括
有人可以幫助解釋他們的做法有何不同以及為什麼?
讓我知道這個問題是否太大,我可以將其分解為單獨的問題,但首先我認為這提供了更多背景資訊。
答案1
兩種配置幾乎相同,但有一些細微差別。
iface lo inet loopback
dns-nameservers 127.0.0.1
pre-up iptables-restore < /etc/network/iptables.rules
此配置將保證即使您的 eth0 電纜在啟動時關閉,您仍然擁有 DNS 解析器和防火牆規則集(很難擺脫環回網路設備,對吧?)。當然,此範例假定您本機有一個正在執行的 DNS 解析器服務。
我沒有發現設置橋接設備有任何問題。此配置應該可以正常工作,但實際上並不認為您在您的情況下需要它,除非您正在計劃使用它(例如 KVM 虛擬機器)。
在第一種情況下,iptables 規則是為 shell 腳本編寫的,這就是為什麼它們的語法看起來與應與 iptables-restore 一起使用的 /etc/network/iptables.rules 不同。
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.1/24 ! -d 172.16.0.1/24 -j MASQUERADE
COMMIT
這裡只有一條規則,它允許偽裝 172.16.0.0/24 子網路。
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
上述規則允許任何來自 eth1 到 eth0 的子網將被偽裝並涉及一些過濾。
就我個人而言,我寧願混合使用上述配置。
答案2
第一個網路配置非常清晰。 /etc/network/interfaces 檔案是每個人都熟悉的,當然在使用 MAAS 時需要透過 iptables 進行 IP 轉發,以便為 MAAS 管理的節點提供網路。
除了DNS部分和br0部分之外的第二個配置是可以理解的。 DNS 部分實際上是讓 MAAS 伺服器意識到它本身正在託管 DNS 服務。該行可能會轉移到 /etc/resolve.conf,其中包含其他 DNS 配置。如果未建立此 DNS 項目,您將在 JUJU 開機期間遇到此錯誤:https://github.com/Ubuntu-Solutions-Engineering/openstack-installer/issues/901
但是,我不太確定 br0 橋。這個網路配置真的有效嗎?