问题发生在一个Openstack的控制节点(兼网络节点)。我的网络由一个VM、两个路由器组成。结构如下:
VM -> Router1 -> Router2 -> External network
其中第一个路由器做SNAT,没有问题;第二个路由器是用来转发的,但是转发不成功,就是下面的qrouter-d3dcb2df-f3ca-4079-a434-491b23f84b5a。不会发贴,贴截图了。。。
问题发生在一个Openstack的控制节点(兼网络节点)。我的网络由一个VM、两个路由器组成。结构如下:
VM -> Router1 -> Router2 -> External network
其中第一个路由器做SNAT,没有问题;第二个路由器是用来转发的,但是转发不成功,就是下面的qrouter-d3dcb2df-f3ca-4079-a434-491b23f84b5a。不会发贴,贴截图了。。。
看到你的描述了,如你的拓扑图,VM(192.168.1.x) -> (LAN:192.168.1.1)Router1(WAN:10.10.52.X) -> Router2 -> (10.10.52.X)External network,指出几点我**个人认为**有问题的点:
1.如你所说Router1做SNAT,Router2透传转发,首先如果Router1只做SNAT,那么VM的数据包文能到Externel network,但是Externel network回应的报文无法到达VM,还需要在Router1上做DNAT;
2.以我理解,VM的IP使用Router1的LAN端私网IP,假设是192.168.1.x网段,Router1的WAN端IP需要与External network同网段,假设为10.10.52.x,此时要实现VM到Externel network的互通,有两种做法:
《1》将Router2配置为Bridge模式,数据包在二层进行透传,但是由于Router2所处的位置,需要消耗一个10.10.52.x的IP地址,具体方式是在Router2上新建一个虚拟网桥接口如br0,讲Router2的LAN和WAN都加入网桥(brctl 命令),最后为br0配置需要消耗的哪个10.10.52.X的IP,并且启动此接口br0;缺点:基本不可能为Router2配置一个公网IP地址,很容易冲突,解决办法是将Router2移动到Router1之前,让Router2消耗私网IP(192.168.1.x),即拓扑变为VM(192.168.1.x) -> Router2(br0:192.168.1.x)->(LAN:192.168.1.1)Router1(WAN:10.10.52.X) -> (10.10.52.X)External network,或者直接去掉Router2更好;
《2》将Router2配置为NAT模式,(但是感觉没必要),拓扑变为VM(192.168.1.x) -> (LAN:192.168.1.1)Router1(WAN:192.168.2.x)-> (LAN:192.168.2.1)Router2(WAN:10.10.52.x)->-> (10.10.52.X)External network,这种Router1和2都要做SNAT/DNAT或者MASQUERADE,并且Router和21的默认路由需要配置正确
大概就是这样了,不知道我理解的对不对