我有几个使用 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 地址,一个公网地址(位于 10.10.0.0/16 子网),一个私网地址(位于 192.168.200.0/24 子网)。私网地址仅对配置了 vxlan 的其他主机可见。主机 A、B 和 C 都可以 ping 通对方的公网和私网地址。
接下来,我需要让一些额外的主机(主机 D、E 和 F)访问 vxlan 子网,但实际上并不将它们加入到子网中。因此,我正在寻找某种第 3 层路由解决方案。
我在主机 A 上启用了 IP 转发,然后更新了相应的路由表,使主机 D、E 和 F 通过主机 A 路由到 192.168.200.0/24。这样主机 D、E 和 F 就可以使用主机 A 的公有或私有地址 ping 主机 A,但它们无法访问任何其他 vxlan 地址。出于某种原因,主机 A 不会将流量转发到 vxlan 子网(否则响应不会返回)。
设置 vxlan 子网内/外第 3 层路由的最佳方法是什么?
答案1
我找到的解决方案是:
- 在主机 A 上启用 IP 转发
- 使用主机 A 的私有地址作为主机 B 和 C 上的默认网关
- 在物理路由器的路由表中使用主机 A 的公共地址使私有子网可路由:
route add 192.168.200.0/24 via 10.10.128.84
结果是,与主机 A 位于不同物理子网上的所有主机都可以访问 vxlan 子网(假设所有必要的路由器都有正确的路由表条目)。与主机 A 位于同一物理子网上的任何主机都必须加入 vxlan 子网才能访问它。