如何讓次要網路介面在 Ubuntu EC2 執行個體中運作?
我想讓我的次要網路介面在 Ubuntu Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中運作。
簡短說明
**警告:**只有進階使用者才可使用第二個彈性網路介面。僅在下列使用案例中使用此解決方案: 您無法使用單一網路介面。您必須將同一子網路的兩個網路介面附加至一個執行個體。若要避免非對稱路由問題,請使用單一彈性網路介面,或將重複的彈性網路介面置於非重疊的子網路中。或者,使用 Ubuntu 24.04 LTS 或更新版本。
新增次要網路介面至非 Amazon Linux EC2 執行個體會導致流量問題。之所以發生這些問題,是因為主要和次要網路介面位於相同的子網路中,且有一個路由表與一個閘道。進入次要網路介面的流量使用主要網路介面離開執行個體。由於次要 IP 位址不屬於主要網路介面的 MAC 位址,因此次要介面無法運作。
**注意:**Ubuntu 24.04 不需要下列步驟。Ubuntu 24.04 會自動處理此進階組態。
若要在建立次要介面後使其正常運作,請完成下列步驟:
- 設定路由表。
- 在自訂路由表政策資料庫中設定規則,以便次要介面的流量使用新的路由表。
開始之前,請注意,Amazon EC2 執行個體位於 AWS 雲端,因此並非所有使用案例都能從擁有多個介面受益。下列範例顯示您可能不需要使用次要網路介面的情況:
- 若要增加網路輸送量: 由於限制是根據執行個體類型和大小設定的,因此網路輸送量不會增加。如需詳細資訊,請參閱 Amazon EC2 執行個體類型。
- 若要增加彈性 IP 位址: 您不需要將 Elastic IP 位址新增至您的執行個體,因為大多數應用程式與 DNS 都能完美配合運作。例如,Apache 可以使用以名稱為基礎的虛擬主機。如需詳細資訊,請參閱 Apache 網站上的以名稱為基礎的虛擬主機支援。
**注意:**對於以下每個 Ubuntu 版本,新增次要網路介面的步驟都有所不同:
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.04
解決方法
**注意:**雖然下列解決方法中的步驟已經過列出的 Linux 版本測試,但您可能需要修改組態的自訂設定。所有程序都必須使用根使用者權限執行。使用 sudo -i 成為根使用者,或者使用 sudo 執行所有命令。
設定 Ubuntu 14.04 或 16.04
您可以使用單一檔案建立次要介面組態檔案、設定路由表,然後為 Ubuntu 設定路由政策規則。
若要設定 Ubuntu 14.04 或 16.04,請完成下列步驟:
-
若要取得主要網路介面的名稱,請執行下列命令:
ip a | grep ^[[:digit:]]
您會收到類似下列訊息的輸出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
**重要事項:**在上述範例中,主要介面命名為 eth0、eth1 等。不過,對於支援增強型網路 (例如 m4 和 m5 系列類型) 的執行個體,您可能會看到命名不一致的情況。例如,如果次要介面命名名為 eth0,則主要介面可能會命名為 ens3。當您在執行個體執行時新增次要介面,就會發生這種命名不一致的情況。為避免命名不一致,請在啟動時新增介面或重新啟動執行個體。或者,如果介面正在執行中,請使用下列命令變更名稱:
ip link set eth0 name ens4 ip link set ens4 up ip link show ens4 --->verify
-
建立次要介面的組態檔案:
vi /etc/network/interfaces.d/51-eth1.cfg
**注意:**變更 eth1 以符合次要介面名稱。
下列命令是單一 IP 位址為 172.31.21.115 次要介面上的閘道為 172.31.16.1 的範例:
auto eth1 iface eth1 inet static address 172.31.21.115 netmask 255.255.240.0 # Gateway configuration up ip route add default via 172.31.16.1 dev eth1 table 1000 # Routes and rules up ip route add 172.31.21.115 dev eth1 table 1000 up ip rule add from 172.31.21.115 lookup 1000
注意: 將範例 IP 位址和閘道取代為您自己的資訊。您的閘道必須是子網路中的第一個有效 IP 位址。
下列命令是多個 IP 位址的範例。在此範例中,IP 位址為 172.31.21.115 和 172.31.18.46,閘道為 172.31.16.1:
auto eth1 # Enter one or more IP settings iface eth1 inet static address 172.31.21.115 netmask 255.255.240.0 iface eth1 inet static address 172.31.18.46 netmask 255.255.240.0 # Default gateway for eth1 up ip route add default via 172.31.16.1 dev eth1 table 1000 # A route for every IP up ip route add 172.31.21.115 dev eth1 table 1000 up ip route add 172.31.18.46 dev eth1 table 1000 # A policy rule for every IP up ip rule add from 172.31.21.115 lookup 1000 up ip rule add from 172.31.18.46 lookup 1000
注意: 將範例 IP 位址和閘道取取代為您自己的資訊。
-
建立 restrict-default-gw 檔案,以防止主路由表上的預設閘道遭到覆寫:
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
-
將以下幾行新增至 restrict-default-gw 檔案:
case ${interface} in eth0) ;; *) unset new_routers ;; esac
注意: 將 eth0 取代為您的主要介面名稱。
-
重新啟動網路。
對於 Ubuntu 14.04,請執行下列命令:
(ifdown eth1 && ifup eth1)
對於 Ubuntu 16.04,請執行下列命令:
systemctl restart networking
設定 Ubuntu 18.04、20.04 和 22.04
Ubuntu 18.04、20.04 和 22.04 使用 Netplan 網路組態。請注意,Netplan 使用 YAML 格式。此 YAML 格式意味著縮排很關鍵。下列 Netplan 範例會使用雙空格縮排。
若要設定 Ubuntu 18.04、20.04 和 22.04,請完成下列步驟:
-
建立次要介面的組態檔案:
vi /etc/netplan/51-eth1.yaml
-
將以下幾行新增至 51-eth1.yaml 檔案:
network: version: 2 renderer: networkd ethernets: eth1: addresses: - 172.31.24.153/20 - 172.31.28.195/20 dhcp4: no routes: - to: 0.0.0.0/0 via: 172.31.16.1 # Default gateway table: 1000 - to: 172.31.24.153 via: 0.0.0.0 scope: link table: 1000 - to: 172.31.28.195 via: 0.0.0.0 scope: link table: 1000 routing-policy: - from: 172.31.24.153 table: 1000 - from: 172.31.28.195 table: 1000
**注意:**將上述範例資訊取代為您的使用案例特定資訊。上述範例 YAML 檔案會在次要介面 eth1 上設定兩個 IP 位址。
若要尋找要在 YAML 檔案中使用的 CIDR 範圍,請完成下列步驟:
- 開啟 Amazon EC2 主控台,選取執行個體,然後選取相關執行個體。
- 在網路索引標籤上,捲動至網路介面,然後記下次要網路介面的子網路 ID。
- 開啟 Amazon Virtual Private Cloud (Amazon VPC) 主控台,選取子網路,然後記下為子網路 ID 列出的 IPv4 CIDR 範圍。
- 若要套用網路組態,請執行下列命令:
netplan --debug apply
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- 已提問 3 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 個月前