嘗試連線到 Oracle 雲端實例上的 TCP 服務時出現“沒有到主機的路由”

嘗試連線到 Oracle 雲端實例上的 TCP 服務時出現“沒有到主機的路由”

我創建了一個 Ubuntu 實例Oracle 雲端基礎架構 (OCI)。我能夠使用 SSH (TCP 22) 連接到此實例。我在此實例上建立了一些服務,例如白天(TCP 13)、郵件(TCP 25)、http(TCP 80)、dns(TCP/UDP 53)。我加入了類似的規則預設安全列表在這個實例的OCI管理網頁上,類似預設的SSH規則。但是,當我嘗試連接到任何來自互聯網的這些服務我收到No route to host錯誤。唯一的例外是 SSH 服務,它運作沒有問題。

一旦我安裝ufw到這個實例;但是,後來我禁用並刪除了ufw.之後,我iptables也刪除了包裹。所以,現在Linux根本就沒有防火牆了。但是,我仍然有這個問題。

這似乎是一個與 OCI 相關的問題。我在其他雲端平台(AWS、GCP等)上做過類似的配置,沒有任何問題。

我還可以在哪裡尋找來隔離這個問題?


更新:刪除 iptables並重新啟動解決了問題。現在我將嘗試重新安裝 iptables。

答案1

ufw該問題似乎與 OCI 不希望您在 Ubuntu 中使用有關:https://docs.cloud.oracle.com/iaas/Content/knownissues.htm#ufw

我必須按照上面給出的連結中的說明禁用或刪除ufw並編輯該文件。/etc/iptables/rules.v4之後,要啟用新規則,我需要運行:

# iptables-restore </etc/iptables/rules.v4

看來ufw規則在這樣的配置中沒有任何效果,我使用iptables.然而,這並不是一種非常用戶友好的 OCI 平台 Ubuntu 伺服器上的防火牆規則管理方式。

答案2

我在 Oracle 雲端中發現了 Oracle Linux 的這個問題。它具有預先定義的阻止規則集。因此,我成功連接了 22 連接埠 (ssh),但在嘗試連接其他連接埠時收到「沒有到主機的路由」。
您需要單獨開啟連接埠:

例如,對於 Docker:

firewall-cmd  --permanent --zone=public --add-port=2377/tcp
firewall-cmd  --reload

此外,您還需要為虛擬雲端網路設定安全性清單。

答案3

這些是對我有用的確切步驟,基於 FedKad 對他原始帖子的回答...

在 Oracle 雲端上需要執行以下額外步驟,才能在 Ubuntu 20 上開啟連接埠:

  1. sudo vim /etc/iptables/rules.v4 (或您使用的任何編輯器)

  2. 在該行之後 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT,插入:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT

(更改需要開放的連接埠號碼!)

  1. 在 shell 提示字元處:

sudo su -

iptables-restore < /etc/iptables/rules.v4

exit

  1. 新開放的連接埠可以透過繼續進行測試其他Linux 機器,並下達命令:

nc -zvw100 THE_IP_ADDRESS_OF_MACHINE_WHOSE_PORT_WE_OPENED THE_PORT_NUMBER

答案4

它可以位於網路中,也可以位於 Linux 實例中。如果是在 Linux 中,則可以是 iptables 或服務。

要從最後一個開始,並且因為您有郵件,請嘗試在 Linux 機器上:

telnet 127.0.0.1 smtp
helo there
quit

您看到 220、250 和 221 訊息了嗎?然後您的郵件服務就可以工作了。如果您收到Connection refused,則您的服務尚未啟動並執行。

接下來,iptables -nvL應該告訴您連接埠是否對外界開放。如果你的輸出沒有正面或反面,

service iptables stop

應該停止 iptables,這對於測試來說可能是可以接受的。你說你已經擺脫了ufw,所以我認為sudo ufw disable不再需要了。

如果 iptables 關閉後,您仍然無法連接,這可能是亞馬遜雲端中的設置,我對此沒有經驗。

相關內容