vxlan联通不同主机的netns
vxlan这种网络设备,能够对内部要发出去的包进行udp封装,对外部到达到vxlan上的包进行解包,
这种模式是flannel实现不同主机上容器互联的一个原理。
什么是vxlan
xvlan是linux主机上的一个虚拟网络设备,它能够对主机上要发出去的包进行udp封装,然后到达目的主机,然后在对应的vxlan设备上进行一个解包的操作。解包之后,再把之前原始想要发出去的那个网络包进行网卡的一个转发,最终会送达到目的主机的特定的网络命名空间里面去。
因为涉及到网卡包的转发,所以得让linux主机去支持一个包转发的功能,所以要打开ip forward功能
创建vxlan interface
ip link add vxlan0 type vxlan \
id 42 \
remote 192.168.64.4 \
local 192.168.64.3 \
dev enp0s1
id是vxlan的一个设备id,这个id和目的主机上面的vxlan的一个设备id必须得一样,一样之后,才能对包进行一个解包的操作
给网桥设置一个ip
ip addr add 178.192.64.2/16 dev vxlan0
启动网桥
ip link set vxlan0 up
创建好了这个xvlan虚拟设备之后,来看下,目前主机上面的一个包流转情况。
这里有两台主机,一台是192.168.64.3,一台是192.168.64.4,前面24位是一个网络号,都是同一个局域网之内的。
red代表一个名字叫red的网络命名空间,对应的目的主机是一个叫blue的网络命名空间,它们的网络段是不一样的,一个是178.192.64,一个是178.192.63,它们属于一个不同的网络段。
绿色部分代表一个网桥的设备。
首先看下red这个网络命名空间(ip是178.192.64.3,网段是178.192.64),它的路由表信息
178.192.64.0/24 dev br0 scope link src 178.192.64.1
178.192.63.0/24 via 178.192.64.1 dev vxlan0 onlink
它的下一跳地址是br0这个网桥,然后从它内部veth-red的网卡出去,ip是178.192.64.1,因为在red网络命名空间有一对网络设备,一端叫veth-red,一端是veth-red-br,路由信息是
default via 178.192.64.1 dev veth-red onlink
178.192.64.0/24 dev veth-red proto kernel scope link src 178.192.64.3
根据路由信息,ip网络包会从veth-red这个网卡出去,然后赋予它原始地址是178.192.64.3。
小结
在red网络命名空间里面去ping一个blue这个网络命名空间里面的一个ip,比如在red网络命名空间ping 178.192.63.4。
抓下网络包:
这里是发了一个arp的request请求
request外部是用udp协议包裹的,它的目的port是8472 (linux主机上面vxlan的默认端口是8472)
udp里面包了一个arp的request请求,可以看到原mac地址、目的mac地址、原ip、目的ip都会在这里呈现出来。
vxlan的一个工作模式是将网络包用udp协议去封装一下,然后通过主机上面的网卡发送出去。
vxlan连接不同主机的大概原理
两台主机上面通过一个比较巧妙的路由表的设计,能够使一个ip网络包能够灵活的从特定的网卡上进去,然后通过主机上面的ip forward的功能去转发到了特定网卡上,从而到达到了网络命名空间上。
留言与评论(共有 0 条评论) “” |