上一節完咱們建立了外部網絡 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 實現。