iT邦幫忙

0

[AWS] 請教如何讓Linux EC2 instance 直接對應到一個外部的 IP address?

想請教各位大大,關於AWS上的EC2 intance IP address

我想要達到的目的是,當我的EC2 Instance是裝Linux時,我希望在Linux裡面,對應的IP address是public IP address,而不是private IP address,我該怎麼修改設定呢?!

因為不論在建立一個EC2 instance是有指定一個Public IP address (Elasic IP)或沒有,在instance建立之後,裡面都是配一個private IP address,即便設定了一個Public IP給這台EC2,但從shell console來解析自己的instance,還是private IP,但是對於某些應用程式來說,沒法透過像是NAT的方式轉換來運作,會無法正常提供服務給外部使用者。

該怎麼做,才能讓AWS Linux EC2 instance,在內部設定上,也是直接對到Public IP address呢? 謝謝~

zanhsieh iT邦新手 4 級 ‧ 2019-07-01 02:35:56 檢舉
方案一:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html
方案二:
curl http://169.254.169.254/latest/meta-data/public-ipv4 -> cloud-init 或者 cron on boot 腳本
yenct iT邦新手 5 級 ‧ 2019-07-01 09:50:05 檢舉
您好,我研究看看,謝謝您。

1 個回答

2
raytracy
iT邦大神 1 級 ‧ 2019-06-30 23:25:21

先問: 甚麼樣的應用程式, 不能透過 NAT 的方式轉換來運作?
我好像還沒見過這樣的設計, 除了特別將 IP 綁定軟體授權以外...

若不是在公有雲上, 使用這樣的軟體, 你們都怎麼設計防火牆?

看更多先前的回應...收起先前的回應...
yenct iT邦新手 5 級 ‧ 2019-07-01 00:00:09 檢舉
  1. 若不是在公有雲上,就只能在私有雲裡面的電腦可以使用。
  2. 僅開這軟體所接受的port號。

所以,如果要對外,這軟體就必須有一台獨立電腦是Public IP的。請不用問能否請工程師修改,目前無法。 @@"

但AWS上面我找不到這樣的設定或調整。
阿里雲上的Instance設定是允許直接assign一個public IP到該instance上,就可以解決此問題,但目前沒打算使用阿里雲。
Azure與GCP我不確定可不可以,沒特別研究。

raytracy iT邦大神 1 級 ‧ 2019-07-01 01:15:20 檢舉

我猜, 這可能不是 web based 的應用軟體?

如果是用常見的 Web Server 運作的話, 我想不出有甚麼理由, 寫出來的軟體不能通過 NAT?

我印象中 AWS,GCP,Azure 的 VPC 好像都不能這樣做

回過頭來看, 其實你不需要膠著在:

讓 Server 上 Public IP

這件事情, 若如您 1. 所述, 私有雲裡面可以用的話, 其實你可以讓 Server 保持用 Private IP, 也不用指定 Public IP 給他, 但是請所有的 Client, 通通打 VPN 進 AWS 的 VPC, 這樣全部的 Client 就會跟 Server 是同一個 Subnet, 是 Flat route, 中間不會經過 NAT 了....

還有一個方法是:
改用純 IPv6 的 Public IP, 這樣就不會過 NAT 了...

此外, 我也好奇: 除了阿里雲可以這樣用之外, 騰訊雲和百度雲也可以這樣指定嗎?

yenct iT邦新手 5 級 ‧ 2019-07-01 09:49:46 檢舉

您好,確實不是Web based 的應用程式。
用VPN可能不是這麼適用在此情境。

我們的需求有點類似在防火牆的DMZ上架設這個服務,但機器本身需直接指派一個Public IP,不能是private IP,這樣程式本身才能正常運作且能讓外部使用者使用到這台的服務。

但目前看來AWS都是把所有的VM會放入一個VPC中,裡面都給的是private IP,再透過AWS的機制讓Public IP對應到private IP的VM,有點像是NAT的方式。

騰訊雲與百度雲這兩個目前也都沒有試過。

yenct iT邦新手 5 級 ‧ 2019-12-19 14:15:39 檢舉

[2019-12-19] 後續

結論:目前AWS上EC2確實無法讓這軟體(支援H.323/SIP protocol等相關的) 100%的功能運作。

這問題困擾了半年,但在11月的時候,有機會跟AWS的技術顧問尋求協助,在業務的協助下開了一個技術的support ticket。技術顧問有建議可以調整的部分包含了 source/distination check 的關閉 (預設是開啟的) / 允許更寬範圍的 UDP port - 1024~65535 (軟體原廠建議 3000-10000即可)

確實,在調整了這兩個部份的當天,我們的軟體確實能短暫的打通了任督二脈,原本無法使用的功能就突然可以運作了;但好景不常,當天測試完,關閉了VM,隔天再進行相同測試時,就打回原形了。 @@" (那。。。變動的那天為何可以?? 只能是個謎了)

另外,AWS VPC的firewall port session timeout時間,TCP是5天 (沒打錯,真的是5天),UDP是300秒。

有詢問顧問是否可以針對我們的VPC改變TCP session timeout的時間,我想將TCP縮短至30分鐘,但技術顧問說無法只針對我們VPC,只好作罷。。。(我有點懷疑是否是因為session timeout太長,被占用掉未釋放所至,但無法調整來驗證)

業務也尋求其他技術顧問的看法,結果最後就是告知目前AWS無法支援我們的軟體在VPC的EC2上運行。

另外,我們也在中華電信(CHT)的雲環境中測試,雖然CHT的雲環境可以提供直接網卡綁public IP的這類VM,但實際測試,也是發現部分功能無法運作。。。很神奇。。。但只能說,應該也還是雲端平台商它們firewall的topology或設定等等之類的限制吧。。。

目前看來:

  1. AWS VPC 無法
  2. CHT 無法
  3. 阿里雲 經典網路 可以 / VPC網路 無法
raytracy iT邦大神 1 級 ‧ 2019-12-19 15:09:46 檢舉

如果是 SIP/H.323 的話, 那這樣聽起來就很合理了....

一般企業內的防火牆, 對於 SIP 協定過 NAT 的問題, 需要靠一個 ALG (Application Layer Gateway) 來協助中介處理, 所以他並不是單純只用 FW 內建的 Stateful Packet Filter 就可以解決掉...

但是雲上面的 FW 都沒有 ALG 機制, 因此也造成你缺少了中介轉換機能, 導致 SIP/H.323 功能不正常, 這點是可以預期的....

這問題很多年前就知道了:
Is ALG (Application Level Gateway) features supported in AWS Internet GW ?

但印象中 Asterisk, 3CX 的 IP-PBX 他們好像都可以用雲去跑...我想想有沒有甚麼可以在雲上面跑的 SIP ALG...

這裡有些原理和解法可以先參考:
NAT and VOIP

yenct iT邦新手 5 級 ‧ 2020-01-15 14:28:41 檢舉

謝謝raytracy您的分享。

我要發表回答

立即登入回答