解决思路
1、使用 netstat -nplt 查看端口上 tcp, 还是 tcp6
2、查看是否只绑定在 ipv6 上 sysctl net.ipv6.bindv6only
3、查看ipv4 上可以转发数据:sysctl net.ipv4.ip_forward
4、查看防火墙是否禁用端口
一、 查看端口
[root@app01 ~]# netstat -tnlp |grep 80
tcp 0 0 192.168.180.45:2379 0.0.0.0:* LISTEN 17092/etcd
tcp 0 0 192.168.180.45:2380 0.0.0.0:* LISTEN 17092/etcd
tcp6 0 0 :::20080 :::* LISTEN 11937/docker-proxy
tcp6 0 0 :::1080 :::* LISTEN 13449/docker-proxy
可以看出 20080端口只出现在 tcp6 上.
二、查看 ipv6
[root@app01 ~]# sysctl net.ipv6.bindv6only
net.ipv6.bindv6only = 0
0 表示没有仅仅绑定在ipv6上
若果要解决:
vim /etc/sysctl.conf
#添加下面这行
net.ipv6.bindv6only=1
#然后保存退出. 重启网络
systemctl restart network
三、查看 ipv4 转发状态
[root@app01 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
1 表示可以转发, 也就是说 tcp6 上的数据也可以能过 tcp 转发
如果是0,解决
vi /etc/sysctl.conf
#添加下面这行
net.ipv4.ip_forward=1
#然后保存退出. 重启网络
5.重新加载sysctl配置或者重启网络
sysctl -p
#or
systemctl restart network
四、防火墙
firewall-cmd --zone=public --add-port=20080/tcp --permanent #允许tcp的3306端口到public区域。