美文网首页
借助overlay网络实现服务器对外通信

借助overlay网络实现服务器对外通信

作者: 圣地亚哥_SVIP | 来源:发表于2020-01-20 17:13 被阅读0次

场景:

两台不同网段的虚机:
VM1,VM2,需要VM1需要借助VM2的IP出外网访问

方案:
由于VM1和VM2不在同一个网段,VM1添加路由时无法指向VM2,因此采用ovs+overlay网络实现VM1的对外通信。

VM1: 192.168.10.10
VM2: 192.168.20.4

overlay网络:
10.10.10.0/24
VM1:10.10.10.20
VM2: 10.10.10.1
VM2 SNAT: 10.10.10.0/24 -> 192.168.20.4

安装OVS,及构建VXLAN

yum install openvswitch libibverbs

systemctl start openvsiwtch

sysctl -w net.ipv4.ip_forward=1

VM1:

ovs-vsctl add-br br-tun

ip netns add test
ip link add name veth1 type veth peer name veth1p
ip link set dev veth1 netns test

ovs-vsctl add-port br-tun veth1p
ip link set veth1p up
ip netns exec test ip link set veth1 up
ip netns exec test ip addr add 10.10.10.20/24 dev veth1

添加vxlan:

ovs-vsctl add-port br-tun vxlan-tun -- set interface vxlan-tun type=vxlan options:remote_ip=192.168.20.4 options:key=222

VM2:

ovs-vsctl add-br br-tun

ip link add name veth1 type veth peer name veth1p

ovs-vsctl add-port br-tun veth1p
ip link set veth1p up
ip link set veth1 up
ip addr add 10.10.10.1/24 dev veth1

添加vxlan:

ovs-vsctl add-port br-tun vxlan-tun -- set interface vxlan-tun type=vxlan options:remote_ip=192.168.10.10 options:key=222

测试VXLAN:
# ip netns exec test ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.875 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.982 ms
64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=0.861 ms
^C
--- 10.10.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.861/0.906/0.982/0.054 ms

添加NAT功能:

VM1:

# ip netns exec test route add -net default gw 10.10.10.1

VM2:

iptables -t nat -I POSTROUTING -s 10.10.10.0/24  -j SNAT --to-source 192.168.20.4

VM1上测试:
# ip netns exec test ping 192.168.20.1
PING 192.168.20.1 (192.168.20.1) 56(84) bytes of data.
64 bytes from 192.168.20.1: icmp_seq=1 ttl=63 time=2.36 ms
64 bytes from 192.168.20.1: icmp_seq=2 ttl=63 time=1.19 ms
64 bytes from 192.168.20.1: icmp_seq=3 ttl=63 time=1.29 ms
64 bytes from 192.168.20.1: icmp_seq=4 ttl=63 time=1.24 ms
64 bytes from 192.168.20.1: icmp_seq=5 ttl=63 time=1.27 ms
^C
--- 192.168.20.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 1.191/1.475/2.369/0.448 ms

已经可以ping通VM2的网关,可以借助VM2的IP对外访问。

上述测试内容中,我们为了验证方案的准确性,在VM1中将overlay的接口放在了namespace中,在此情况下使用时需要在此namespace中。
实际中,为了方便,无需将veth1口放在namespace中,在此时,需要注意路由的添加:

  • route add {需要通过192.168.10.10的网段} gw 192.168.10.1/24
  • route add -net default gw 10.10.10.1

使用linux bridge实现overlay

在上述中,利用ovs实现的vxlan,但是需要额外安装ovs,在此我们利用linux bridge实现,并且不使用namespace隔离。

VM1

创建linux bridge:

brctl addbr br-tun
ip link set dev br-tun up

创建vxlan:

ip link add vtep1 type vxlan id 222 remote 192.168.20.4 local 192.168.10.10 dstport 4789 dev eth0
ip link set dev vtep1 up
brctl addif br-tun vtep1

配置overlay网络:

ip addr add 10.10.10.20/24 dev vtep1

VM2

创建linux bridge:

brctl addbr br-tun
ip link set dev br-tun up

创建vxlan:

ip link add vtep2 type vxlan id 222 remote 192.168.10.10 local 192.168.20.4 dstport 4789 dev eth0
ip link set dev vtep2 up
brctl addif br-tun vtep2

配置overlay网络:

ip addr add 10.10.10.1/24 dev vtep2

配置NAT及路由

VM1:

route add -net 172.20.0.0/16 gw 192.168.10.1
route add -net default gw 10.10.10.1
route del -net default gw 192.168.10.1

VM2,NAT:

iptables -t nat -I POSTROUTING -s 10.10.10.0/24  -j SNAT --to-source 192.168.20.4

测试未通,排查。

相关文章

网友评论

      本文标题:借助overlay网络实现服务器对外通信

      本文链接:https://www.haomeiwen.com/subject/aenjzctx.html