全部產品
Search
文件中心

Elastic Compute Service:配置網卡路由

更新時間:Jul 16, 2026

在VPC內部以及與其他網路之間傳輸資料時,需要使用路由表來指導資料包的直接選取。對於彈性網卡來說,正確的路由配置是保證其能夠正確發送和接收資料的關鍵。ECS在附加網卡時,通常情況下會自動為附加的網卡配置預設路由。如果現有的路由不滿足您的需求,您可以按照本章節的指引通過配置路由表和規則來自行配置路由。

為網卡配置策略路由

策略路由是一種網路技術,允許根據特定的規則來決定資料包的傳輸路徑,而不是僅僅依賴於路由表中的預設路由。通過配置路由表和規則,您可以實現不同的路由策略,將特定的網路流量通過指定的網卡進行轉寄,以便更加精確地控制和管理網路流量的轉寄路徑。

適用情境

  • 多網卡網路通訊問題:在使用輔助彈性網卡配合Elastic IP Address或NAT Gateway時,由於其預設路由優先順序低於主網卡,出站流量預設優先通過主網卡發送,可能導致流量經輔助網卡流入後由主網卡返回,引發Elastic IP Address通訊異常。此時可以通過配置策略路由,強制流量從接收資料的網卡原路返回,確保進出路徑一致。

  • 流量負載平衡:多網卡環境下,每個網路介面可能串連到不同的網路或者服務於不同的目的,使用預設路由可能無法滿足所有的需求。例如,您可以將出站流量按照一定規則分配給不同的網路介面,從而實現流量的負載平衡。

  • 存取控制:基於源地址、目的地址或其他參數定義路由規則,限制某些類型的流量只能通過指定的介面或路徑傳輸,實現一定程度上的網路隔離。

前提條件

操作樣本

以下以輔助彈性網卡為例,您需要根據實際情況替換命令中的網卡標識、IP地址等資訊:

Linux執行個體
  1. 執行如下命令,為網卡添加路由表並配置路由策略。

    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
  2. 配置開機時自動更新路由,使配置永久生效。

    為eth1配置路由後,需要將上一步執行的命令寫入檔案,以便在開機時自動更新路由,否則重啟執行個體後該路由配置會失效。如果您是臨時測試,可忽略此步驟。

    1. 執行如下命令,開啟/etc/rc.local檔案。

      vim /etc/rc.local
    2. i鍵進入編輯模式,將您上一步實際執行的命令寫入檔案,然後按Esc鍵退出編輯模式,輸入:wq儲存退出。

      說明

      注意替換命令中的網卡標識、網關地址等資訊。

    3. 執行如下命令,為/etc/rc.local檔案添加執行許可權。

      sudo chmod +x /etc/rc.local
  3. 執行如下命令,查看建立的路由表和策略路由。

    ip route list table 1001 && \
    ip rule list

    系統返回查詢結果如下,表示建立的路由表和策略路由成功。

    root@xxx:/etc/netplan# ip route list table 1001 && ip rule list
    default via 172.16.20.253 dev eth1
    0:	from all lookup local
    32765:	from 172.16.20.193 lookup 1001
    32766:	from all lookup main
    32767:	from all lookup default

