![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981854408085059.jpg)
Neutron Routing 服务提供跨 subnet 互联互通的能力。
例如前面我们搭建了实验环境:
cirros-vm1 172.16.100.3 vlan100
cirros-vm3 172.16.101.3 vlan101
这两个 instance 要通信必须借助 router。可以是物理 router 或者虚拟 router。
下面详细讨论 Neutron 的虚拟 router 实现。
配置 l3 agent
Neutron 的路由服务是由 l3 agent 提供的。
l3 agent 需要正确配置才能工作,配置文件为 /etc/neutron/l3_agent.ini,位于控制节点或网络节点。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981855561046014.jpg)
devstack 已经帮我们配置默认的属性,大部分情况下不需要修改就可以使用。
external_network_bridge 指定连接外网的网桥,默认是 br-ex。
interface_driver 是最重要的选项,如果 mechanism driver 是 open vswitch,则:
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
如果选用 linux bridge,则:
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
l3 agent 运行在控制或网络节点。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981855763006810.jpg)
下面将创建虚拟 router “router_100_101”,打通 vlan100 和 vlan101。
创建 router
进入操作菜单 Project -> Network -> Routers。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981856026004025.jpg)
点击 “Create Router” 按钮。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981856220074221.jpg)
router 命名为 “router_100_101”,点击 “Create Router” 按钮确认。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981856413046709.jpg)
router_100_101 创建成功。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981856681033581.jpg)
接下来需要将 vlan100 和 vlan101 连接到 router_100_101。
点击 “router_100_101” 链接进入 router 的配置页面,在 “Interfaces” 标签中点击 “Add Interface” 按钮。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981856918033672.jpg)
选择 vlan100 的 subnet_172_16_100_0,点击 “Add Interface” 确认。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981857263037967.jpg)
用同样的方法添加 vlan101 的 subnet_172_16_101_0。
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981857498022271.jpg)
完成后,可以看到 router_100_101 有了两个 interface,其 IP 正好是 subnet 的 Gateway IP 172.16.100.1 和 172.16.101.1。
到这里,我们可以预见:
1. router_100_101 已经连接了 subnet_172_16_100_0 和 subnet_172_16_101_0。
2. router_100_101 上已经设置好了两个 subnet 的 Gateway IP。
3. cirros-vm1 和 cirros-vm3 应该可以通信了。
通过 PING 测试一下:
![](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170121-1484981857690083641.jpg)
不出所料,cirros-vm1 和 cirros-vm3 能通信了。
下一节我们详细探究 router_100_101 是如何起作用的。