迁移通知
本站内容正在逐步向 https://www.weiran.ink 迁移,更新内容请到新站查找。
火绒杀毒软件与Win10 WSL1子系统的网络服务冲突
今天玩儿WSL,碰上了一个相当灵异的问题,最后发现是火绒安全软件的问题,相当遗憾。
过程
起因是试图在WSL下开sshd
服务。
按照这篇教程,设置了sshd
服务,包括设置只监听127.0.0.1
(安全原因),开启允许密码登录,设置防断线心跳包,生成key
等等。然后又搞了一下设置sudoer
以允许无密码开启sshd
服务:
metorm ALL=(ALL) NOPASSWD: /usr/sbin/sshd -D
比较琐碎,也就懒得仔细写了,都不是关键问题。
问题在于,一切做好之后,发现无论如何搞就是不能登录——无论如何搞,意思就是没有报错,并且提高权限、加防火墙规则乃至关防火墙等等都没有解决问题。
开始怀疑是刚才改sshd_config
文件出的问题,于是首先试图把绑定127.0.0.1
那一行改回默认,也就是监听所有地址,然后就崩了:
http: ../sysdeps/posix/getaddrinfo.c:2603: getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)' failed.
有人说关掉ipv6
,但是我这混教育网的,ipv6
是关不得的。
于是试图关掉4->6
隧道,无效。
又有人说重启,想想装完WSL确实没有重启呢,结果重启之后无效。
于是乎,开始怀疑WSL莫非所有的服务都出问题了?用netstat -a
查看了开启的端口,结论是WSL下这个命令貌似猫用都没有,总是空的。
尝试了Python自带的http服务,果然,无法访问(不过也没有崩溃)。
于是扩大搜索范围,找到了`github`上的报错,问题指向了我安装的火绒杀毒。验证就很简单了,首先尝试退出火绒,问题依旧;于是再进一步,完全卸载之,重启,发现一切正常。
结论们
- WSL下的
netstat -a
是无效的,总是空的 - 火绒安全软件会由于某种原因,无提示阻断WSL中开启的一切网络服务,即使你没有开火绒自带的防火墙,即使你退出了软件
python2
下非常好用的python -m SimpleHTTPServer
服务,在python3
中升级为python3 -m http.server
- 很多教程建议,在使用
计划任务
功能实现开机启动sshd
服务的时候,勾选“最高权限运行”以防出现权限问题。然而这样做会造成bash
可执行文件下一直挂着一个高权限进程,再次启动它就会出现“已经有一个实例以最高权限运行”的错误,简而言之就是后面要用WSL
的话都需要以管理员身份启动。这显然是无法接受的。我去掉了计划任务中“最高权限”的内容,也没见出什么问题。