火绒杀毒软件与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`上的报错,问题指向了我安装的火绒杀毒。验证就很简单了,首先尝试退出火绒,问题依旧;于是再进一步,完全卸载之,重启,发现一切正常。

结论们

  1. WSL下的netstat -a是无效的,总是空的
  2. 火绒安全软件会由于某种原因,无提示阻断WSL中开启的一切网络服务,即使你没有开火绒自带的防火墙,即使你退出了软件
  3. python2下非常好用的python -m SimpleHTTPServer 服务,在python3中升级为python3 -m http.server
  4. 很多教程建议,在使用计划任务功能实现开机启动sshd服务的时候,勾选“最高权限运行”以防出现权限问题。然而这样做会造成bash可执行文件下一直挂着一个高权限进程,再次启动它就会出现“已经有一个实例以最高权限运行”的错误,简而言之就是后面要用WSL的话都需要以管理员身份启动。这显然是无法接受的。我去掉了计划任务中“最高权限”的内容,也没见出什么问题。
  • 最后更改: 2019/05/29 15:48