在 Hetzner 和 CNI 上使用子網的容器橋接網路
我正在嘗試在Hetzner Cloud上創建虛擬機和容器的專用網路。我已經在本地家庭網路上測試了這個設置,一切正常。
計劃是為虛擬機建立一個專用網路(
10.0.0.0/8
僅用於測試)。對於我的測試,我正在使用10.10.0.1
和10.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
. 我用tcpdump
and監控了流量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 是一種選擇,它解決了所有問題。