Windows執行個體

  1. 執行如下命令,為網卡配置策略路由。

    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命令查看:

      C:\Users\Administrator>ipconfig
      
      Windows IP 配置
      
      
      乙太網路適配器 乙太網路:
      
         串連特定的 DNS 尾碼 . . . . . . . : cn-hangzhou.ecs.internal
         本地連結 IPv6 地址. . . . . . . . : fe80::6926:88f5:e002:7443%3
         IPv4 地址 . . . . . . . . . . . . : 172.16.20.241
         子網路遮罩  . . . . . . . . . . . . : 255.255.255.0
         預設閘道. . . . . . . . . . . . . : 172.16.20.253
      
      乙太網路適配器 乙太網路 2:
      
         串連特定的 DNS 尾碼 . . . . . . . : cn-hangzhou.ecs.internal
         本地連結 IPv6 地址. . . . . . . . : fe80::46bd:a7fb:362e:f79f%6
         IPv4 地址 . . . . . . . . . . . . : 172.16.12.76
         子網路遮罩  . . . . . . . . . . . . : 255.255.255.0
         預設閘道. . . . . . . . . . . . . : 172.16.12.253
    • 介面索引:網路介面的索引值。您可以通過netsh interface ipv4 show interfaces命令查看:

      樣本中,乙太網路 2 對應的介面索引(Idx)為 6。

      C:\Users\Administrator>netsh interface ipv4 show interfaces
      
      Idx     Met         MTU          狀態                名稱
      ---  ----------  ----------  ------------  ---------------------------
        1          75  4294967295  connected     Loopback Pseudo-Interface 1
        3          15        1500  connected     乙太網路
        6          15        1500  connected     乙太網路 2
    • 路由優先順序:metric n,數字越小優先順序越高。

  2. 執行route print,查看新增加的路由是否已經出現在列表中。

    C:\Users\Administrator>route print
    ===========================================================================
    介面列表
      3...00 16 3e 0a d5 39 ......Red Hat VirtIO Ethernet Adapter
      6...00 16 3e 4c 88 9c ......Red Hat VirtIO Ethernet Adapter #2
      1...........................Software Loopback Interface 1
    ===========================================================================
    
    IPv4 路由表
    ===========================================================================
    活動路由:
    網路目標        網路遮罩          網關            介面          躍點數
          0.0.0.0          0.0.0.0    172.16.12.253   172.16.12.76     15
          0.0.0.0          0.0.0.0    172.16.12.253   172.16.20.241     15
        127.0.0.0        255.0.0.0            在鏈路上       127.0.0.1    331
        127.0.0.1  255.255.255.255            在鏈路上       127.0.0.1    331
    127.255.255.255  255.255.255.255            在鏈路上       127.0.0.1    331
       172.16.12.0    255.255.255.0            在鏈路上    172.16.12.76    271
      172.16.12.76  255.255.255.255            在鏈路上    172.16.12.76    271
     172.16.12.255  255.255.255.255            在鏈路上    172.16.12.76    271
       172.16.20.0    255.255.255.0            在鏈路上   172.16.20.241    271
     172.16.20.241  255.255.255.255            在鏈路上   172.16.20.241    271
     172.16.20.255  255.255.255.255            在鏈路上   172.16.20.255    271
        224.0.0.0        240.0.0.0            在鏈路上       127.0.0.1    331
        224.0.0.0        240.0.0.0            在鏈路上   172.16.20.241    271
        224.0.0.0        240.0.0.0            在鏈路上    172.16.12.76    271
    255.255.255.255  255.255.255.255            在鏈路上       127.0.0.1    331
    255.255.255.255  255.255.255.255            在鏈路上   172.16.20.241    271
    255.255.255.255  255.255.255.255            在鏈路上    172.16.12.76    271
    ===========================================================================
    永久路由:
      網路地址          網路遮罩  網關地址  躍點數
          0.0.0.0          0.0.0.0    172.16.12.253       1
    ===========================================================================

情境樣本

