上一节完咱们建立了外部网络 ext_net,接下来须要将其链接到 Neutron 的虚拟路由器,这样 instance 才能访问外网。网络
点击菜单 Project -> Network -> Routers 进入 router 列表。学习
点击 router_100_101 的 “Set Gateway” 按钮。测试
在 “External Network” 下拉列表中选择 ext_net,点击 “Set Gateway”。spa
外网设置成功。咱们须要看看 router 发生了什么变化。router
点击 “router_100_101” 连接,打开 “Interfaces” 标签页。接口
router 多了一个新 interface,IP 为 10.10.10.2。ip
该 interface 用于链接外网 ext_net,对应的 br-ex 的 port “qg-cf54d3ea-6a”。ci
在 router 的 namespace 中查能够看到 qg-cf54d3ea-6a 已经配置了 IP 10.10.10.2。路由
router interface 的命名规则以下: it
1. 若是 interface 用于链接租户网络,命名格式为 qr-xxx。
2. 若是 interface 用于链接外部网络,命名格式为 qg-xxx。
查看 router 的路由表信息:
能够看到默认网关为 10.10.10.1。
意味着对于访问 vlan100 和 vlan101 租户网络之外的全部流量,router_100_101 都将转发给 ext_net 的网关 10.10.10.1。
如今 router_100_101 已经同时链接了 vlan100, vlan101 和 ext_net 三个网络,以下图所示:
咱们在 cirros-vm3 上测试一下。
cirros-vm3 位于计算节点,如今已经能够 Ping 到 ext_net 网关 10.10.10.1 了。
经过 traceroute 查看一下 cirros-vm3 到 10.10.10.1 的路径:
数据包通过两跳到达 10.10.10.1 网关。
1. 数据包首先发送到 router_100_101 链接 vlan101 的 interface(172.16.101.1)。
2. 而后经过链接 ext_net 的 interface(10.10.10.2) 转发出去,最后到达 10.10.10.1。
当数据包从 router 链接外网的接口 qg-cf54d3ea-6a 发出的时候,会作一次 Source NAT,将包的源地址修改成 router 的接口地址 10.10.10.2,这样就可以保证目的端可以将应答的包发回给 router,而后再转发回源端 instance。
有关 Source NAT 的详细分析能够参考 Linux Bridge 中 router 的相关章节。
经过 SNAT 使得 instance 可以直接访问外网,但外网还不能直接访问 instance。
直接访问 instance 指的是通讯链接由外网发起,例如从外网 SSH instance。
若是须要从外网直接访问 instance,能够利用 floating IP。
Open vSwitch driver 环境中 floating IP 的实现与 Linux Bridge driver 彻底同样:
都是经过在 router 提供网关的外网 interface 上配置 iptables NAT 规则实现。
有关 floating IP 的详细分析能够参考 Linux Bridge 中 floating IP 的相关章节。
至此,OVS 的路由服务就讨论完了,下一节咱们将开始学习 Neutron VxLAN 的 OVS 实现。