尝试连接到 Oracle Cloud Intance 上的 TCP 服务时出现“无主机路由”

尝试连接到 Oracle Cloud Intance 上的 TCP 服务时出现“无主机路由”

我创建了一个 Ubuntu 实例Oracle 云基础设施 (OCI)。我能够使用 SSH (TCP 22) 连接到此实例。我在此实例上创建了一些服务,例如 daytime (TCP 13)、mail (TCP 25)、http (TCP 80)、dns (TCP/UDP 53)。我向默认安全列表在本实例的 OCI 管理网页上,类似于默认的 SSH 规则。但是,当我尝试连接到任何我从 Internet 访问这些服务时出现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 不起作用的情况下您仍然无法连接,那么这可能是亚马逊云中的设置问题,我对此没有经验。

相关内容