本樣本以Alibaba Cloud Linux 3.2為例,說明多網卡情境下,資料包從eth1進入,從eth0離開的情境。如果您對資料流向有嚴格要求,比如在安全性原則中設定了源IP白名單,僅授權特定網路介面對應的IP地址,但由於未正確繫結資料流量路徑,可能導致合法請求因源IP與介面不匹配而被拒絕,引髮網絡不通。您可以通過配置策略路由解決。

  1. 環境準備。

    1. 購買一台ECS執行個體。

      具體操作,請參見自訂購買執行個體

    2. 為ECS執行個體綁定一張輔助彈性網卡。

      具體操作,請參見綁定輔助彈性網卡

    3. 申請EIP,並以普通模式綁定到輔助彈性網卡eth1。

      具體操作,請參見將EIP綁定至輔助彈性網卡

      綁定成功後,在 ECS 執行個體詳情頁單擊彈性網卡頁簽,可查看輔助網卡狀態為已綁定,IP 位址列顯示已指派的公網 IP(即 EIP)和主私網 IP。

    4. 準備測試端。

      您可以以另一台開通了公網的ECS執行個體作為測試端,或者以您本地機器作為用戶端進行測試。

    5. 執行個體所在安全性群組添加入方向的允許訪問規則,源IP指定為測試端的公網IP,以允許通過ping EIP訪問ECS執行個體。

      具體操作,請參見案例4:只允許特定協議的業務訪問

  2. 在測試端執行以下命令,向ECS執行個體發送資料包。

    ping 47.xx.xx.109

    注意替換IP地址為您為輔助網卡綁定的EIP的地址。

  3. 在ECS執行個體上執行以下命令對兩個網路介面eth0、eth1分別進行ICMP資料包監測。

    • 執行以下命令,在網路介面 eth0 上捕獲 ICMP協議的資料包。

      tcpdump -i eth0 icmp
    • 重新開啟一個視窗,執行以下命令,在網路介面 eth1 上捕獲 ICMP協議的資料包。

      tcpdump -i eth1 icmp
  4. 查看結果。

    未配置策略路由

    可以看到,預設情況下,資料包從eth1介面進入,即eth1收到請求(request),但是從eth0返回(reply)。

    在 eth0 上抓包,可以看到 ICMP echo reply:

    [root@xxx ~]# tcpdump -i eth0 icmp
    dropped privs to tcpdump
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    14:01:55.129356 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 142, length 40
    14:01:56.141993 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 143, length 40
    14:01:57.145388 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 144, length 40
    14:01:58.163042 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 145, length 40

    在 eth1 上抓包,可以看到 ICMP echo request:

    [root@xxx ~]# tcpdump -i eth1 icmp
    dropped privs to tcpdump
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
    14:01:55.129339 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 142, length 40
    14:01:56.141980 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 143, length 40
    14:01:57.145376 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 144, length 40
    14:01:58.163030 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 145, length 40

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

    [root@i xxx          ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    100    0        0 eth0
    0.0.0.0         172.16.20.253   0.0.0.0         UG    101    0        0 eth1
    172.16.20.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1
    配置策略路由之後
    1. 參照為網卡配置策略路由的操作樣本,為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
    2. 再次在測試端執行ping EIP

    3. 再次在ECS執行個體上監測不同網卡的ICMP資料包。

      可以看到,資料包從eth1介面進入,收到請求(request)。之後,依然從網路介面eth1回複(reply),保持了源進源出的特性。

      [root@xxx ~]# tcpdump -i eth0 icmp
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      
      [root@xxx ~]# tcpdump -i eth1 icmp
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
      14:15:13.249277 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 150, length 40
      14:15:13.249293 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 150, length 40
      14:15:14.263769 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 151, length 40
      14:15:14.263783 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 151, length 40
      14:15:15.267143 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 152, length 40
      14:15:15.267155 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 152, length 40
      14:15:16.275436 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 153, length 40
      14:15:16.275449 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 153, length 40

為網卡配置預設路由

目前ECS在附加網卡時,通常情況下會自動為附加的網卡配置預設路由。部分作業系統如Ubuntu 16不會為輔助彈性網卡配置預設路由(Ubuntu 18及以上會自動設定),預設路由的缺失可能導致您在指定網卡進行外部通訊時,出現網路連通問題。您可以參考如下步驟為網卡配置預設路由。

以下以Ubuntu16為例,為輔助彈性網卡eth1配置預設路由:

  1. 執行如下命令,查看網卡資訊。

    ip a
    root@xxx:/etc/network# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:15:74:ee brd ff:ff:ff:ff:ff:ff
        inet 172.16.20.231/24 brd 172.16.20.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe15:74ee/64 scope link
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:46:31:f4 brd ff:ff:ff:ff:ff:ff
        inet 172.16.20.199/24 brd 172.16.20.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe46:31f4/64 scope link
           valid_lft forever preferred_lft forever

    可以看到,輔助彈性網卡eth1已經在執行個體內部生效。

  2. 執行如下命令,查看路由資訊。

    route -n

    可以看到,系統只為eth1配置了用於內部通訊的路由,沒有配置處理外部通訊的路由,即從eth1網路介面出去的路由。

    root@xxx:/etc/network# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

    可能的異常情況樣本

    這可能會導致您在指定eth1通訊時候的異常,比如您為eth1網卡綁定了EIP,希望在執行個體內部指定通過eth1的EIP訪問外部公網,可能會發現網路不通,如下所示:

    root@xxx               /etc/network# ping -I eth1 www.xxx.com
    PING www.xxx.com (1xxx12) from 172.16.20.199 eth1: 56(84) bytes of data.
    From 172.16.20.199 icmp_seq=1 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=2 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=3 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=4 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=5 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=6 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=7 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=8 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=9 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=10 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=11 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=12 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=13 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=14 Destination Host Unreachable
  3. 執行如下命令,為網卡配置預設路由。

    ip -4 route add default via 172.16.20.253 dev eth1 metric 200
    • -4:表示只處理IPv4地址

    • 172.16.20.253:eth1的網關地址

    • metric 200:設定了此路由的度量值(優先順序)為200。較低的度量值表示更高的優先順序。如果存在多條到達同一目的地的不同路由,則會選擇度量值最低的一條。

  4. 配置開機時自動更新路由,使配置永久生效。

    為eth1配置路由後,需要將上一步執行的命令寫入檔案,以便在開機時自動更新路由,否則重啟執行個體後該路由配置會失效。如果您是臨時測試,可忽略此步驟。

    1. 執行如下命令,開啟/etc/rc.local檔案。

      vim /etc/rc.local
    2. i鍵進入編輯模式,將您上一步實際執行的命令寫入檔案,然後按Esc鍵退出編輯模式,輸入:wq儲存退出。

      說明

      注意替換命令中的網卡標識、網關地址等資訊。

    3. 執行如下命令,為/etc/rc.local檔案添加執行許可權。

      sudo chmod +x /etc/rc.local
  5. 再次執行如下命令,可以看到為eth1添加的路由。

    route -n
    root@ixxxxxxxxxx:/etc/network# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    0      0        0 eth0
    0.0.0.0         172.16.20.253   0.0.0.0         UG    200    0        0 eth1
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

    驗證異常情況樣本

    再次指定eth1網卡訪問外部公網,可以正常通訊:

    root@xxx:~/etc/network# ping  -I eth1 www.xxx.com
    PING www.xxx.com (xxx) from 172.16.20.199 eth1: 56(84) bytes of data.
    64 bytes from xxx: icmp_seq=1 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=2 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=3 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=4 ttl=51 time=11.6 ms
    ^C