ipvlan实现容器和节点间通信

995 阅读1分钟

环境信息

两个节点:192.168.25.129、192.168.49.101

配置

节点192.168.25.129上开始配置:

ip netns add net1

ip netns add net2

ip link add ipv1 link eth0 type ipvlan mode l3

ip link add ipv2 link eth0 type ipvlan mode l3

ip link set ipv1 netns net1

ip link set ipv2 netns net2

ip netns exec net1 ip link set ipv1 up

ip netns exec net2 ip link set ipv2 up

ip netns exec net1 ip addr add 100.200.25.100/24 dev ipv1

ip netns exec net2 ip addr add 200.100.25.100/24 dev ipv2

ip netns exec net1 ip route add default dev ipv1

ip netns exec net2 ip route add default dev ipv2

配置完成后,net1可以ping通net2,但无法访问主机。

使用veth-pair的形式打通与主机的通信:

ip link add veth1 type veth peer name veth1-peer

ip link set veth1-peer netns net1

ip netns exec net1 ip link set veth1-peer up

ip link set veth1 up

ip route add 100.200.25.100/32 dev veth1

ip netns exec net1 ip route add 192.168.25.129/32 dev veth1-peer

通过配置定向路由和veth对,实现了主机和net1间的互相通信,但是此时net1无法访问其他主机,通过修改路由和iptable实现:

iptables -t nat -A POSTROUTING -s 100.200.25.100/24 -j MASQUERADE

ip netns exec net1 ip route add 192.168.49.0/24 via 192.168.25.129 dev veth1-peer

配置后,net1可以访问另一台主机192.168.49.101。