简述
在配置服务器的时候,遇到了这个问题。我当时明明已经搭建好了服务,但是我在客户端比如手机上,却怎么都连不上服务器。看日志的话显示的是connection refuesed
+ timeout
这种情况,大概率是服务器的端口没有被打开。 我们只需要把端口打开就好了。
检测端口是否被打开方式
- https://tool.chinaz.com/port
- 在上面输入自己的ip地址,以及对应的端口号
- 扫描一下就知道了
如何打开端口
Q: 有很多人会想,我的服务器防火墙明明都已经关了,为什么还是连不上呢? 比如看到提示firewallD is not running
A: 这个其实是这样,大部分人在云服务器商那买的服务器看着是把防火墙关了,但实际上云服务商本身不可能把服务器的所有端口都暴露出来的(这样风险很高),所以大概率其实在外面包了一层,那一层的只暴露了特定的端口。
因此需要把防火墙打开(先别急着打开!!!)
因为很有可能,一旦你打开了防火墙, ssh
就连接不上了。
因此我们需要先解决ssh连接的问题之后,再去打开防火墙。
以下操作,都需要保证使用的是root身份
开防火墙前的ssh配置检查
- 查看对应的端口。
cat /etc/ssh/sshd_config |grep Port
比如我的输出是
#GatewayPorts noPort 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>
打开防火墙,开放特定端口
- 打开防火墙
systemctl start firewalld
- 开放特定端口
firewall-cmd --zone=public --add-port=31000/tcp --permanentfirewall-cmd --zone=public --add-port=32000/tcp --permanent
- 重新加载配置
firewall-cmd --reload
然后就可以了,比如我这里是开放了31000
跟32000
两个端口的tcp连接
补充
部分用户可能需要用到端口转发的功能,比如说将从31000-32000
端口都转发到特定的端口上,比如1194上,可能需要下面这个命令
firewall-cmd --permanent --query-forward-port=port=31001-32000:proto=tcp:toport=1194