如何确定服务器上的端口是否打开?如果端口已关闭,我该如何打开它?

如何确定服务器上的端口是否打开?如果端口已关闭,我该如何打开它?

我刚刚在服务器上设置了 ElasticSearch,但似乎无法远程连接到它(默认端口为 9200)。我可以通过 localhost 连接到它,但当我指定 IP 地址时无法远程连接到它。我猜这是因为端口已关闭(但我不确定)。因此,我想知道如何检查给定端口是否打开,以及如何打开可能已关闭的端口。

答案1

要检查服务器上的开放端口,您可以以 sudo 身份执行以下操作:

iptables --列表

打开 TCP 端口(端口 9200)

iptables -I 输入 -p tcp --dport 9200 --syn -j 接受

对于 UPD 端口,您可以使用(端口 9200)

iptables -I 输入 -p udp --dport 9200 -j 接受

最后,要保存更改,请使用:

服务 iptables 保存

但是,正如@Codezilla 提到的,您可能位于路由器后面,需要转发端口。

答案2

听起来你位于路由器后面,你可能需要转发端口。如果是这种情况,请查看此站点,了解如何设置端口转发的简单指南。你必须在路由器上转发端口,以便来自网络外部的人可以访问特定端口上的特定应用程序/服务。基本上,它告诉路由器,每当有人想要查看你 IP 地址上的 Web 服务器(或 ElasticSearch 应用程序)时,它就知道将该请求转发到路由器后面的相应计算机。

http://portforward.com/english/routers/port_forwarding/routerindex.htm

答案3

有几种方法可以做到这一点。

首先,您在哪个操作系统上托管 ElasticSearch?Windows 还是 Linux?您说的远程是指除您的计算机之外的其他计算机,还是指未连接到互联网上的 LAN 的计算机?

为方便将来参考,请在帖子中说明您使用的操作系统。直到我花了 20 分钟撰写有关如何在 Windows 中执行此操作的回复时,我才注意到 CentOS 标签...

尝试

sudo iptables -L

您是否在该列表中看到允许端口 9200 的规则?如果没有,您可能只需添加一条新规则以允许 9200 上的连接(我猜是 TCP)

尝试一下(以 root 身份)

iptables -A INPUT -m tcp -p tcp --dport 9200 -j ACCEPT  
iptables -A INPUT -m udp -p udp --dport 9200 -j ACCEPT

答案4

如果您有权限问题,您可以尝试使用sh来保存您的iptables配置:

sudo sh -c "iptables-save > /etc/iptables/rules.v4"

相关内容