將 ext_net 連接到 router - 每天5分鍾玩轉 OpenStack(145)


上一節完我們創建了外部網絡 ext_net,接下來需要將其連接到 Neutron 的虛擬路由器,這樣 instance 才能訪問外網。


點擊菜單 Project -> Network -> Routers 進入 router 列表。

點擊 router_100_101 的 “Set Gateway” 按鈕。

在 “External Network” 下拉列表中選擇 ext_net,點擊 “Set Gateway”。

外網設置成功。我們需要看看 router 發生了什么變化。

點擊 “router_100_101” 鏈接,打開 “Interfaces” 標簽頁。

router 多了一個新 interface,IP 為 10.10.10.2。

該 interface 用於連接外網 ext_net,對應的 br-ex 的 port “qg-cf54d3ea-6a”。

在 router 的 namespace 中查可以看到 qg-cf54d3ea-6a 已經配置了 IP 10.10.10.2。

router interface 的命名規則如下: 

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 的相關章節。

 

floating IP

通過 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 實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM