AWS網路卡配置

AWS網路卡配置

我正在嘗試為特定用例設定 EC2 實例。我需要 2 個具有公開 IP 位址的 ENI。 (兩者都應該可以 ping 通)

到目前為止我已完成以下步驟:

  • 連接同一子網路的 2 個網路介面
  • 運行實例
  • 建立2個彈性IP位址,附加到實例的每個ENI卡上。

我可以在 EC2 實例網路介面部分看到以下結果。

公有IP

但我無法 ping 通3.104.193.180

ip address還給了以下結果。 。 。

ubuntu@ip-172-31-37-139:~$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:ce:dd:28:5b:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.31.37.139/20 brd 172.31.47.255 scope global dynamic eth0
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4ce:ddff:fe28:5bb8/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:a6:9a:4a:98:c6 brd ff:ff:ff:ff:ff:ff
    inet 172.31.41.29/20 brd 172.31.47.255 scope global dynamic eth1
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4a6:9aff:fe4a:98c6/64 scope link
       valid_lft forever preferred_lft forever

所以我的問題是。 。 。

  • 我該怎麼做才能讓另一個 IP 暴露/可 ping 通?
  • 我應該如何從伺服器內知道我的兩個彈性IP?

答案1

若要取得與給定介面關聯的公用 IP 位址,請先從該介面取得 MAC 位址,然後從實例元資料服務 (IMDS) 擷取您要尋找的資訊。因此,在上面的範例中,eth1 有 MAC 位址06:a6:9a:4a:98:c6,因此您可以透過以下方式取得公共 IPv4 位址:

curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:1d:90:af:65:a3/public-ipv4s

有更多資訊在AWS 文件

關於您的連線問題,首先,請仔細檢查與每個 ENI 關聯的 VPC 路由、ACL 和安全性群組配置。這些詳細資訊很容易配置錯誤,如果您錯過某些內容,可能會導致流量下降。首先檢查這些詳細信息,然後再回來閱讀本文的其餘部分。當您有多個 ENI 與一個實例關聯時,還會出現另一個更微妙的問題,這可能是您的問題。

AWS VPC 實施嚴格的反欺騙保護。這是一件好事,因為它可以保護 AWS 及其客戶在實例因某種原因受到損害時免受各種形式的網路攻擊。但是,在將多個 ENI 附加到實​​例時需要考慮這一點。

問題是基本路由行為僅由目的地傳出資料包的。這意味著對入站資料包的回應可能不會透過接收原始資料包的相同介面傳輸。但對於 VPC 而言,這被視為「欺騙」資料包,因為回應資料包中的來源位址與 ENI 關聯的任何私人 IP 位址都不匹配。

考慮以下介面配置和路由表:

admin@ip-10-0-0-115:~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s5
    inet 10.0.0.115/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2801sec preferred_lft 2801sec
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s6
    inet 10.0.0.8/24 brd 10.0.0.255 scope global dynamic ens6
       valid_lft 2889sec preferred_lft 2889sec


admin@ip-10-0-0-115:~$ ip ro
default via 10.0.0.1 dev ens5
10.0.0.0/24 dev ens5 proto kernel scope link src 10.0.0.115
10.0.0.0/24 dev ens6 proto kernel scope link src 10.0.0.8

在本例中,10.0.0.8 是分配給 ens6 的位址。發送至此 IP 位址的入站資料包將透過 ens6 接收並如預期般處理。但對該資料包的出站回應將根據上述路由表進行路由,並將透過 ens5 傳出並被 VPC 丟棄。

你可以這樣測試:

admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens5 uid 1000
    cache

請注意,設備是 ens5,儘管 10.0.0.8 已分配給 ens6! VPC 將丟棄此流量!

為了確保您的資料包由 VPC 傳送,您需要實施策略路由。從廣義上講,策略路由是指系統使用目的地以外的附加資訊來做出路由決策的情況。在這種情況下,您還需要考慮來源 IP 位址。這裡我們需要做的是確保任何來源位址為 10.0.0.8 的傳出封包都透過 ens6 離開。

Linux 中的策略路由通常使用ip(8)指令進行設定。為了使具有上述路由表的實例正常運作,您需要建立一個特定於 ens6 的輔助路由表。操作輔助表的方式與操作「主」表類似,只是您指定了表 ID。因此,在這種情況下,我們可以新增一條到本地網路的路由和一條透過網關到表 10000 的預設路由,如下所示:

admin@ip-10-0-0-115:~$ sudo ip ro add 10.0.0.0/24 dev ens6 table 10000
admin@ip-10-0-0-115:~$ sudo ip ro add default via 10.0.0.1 table 10000
admin@ip-10-0-0-115:~$ ip ro show table 10000
default via 10.0.0.1 dev ens6
10.0.0.0/24 dev ens6 scope link

並根據下表建立一條規則以路由來自 10.0.0.8 的傳出流量:

admin@ip-10-0-0-115:~$ sudo ip rule add from 10.0.0.8/32 table 10000 pref 10000
admin@ip-10-0-0-115:~$ ip rule
0:      from all lookup local
10000:  from 10.0.0.8 lookup 10000
32766:  from all lookup main
32767:  from all lookup default

請注意,規則 10000 的存在表示來自 10.0.0.8 的流量將透過表 10000 進行路由。

我們可以再次確認這一點ip ro get

admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens6 table 10000 uid 1000
    cache

請注意,它是根據表 10000 進行路由的,但更重要的是,它將透過裝置 ens6 發送!

當您的執行個體附加多個 ENI 時,Amazon Linux 會自動設定這樣的策略路由規則。我不知道 Ubuntu 是否這樣做,所以您可能需要在這方面做一些研究,並可能針對您的特定情況實現您自己的自動化。

相關內容