基于组播跨主机通信vxlan实现

框架图

采用两个虚拟机,客户机ubuntu 和 centos 分别在上面创建一个虚拟网桥和一对虚拟网络对,peer一边插到bridge上,另一头放到网络命名空间中,模拟类似于虚机或docker设备,通过配置二者的vxlan,定义出口设备,加入共同的多播组,实现两个网络命名空间里的进程通信.

Ubuntu

# 确认内核版本需大于3.7
root@bogon:~# uname -r
3.16.0-30-generic

# 创建网桥,虚拟对设备,网络命名空间,VXLAN

ip link add br0 type bridge
ip addr add 192.168.1.2/24 dev br0
ip link set br0 up

ip link add veth0 type veth peer name veth1
ip link set veth0 up
ip link set veth1 up

# attach 到网桥br0, veth0可以不设置ip
ip link set veth0 master br0

ip netns add ns1
# 将veth1 插到 ns1 网络空间 并设置ip
ip link set veth1 netns ns1
ip netns exec ns1 ip addr add 192.168.1.100/24 dev veth1
ip netns exec ns1 ip link set veth1 up


ip link add vxlan0 type vxlan id 110 group 239.1.1.1 dev eth0 dstport 4789
ip link set vxlan0 up
ip link set vxlan0 master br0

# 查看linux内核已设置好对udp.4789端口的监听
root@bogon:~# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 *:4789                  *:*                                

#查看组播ip信息,确认eth1出口已加入到vxlan0的组播ip中
root@bogon:~# netstat -gn
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      239.1.1.1
...             ...     ...

# 查看vxlan详细信息
root@bogon:~# ip -d link show dev vxlan0
33: vxlan0:  mtu 1450 qdisc noqueue master bridge1 state UNKNOWN mode DEFAULT group default 
    link/ether 32:4c:96:da:d6:f0 brd ff:ff:ff:ff:ff:ff promiscuity 1 
    vxlan id 110 group 239.1.1.1 dev eth0 srcport 32768 61000 dstport 4789 ageing 300 
    bridge_slave 

Centos

ip命令配置同上;
注:
    关闭每个虚拟设备的rp_filter策略,防止协议栈“丢包” echo 0 > /proc/sys/net/ipv4/conf/veth0/rp_filter

你可能感兴趣的:(linux)