了解 MAAS 的兩種網路配置之間的差異

了解 MAAS 的兩種網路配置之間的差異

我試圖了解 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

在這個階段我腦海中浮現的問題是為什麼要有loDNS 名稱伺服器並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 橋。這個網路配置真的有效嗎?

相關內容