ipv6只能被ping不能当服务器的解决方法
Sean516494646
编辑于 2023年08月10日 02:38

家里是移动网络,移动很贴心的给了ipv6,能ping,但是不能监听

我用好基友电信的网测试的Linux服务器验证,很遗憾,只能ping

我写了个Python脚本来验证,发现不能当服务器用(代码贴在后面)

网上大把人的ipv6是能用的,也搜不到相关的问题

这个问题一直让我百思不得其解,无意中想起来是不是路由器防火墙在搞鬼,因为我家是路由器拨号,光猫桥接

然后我把路由器的ipv6防火墙关了,我是小米的路由器,用的ssh关的,代码是

代码块
JavaScript
自动换行
复制代码
ip6tables -F ip6tables -X
ip6tables -P INPUT ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD ACCEPT
复制成功

然后就可以用了

襄阳移动很良心,居然没封80端口,特地注明,2023.08.09,欢迎留言

服务端代码

代码块
JavaScript
自动换行
复制代码
# -*- coding: utf-8 -*-
import socket
from threading import Thread
def nlink(links):
    print (addr);
    while True:
        date=links.recv(10240);
        if not date:
            break
        print(date.decode('utf-8'));
    links.close();
sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
sock.bind(('2409:8a4c:5212:6c50:8594:xxxx:xxxx:xxxx',2333))
sock.listen(5);
while True:
    link,addr = sock.accept();
    thread=Thread(target=nlink,args=(link,))
    thread.start()
复制成功

客户端代码

代码块
JavaScript
自动换行
复制代码
# -*- coding: utf-8 -*-
import socket
ip_port = ("2409:8a4c:5212:6c50:8594:xxxx:xxxx:xxxx",2333)
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0)
s.connect(ip_port)
msg="这是个消息"
s.sendall(msg.encode('utf-8'))
s.close()
复制成功

上面四行代码不能永久解决问题,可以进入SSH修改小米路由器防火墙

代码块
JavaScript
自动换行
复制代码
```vi /etc/config/firewall```
复制成功

把这些REJECT改为ACCEPT

代码块
JavaScript
自动换行
复制代码
config defaults
        option forward 'REJECT'

config zone
        option input 'REJECT'
        option forward 'REJECT' 
复制成功

重启防火墙永久解决问题

代码块
JavaScript
自动换行
复制代码
/etc/init.d/firewall restart
复制成功