在VPC內部以及與其他網路之間傳輸資料時,需要使用路由表來指導資料包的直接選取。對於彈性網卡來說,正確的路由配置是保證其能夠正確發送和接收資料的關鍵。ECS在附加網卡時,通常情況下會自動為附加的網卡配置預設路由。如果現有的路由不滿足您的需求,您可以按照本章節的指引通過配置路由表和規則來自行配置路由。
為網卡配置策略路由
策略路由是一種網路技術,允許根據特定的規則來決定資料包的傳輸路徑,而不是僅僅依賴於路由表中的預設路由。通過配置路由表和規則,您可以實現不同的路由策略,將特定的網路流量通過指定的網卡進行轉寄,以便更加精確地控制和管理網路流量的轉寄路徑。
適用情境
多網卡網路通訊問題:在使用輔助彈性網卡配合Elastic IP Address或NAT Gateway時,由於其預設路由優先順序低於主網卡,出站流量預設優先通過主網卡發送,可能導致流量經輔助網卡流入後由主網卡返回,引發Elastic IP Address通訊異常。此時可以通過配置策略路由,強制流量從接收資料的網卡原路返回,確保進出路徑一致。
流量負載平衡:多網卡環境下,每個網路介面可能串連到不同的網路或者服務於不同的目的,使用預設路由可能無法滿足所有的需求。例如,您可以將出站流量按照一定規則分配給不同的網路介面,從而實現流量的負載平衡。
存取控制:基於源地址、目的地址或其他參數定義路由規則,限制某些類型的流量只能通過指定的介面或路徑傳輸,實現一定程度上的網路隔離。
前提條件
網卡已綁定到執行個體。
具體操作,請參見綁定彈性網卡到執行個體。
網卡已在執行個體作業系統內部生效。
具體操作,請參見配置彈性網卡在執行個體內部生效。
操作樣本
以下以輔助彈性網卡為例,您需要根據實際情況替換命令中的網卡標識、IP地址等資訊:
Linux執行個體
執行如下命令,為網卡添加路由表並配置路由策略。
ip -4 route add default via <eth1的網關地址> dev eth1 table 1001 ip -4 rule add from <eth1的IP地址> lookup 1001本樣本中以eth1為例,建立一張eth1使用的路由表1001和一條關聯至該路由表的路由策略,表示來自172.16.20.193的資料包由路由表1001決定其路徑,即將資料包發送至eth1出口。配置如下所示:
ip -4 route add default via 172.16.20.253 dev eth1 table 1001 ip -4 rule add from 172.16.20.193 lookup 1001配置開機時自動更新路由,使配置永久生效。
為eth1配置路由後,需要將上一步執行的命令寫入檔案,以便在開機時自動更新路由,否則重啟執行個體後該路由配置會失效。如果您是臨時測試,可忽略此步驟。
執行如下命令,開啟
/etc/rc.local檔案。vim /etc/rc.local按
i鍵進入編輯模式,將您上一步實際執行的命令寫入檔案,然後按Esc鍵退出編輯模式,輸入:wq儲存退出。說明注意替換命令中的網卡標識、網關地址等資訊。
執行如下命令,為
/etc/rc.local檔案添加執行許可權。sudo chmod +x /etc/rc.local
執行如下命令,查看建立的路由表和策略路由。
ip route list table 1001 && \ ip rule list系統返回查詢結果如下圖,表示建立的路由表和策略路由成功。

Windows執行個體
執行如下命令,為網卡配置策略路由。
route add -p <目標網路> mask <子網路遮罩> <網關> if <介面索引> metric <路由優先順序>本樣本中以乙太網路2為例,設定一條路由,讓所有來自172.16.12.76的資料包都通過
172.16.12.253這個網關轉寄。配置如下所示:route add -p 0.0.0.0 mask 0.0.0.0 172.16.12.253 if 6 metric 1參數說明:
-p:使該路由成為永久性路由,重啟後仍然有效。預設不加
-p為臨時生效。目標網路:使用
0.0.0.0通常代表預設路由,即當沒有更具體的路由匹配時將使用的路由。子網路遮罩和預設閘道:網卡的子網路遮罩和預設閘道,您可以通過
ipconfig命令查看:
介面索引:網路介面的索引值。您可以通過
netsh interface ipv4 show interfaces命令查看:
路由優先順序:metric n,數字越小優先順序越高。
執行
route print,查看新增加的路由是否已經出現在列表中。
情境樣本
本樣本以Alibaba Cloud Linux 3.2為例,說明多網卡情境下,資料包從eth1進入,從eth0離開的情境。如果您對資料流向有嚴格要求,比如在安全性原則中設定了源IP白名單,僅授權特定網路介面對應的IP地址,但由於未正確繫結資料流量路徑,可能導致合法請求因源IP與介面不匹配而被拒絕,引髮網絡不通。您可以通過配置策略路由解決。
環境準備。
購買一台ECS執行個體。
具體操作,請參見自訂購買執行個體。
為ECS執行個體綁定一張輔助彈性網卡。
具體操作,請參見綁定輔助彈性網卡。
申請EIP,並以普通模式綁定到輔助彈性網卡eth1。
具體操作,請參見將EIP綁定至輔助彈性網卡。

