Networking
如何配置進出 VXLAN 的路由
我有幾個使用 vxlan 連接的 Linux 主機。我們稱它們為主機 A、主機 B 和主機 C。每個主機上的配置類似於:
# Define a bridge: cat << EOF > /etc/sysconfig/network-scripts/ifcfg-cloudbr0 DEVICE=cloudbr0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPV6INIT=no IPV6_AUTOCONF=no DELAY=5 STP=no USERCTL=no NM_CONTROLLED=no IPADDR=192.168.200.1 NETMASK=255.255.255.0 DNS1=10.10.0.2 EOF # Read the above config file and create the bridge systemctl restart network # VXLAN ip link add vxlan100 type vxlan id 100 dstport 4789 local 10.10.128.84 group 224.10.0.1 dev eth0 ttl 5 brctl addif cloudbr0 vxlan100 ip link set up dev vxlan100
結果是主機 A、B 和 C 各有兩個 IP 地址,一個公共 IP 地址(在 10.10.0.0/16 子網上)和一個私有 IP 地址(在 192.168.200.0/24 子網上)。私有地址僅對配置了 vxlan 的其他主機可見。主機 A、B 和 C 都可以 ping 通對方的公共和私有地址。
接下來,我需要讓一些額外的主機(主機 D、E 和 F)訪問 vxlan 子網,而無需將它們實際加入子網。所以,我正在尋找某種第 3 層路由解決方案。
我在主機 A 上啟用了 IP 轉發,然後更新了適當的路由表,以通過主機 A 為主機 D、E 和 F 提供到 192.168.200.0/24 的路由。這允許主機 D、E 和 F 使用它的任何一個來 ping 主機 A公共或私有地址,但它們無法訪問任何其他 vxlan 地址。出於某種原因,主機 A 沒有將流量轉發到 vxlan 子網(否則響應不會返回)。
設置進/出 vxlan 子網的第 3 層路由的最佳方法是什麼?
我找到的解決方案是:
- 在主機 A 上啟用 IP 轉發
- 使用主機 A 的私有地址作為主機 B 和 C 上的預設網關
- 使用物理路由器路由表中主機 A 的公共地址使私有子網可路由:
route add 192.168.200.0/24 via 10.10.128.84
結果是與主機 A 不同的物理子網上的所有主機都可以訪問 vxlan 子網(假設所有必要的路由器都有正確的路由表條目)。與主機 A 在同一物理子網上的任何主機都必須加入 vxlan 子網才能訪問它。