简述

在配置服务器的时候,遇到了这个问题。我当时明明已经搭建好了服务,但是我在客户端比如手机上,却怎么都连不上服务器。看日志的话显示的是connection refuesed + timeout

这种情况,大概率是服务器的端口没有被打开。 我们只需要把端口打开就好了。

检测端口是否被打开方式

如何打开端口

Q: 有很多人会想,我的服务器防火墙明明都已经关了,为什么还是连不上呢? 比如看到提示firewallD is not runningA: 这个其实是这样,大部分人在云服务器商那买的服务器看着是把防火墙关了,但实际上云服务商本身不可能把服务器的所有端口都暴露出来的(这样风险很高),所以大概率其实在外面包了一层,那一层的只暴露了特定的端口。

因此需要把防火墙打开(先别急着打开!!!)

因为很有可能,一旦你打开了防火墙, ssh就连接不上了。

因此我们需要先解决ssh连接的问题之后,再去打开防火墙。

以下操作,都需要保证使用的是root身份

开防火墙前的ssh配置检查

  • 查看对应的端口。
cat /etc/ssh/sshd_config |grep Port

比如我的输出是

#GatewayPorts no
Port 28825

记住这个数字28825,下面有用

  • 接下来需要修改 /etc/firewalld/zones/public.xml 这个文件,添加一行
<port protocol="tcp" port="28825"/>
  • 看下输出,改成下面这个样,就可以了。
cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="28825"/>              
</zone>

打开防火墙,开放特定端口

  1. 打开防火墙
systemctl start firewalld
  1. 开放特定端口
firewall-cmd --zone=public --add-port=31000/tcp --permanent
firewall-cmd --zone=public --add-port=32000/tcp --permanent
  1. 重新加载配置
firewall-cmd --reload

然后就可以了,比如我这里是开放了3100032000两个端口的tcp连接

补充

部分用户可能需要用到端口转发的功能,比如说将从31000-32000端口都转发到特定的端口上,比如1194上,可能需要下面这个命令

firewall-cmd --permanent --query-forward-port=port=31001-32000:proto=tcp:toport=1194