8月13日,突然clash订阅就不能用了,显示i/o timeout

  1. 最开始以为是被墙了

    • 当时第一反应就是被墙了,但是经过ip和端口的ping和curl测试发现没有被墙,域名也没有被抢
  2. 完全无法访问外网

    • 通过azure cls登录后,发现v2ray和Nginx都在正常运行,所以也排除了脚本出问题

    • 这个时候我想用apt update检查依赖并且更新依赖,结果得到了无法访问ubuntu依赖仓库的报错

    • 这个时候事情就变得魔幻了,我开始尝试

      1
      ping www.google.com

      但是发现package 100% loss

      但是

      1
      ping 127.0.0.1

      完全正常

  3. 检查dns

    • 论坛上查询后有人说可能是dns解析时间过长(因为azure默认使用由azure特别提供的dns,然而这个dns会定期抽风),于是我将vps的dns换成了1.1.1.1,但是无济于事,并且我ping 1.1.1.1也是不通的,所以应该不是dns解析的问题
  4. 检查防火墙规则

    • 接下来有人说可能是防火墙,但是我的ubuntu本身的防火墙早就为了省事禁用了,azure自己的安全组也是早就配好了的,为了验证这一点,我甚至尝试直接允许了所有inbounds和所有outbounds,但是还是不行
  5. 检查虚拟网卡

    • 在一段长时间痛苦的迷思之后我想到了NIC,azrure的vps都是通过虚拟网卡获得mac地址并且上网的,而这个虚拟网卡,根据论坛网友的反馈,也经常抽风

    • 我一开始想的是干脆把整个网络服务重启算了

      1
      service network restart

      结果vps没有network这个service

    • 所以还是通过卸载网卡来处理

      1
      ifconfig

      首先查看网络配置

      发现了虚拟网卡eth0

      接着卸载它

      1
      ifconfig eth0 down

      本来我下一步是up,结果我忘了我是远程连接vps的,这一下直接给vps干失联了…

    • 但是最好玩的是当我回到控制台,发现vps正在重启,重启完成以后,vps又能正常上网了,clash也能用了…

  6. 复盘

    • 其实我到现在也没想明白导致这一切的原因,不过有一种可能的解释:

      • 我是通过vmess+tls+wf+tcp出境的,为了访问chatgpt还套了一层cloudflare warp

      • 这一套虽然用起来很爽,但是因为我两个部分使用github上不同大神的不同一键脚本分别部署的,而这两个脚本的依赖之间似乎有冲突,所以我运行了一段时间之后,Nginx就突然停止运行了

      • 我当时并没有多想,直接重启了Nginx服务,就这样又搞了几周,依赖冲突终于在一天爆炸了,当时我登录后好多命令都不能用了(

        • 为了修复我是这么做的

        • sudo dpkg --configure -a
          sudo apt-get install -f
          sudo dpkg -i --force-overwrite /var/cache/apt/archives/*package+name*
          
          1
          2
          3
          4
          5
          6
          7

          这确实解决了dkpg的问题,但是或许也一起干掉了azure的虚拟网卡需要的一些依赖,因为我当时一心想着重装v2ray,其他被干掉的包都没怎么管

          - 最后我的这条命令

          - ```shell
          ifconfig eth0 down
          或许触发了azure vps的某种保护机制,促使azure重新为我的vps装载了虚拟网卡

后记:

问题解决了吗?我想没有,也许再过两天Nginx又会停止运行,下一次遇见这个问题,我不能再像个无头苍蝇一样乱搞了,应该先读一读那两个脚本的源码,看看它们到底对我的vps做了什么…