在 windows 上安装了 vmware linux . 在 linux 上开启一个服务对外提供8080端口, 而在 windows 上无法访问到.

解决思路
使用 netstat -nplt 查看端口上 tcp, 还是 tcp6
查看是否只绑定在 ipv6 上 sysctl net.ipv6.bindv6only
查看ipv4 上可以转发数据 : sysctl net.ipv4.ip_forward
查看防火墙是否禁用端口.
第一步: 查看端口
netstat -nplt

-> # netstat -nplt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1001/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1156/master
tcp6 0 0 :::8080 :::* LISTEN 28187/output/bin/go
可以看出 8080端口只出现在 tcp6 上.

第二步: 查看 ipv6
sysctl net.ipv6.bindv6only

-> # sysctl net.ipv6.bindv6only
net.ipv6.bindv6only = 0
0 表示没有死死的绑定在ipv6上

解决

vi /etc/sysctl.conf

添加下面这行

net.ipv6.bindv6only=1

然后保存退出. 重启网络

systemctl restart network
第三步: 查看 ipv4 转发状态
sysctl net.ipv4.ip_forward

-> # sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
1 表示可以转发, 也就是说 tcp6 上的数据也可以能过 tcp 转发

解决

vi /etc/sysctl.conf

添加下面这行

net.ipv4.ip_forward=1

然后保存退出. 重启网络

systemctl restart network
第三步: 防火墙
iptables -nL

-> # iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain DOCKER (0 references)
target prot opt source destination

解决
以下为粗暴解决(生产上谨慎操作)

iptables -F
iptables-save
添加防火墙规则

iptables -A INPUT -p tcp -m tcp –dport 8080 -j ACCEPT //开放8080端口
iptables-save

发表评论

邮箱地址不会被公开。 必填项已用*标注