DVR

租户T2在外部通过默认的SNAT网关访问内部子网的VM1。此时,网络节点上的T2-SNAT起到路由器的作用。

外网 -> BR-EX(Network Node)-> T2-SNAT -> BR-INT -> BR-TUN -> BR-TUN(Node 1) -> BR-INT -> T2-VM1

控制节点

找到路由器位于的控制节点,并切换到对应节点。

1
2
source .openrc
neutron l3-agent-list-router [router-id]

neutron-l3-agent-list-router

找到路由器的网络命名空间。

1
ip netns | grep [router-id]

ip-netns

查看规则

进入snat网络命名空间,查看端口转发的规则是否被添加。

1
ip netns exec snat-[router-id] iptables -t nat -S

iptables-t

抓包测试

查看snat网络命名空间中的网卡设备。

1
ip netns exec snat-[router-id] ip a

ip-a

利用tcpdump抓取相应网卡设备上的数据包。

1
ip netns exec snat-[router-id] tcpdump -i [device-name] -n

计算节点

抓包测试

首先在控制节点上找到虚拟机所在的计算节点。

1
2
. openrc
openstack server show [vm-uuid]

server-show

切换到虚拟机所在的计算节点,并找到对应的虚拟机。

1
virsh list 

virsh-list

找到虚拟机对应的tap设备和qvr设备。

1
virsh edit [vm-id]

virsh-edit

利用tcpdump抓取tap设备和qbr设备上的网包。

1
2
tcpdump -i tap-[xxxx] -n
tcpdump -i qbr-[xxxx] -n

找到qrouter的网络命名空间。

1
ip netns | grep [router-id]

ip-netns

查qrouter网络命名空间中的网卡设备。

1
ip netns exec qrouter-[router-id] ip a

ip-a

利用tcpdump抓取qr网卡上的网包。

1
tcpdump -i qr-[xxxx]

总结

流量的走向

外网 -> Controller-SNAT(qg-xxx) -> Controller-SNAT(sg-xxx) -> Compute-qbr -> Compute-tap -> VM

VM -> Compute-tap -> Compute-qbr -> Compute-qrouter(qr-xxx) -> Controller-SNAT(sg-xxx) -> Controller-SNAT(qg-xxx) -> 外网