準備測試端。
您可以以另一台開通了公網的ECS執行個體作為測試端,或者以您本地機器作為用戶端進行測試。
執行個體所在安全性群組添加入方向的允許訪問規則,源IP指定為測試端的公網IP,以允許通過ping EIP訪問ECS執行個體。

具體操作,請參見案例4:只允許特定協議的業務訪問。
在測試端執行以下命令,向ECS執行個體發送資料包。
ping 47.xx.xx.109注意替換IP地址為您為輔助網卡綁定的EIP的地址。
在ECS執行個體上執行以下命令對兩個網路介面eth0、eth1分別進行ICMP資料包監測。
執行以下命令,在網路介面
eth0上捕獲 ICMP協議的資料包。tcpdump -i eth0 icmp重新開啟一個視窗,執行以下命令,在網路介面
eth1上捕獲 ICMP協議的資料包。tcpdump -i eth1 icmp
查看結果。
未配置策略路由
可以看到,預設情況下,資料包從eth1介面進入,即eth1收到請求(request),但是從eth0返回(reply)。

通過查看ECS執行個體的預設路由,可以看到eth0的預設路由優先順序為100(數值越小,優先順序越高),高於eth1的優先順序,因此資料包預設從eth0發出。

配置策略路由之後
參照為網卡配置策略路由的操作樣本,為ECS執行個體配置策略路由。
ip -4 route add default via 172.16.20.253 dev eth1 table 1001 ip -4 rule add from 172.16.20.177 lookup 1001再次在測試端執行
ping EIP。再次在ECS執行個體上監測不同網卡的ICMP資料包。
可以看到,資料包從eth1介面進入,收到請求(request)。之後,依然從網路介面eth1回複(reply),保持了源進源出的特性。

為網卡配置預設路由
目前ECS在附加網卡時,通常情況下會自動為附加的網卡配置預設路由。部分作業系統如Ubuntu 16不會為輔助彈性網卡配置預設路由(Ubuntu 18及以上會自動設定),預設路由的缺失可能導致您在指定網卡進行外部通訊時,出現網路連通問題。您可以參考如下步驟為網卡配置預設路由。
以下以Ubuntu16為例,為輔助彈性網卡eth1配置預設路由:
執行如下命令,查看網卡資訊。
ip a
可以看到,輔助彈性網卡eth1已經在執行個體內部生效。
執行如下命令,查看路由資訊。
route -n可以看到,系統只為eth1配置了用於內部通訊的路由,沒有配置處理外部通訊的路由,即從eth1網路介面出去的路由。

執行如下命令,為網卡配置預設路由。
ip -4 route add default via 172.16.20.253 dev eth1 metric 200-4:表示只處理IPv4地址172.16.20.253:eth1的網關地址metric 200:設定了此路由的度量值(優先順序)為200。較低的度量值表示更高的優先順序。如果存在多條到達同一目的地的不同路由,則會選擇度量值最低的一條。
配置開機時自動更新路由,使配置永久生效。
為eth1配置路由後,需要將上一步執行的命令寫入檔案,以便在開機時自動更新路由,否則重啟執行個體後該路由配置會失效。如果您是臨時測試,可忽略此步驟。
執行如下命令,開啟
/etc/rc.local檔案。vim /etc/rc.local按
i鍵進入編輯模式,將您上一步實際執行的命令寫入檔案,然後按Esc鍵退出編輯模式,輸入:wq儲存退出。說明注意替換命令中的網卡標識、網關地址等資訊。
執行如下命令,為
/etc/rc.local檔案添加執行許可權。sudo chmod +x /etc/rc.local
再次執行如下命令,可以看到為eth1添加的路由。
route -n

