Networking

在 Hetzner 和 CNI 上使用子網的容器橋接網路

  • January 16, 2022

我正在嘗試在Hetzner Cloud上創建虛擬機和容器的專用網路。我已經在本地家庭網路上測試了這個設置,一切正常。

計劃是為虛擬機建立一個專用網路(10.0.0.0/8僅用於測試)。對於我的測試,我正在使用10.10.0.110.10.0.2作為虛擬機。並且每個虛擬機都會有一個 CNI 橋接網路,(例如:172.20.0.0/16,用於容器)。我想讓網路上的任何虛擬機都可以10.0.0.0/8使用靜態路由訪問橋接網路。

在 Hetzner 上,我配置了一個靜態路由172.20.0.0/16 to 10.10.0.1。在10.10.0.1我有一個 Podman 的 CNI 橋接網路,配置在同一範圍內172.20.0.0/16

放置在該網路上的任何容器都可以毫無問題地 ping 或訪問:本地、其他容器、主機或網際網路,並且主機 ( 10.10.0.1) 訪問容器 ( ) 沒有問題172.20.0.X

問題是當我想從10.10.0.2. 我用tcpdumpand監控了流量iftop,Hetzner 路由似乎工作得很好,因為連接在10.10.0.1( ens10) 上到達 VM。ens10這讓我想知道這是否是網橋介面和網橋介面之間的路由問題podman-vlan

以下是來自的路線10.10.0.1

default via 172.31.1.1 dev eth0 proto dhcp src X.Y.Z.W metric 100 
10.0.0.0/8 via 10.0.0.1 dev ens10 
10.0.0.1 dev ens10 scope link 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev podman-vlan proto kernel scope link src 172.20.0.1 
172.31.1.1 dev eth0 proto dhcp scope link src X.Y.Z.W metric 100 

10.10.0.2虛擬機上,我只做了一個ip r add 172.20.0.0/16 via 10.0.0.1(似乎可以正常工作)。

我的期望是得到10.10.0.2 -> 10.0.0.1 -> 10.10.0.1 -> 172.20.0.1 -> 172.20.0.X. 相反,一切似乎都迷失了10.10.0.1,包括如果我嘗試ping -I ens10 172.20.0.X

這是 CNI 配置:

{
 "cniVersion": "0.4.0",
 "name": "podman",
 "plugins": [
   {
     "type": "bridge",
     "bridge": "podman-vlan",
     "isGateway": true,
     "ipMasq": true,
     "promiscMode": true,
     "ipam": {
       "type": "host-local",
       "routes": [{ "dst": "0.0.0.0/0" }],
       "ranges": [
         [
           {
             "subnet": "172.20.0.0/16",
             "gateway": "172.20.0.1"
           }
         ]
       ]
     }
   },
   {
     "type": "portmap",
     "capabilities": {
       "portMappings": true
     }
   },
   {
     "type": "firewall"
   },
   {
     "type": "tuning"
   }
 ]
}

提前致謝。

這是該 VM 和 iptables 上存在的 Docker 的問題。

檢查iptables -L虛擬機

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
CNI-FORWARD  all  --  anywhere             anywhere

Docker 優先。因此,要麼配置規則以將正確的介面轉發到 CNI/Podman/Docker,要麼配置任何需要的。

就我而言,刪除 Docker 是一種選擇,它解決了所有問題。

引用自:https://serverfault.com/questions/1090093