Linux

如何在不同的命名空間中創建可訪問的 macvlan 別名?

  • October 26, 2017

我有

  • eth0我的主網路命名空間中的介面 name
  • 另一個介面 name jail0,位於備用網路命名空間 (name name0) 中。此命名空間由被監禁的環境使用。
  • jail0是 的macvlan別名eth0

從我的主系統和我的監獄中,我看到網路沒有任何問題。

但是,我無法互相 ping 通

為什麼會這樣?我想讓它們觸手可及。

其他網路介面都不存在於其他網路介面的名稱空間中。

macvlan介面可以在不同的模式下使用,這些模式會改變兩個 macvlan 實例之間傳輸的數據的處理方式。預設模式是vepa(虛擬乙太網埠聚合),這可能是您的設置不起作用的原因。

您可能要配置的常見模式的簡短描述:

  • vepa數據通過物理介面傳輸,對於macvlan實例之間的通信,交換機需要支持髮夾模式或者必須有一個IP路由器轉發數據包。
  • private不允許 macvlan 實例之間的通信,即使外部交換機支持髮夾模式。
  • bridge允許實例之間直接通信,macvlan 實例之間的流量不在物理鏈路上傳輸。

您可能想在橋接模式下使用 macvlan 。對於 macvlan 實例和包含網路介面本身的命名空間之間的通信,您需要在相同的(主/主機)網路命名空間中創建一個 macvlan 實例。有關詳細資訊和說明,請參閱AB 的答案

有關完整文件(和其他模式),請參閱man 8 ip-link.

要完成接受的答案,橋接模式是最簡單的方法,但還不足以獲得通信。

當 jail 實例嘗試 ping 主機時,它會發送一個 ARP 請求以獲取其 IP。因為主機沒有macvlan實例,數據包將直接在物理鏈路上傳輸(橋接模式定義的必然結果)。主機永遠不會看到這個數據包,所以無法回答:沒有 ping 回答。另一種方式是相同的:主機將其所有數據包發送到真實的物理 LAN,沒有主機的數據包將進入容器的 macvlan 介面(監獄……)。

訣竅是創建第二個 macvlan 介面,也是橋接模式,用於主機:這會將主機與容器/監獄的流量集成。

host# ip link add link eth0 name hostmvl0 type macvlan mode bridge

然後有兩種方法:

  • 兩個介面上的相同 IP

親:沒有改變 eth0 或其設置,例如主機的 DHCP 沒有問題。

缺點:有些複雜,不能讓廣播無處不在。

在其上分配主機的 IP(與 eth0 上相同),沒有預設 lan route ( noprefixroute),否則可能會混淆整個主機的路由:

host# ip addr add hostip/netmask dev hostmvl0 noprefixroute
host# ip link set hostmvl0 up

對於每個容器(監獄…),通過主機的 macvlan 介面添加其路由,而不是真正的:

host# ip route add jailip/32 dev hostmvl0

現在一切正常(除了來自主機的廣播(ping,udp …)不會被容器/監獄看到,因為它將在 eth0 上路由)。

注意:新介面獲得一個隨機的 MAC 地址。它可以在創建時使用附加設置,address xx:xx:xx:xx:xx:xx但它不能是真實的(eth0)。只有監獄會看到這個 MAC 地址。

  • 主機macvlan介面上的IP,沒有IP的物理介面

pro:網路配置更常用,沒有特殊情況(例如:主機的廣播無處不在),每個容器沒有額外的路由設置。

con: 需要移除 eth0 的網路設置並將它們遷移到 hostmvl0。MAC 地址會改變(除非進行了一些其他黑客攻擊來防止它),因此可能會影響 DHCP 客戶端。

正如 sebasth 所建議的,可以簡單地從 eth0 中刪除 IP,並將新的“主”網卡視為 hostmvl0。當然,如果有一些服務管理這個,請改為在那裡進行更改。最好始終設置相同的 MAC 地址,否則每次重啟時它都會在網路上更改,這在商業環境中是不受歡迎的。

host# ip addr del hostip/netmask dev eth0 #careful, connectivity is lost
host# ip link set hostmvl0 address xx:xx:xx:xx:xx:xx
host# ip addr add hostip/netmask dev hostmvl0
host# ip link set hostmvl0 up
host# ip route add default via usualrouterip

如果改用 DHCP,MAC 已經改變,IP 也會改變。可以更改 eth0 的 MAC 以便能夠將其原始 MAC 重用於 hostmvl0。完成此操作後,某些工具有時過於智能。這個 Archlinux 討論可能包含有關如何防止 NetworkManager 恢復設置的資訊。

引用自:https://unix.stackexchange.com/questions/400190