|
| 1 | +--- |
| 2 | +title: 没有应答的IPv6长连接 |
| 3 | +date: 2025/02/15 23:08:00 |
| 4 | +updated: 2025/02/16 01:10:00 |
| 5 | +tags: |
| 6 | + - non-ctf |
| 7 | +excerpt: >- |
| 8 | + 开启tproxy后,直连的网站偶尔要等待1分钟才能建立连接,否则就是响应超时,反倒是代理一直都能直接连接。 |
| 9 | + 然而,关闭tproxy后,反而一点问题都没有了,直连几乎没有延迟。在加入了archlinuxcn群组后, |
| 10 | + 我和群友一起排除干扰项,排除了*ray、dns后,真正的根源是... |
| 11 | +--- |
| 12 | + |
| 13 | +到了家之后,我发现代理的tproxy功能很难用,总是导致国内的网站访问起来非常慢, |
| 14 | +也就是说,直连的速度比代理的还慢,甚至偶尔还会发生断连的情况,长达一分钟都显示无响应, |
| 15 | +然而,一旦关闭代理就会恢复正常。这种直连与代理的倒挂,简直就是倒反天罡。 |
| 16 | +恰逢我加入了archlinuxcn群组,在群里交流后,与群友一同揭开了国内IPv6糟糕的现状... |
| 17 | + |
| 18 | +## DNS: Pass |
| 19 | + |
| 20 | +群友首先怀疑的是DNS解析。但是我使用`dog`来尝试解析后,发现解析的速度非常快, |
| 21 | +不超过200ms。无论我怎么测试,都没有变化。我也尝试还原代理中对于DNS的解析规则, |
| 22 | +同样无济于事。 |
| 23 | + |
| 24 | +## 代理: Pass |
| 25 | + |
| 26 | +由于开了tproxy才会导致这样的症状,那么下一个要排查的就是代理了。群友很热心地表示可以帮忙看 |
| 27 | +v2ray的配置并提示记得脱敏, ~~但是我找错路径了,一开始没找到v2raya的v2ray配置, |
| 28 | +结果传的是默认的空配置~~。群友并没有回复我,于是我尝试把系统代理设置设为无代理 |
| 29 | +(KDE),看起来好像国内网站在浏览器中可以正常访问了。于是我尝试更新系统, |
| 30 | +熟悉的问题又出现了:国内的镜像在连接建立后10s内无响应。当我查看日志时, |
| 31 | +写得非常清楚,访问ipv4地址,`[direct]`。又有群友说可以`curl -vI` |
| 32 | +来进一步测试,我尝试`curl -vI https://mirrors.ustc.edu.cn`结果就是有时不到 |
| 33 | +1s就完成了请求,有时则是等了几十秒却无响应。群友让我加上时间戳再发一次log, |
| 34 | +我尝试了http和https,都有被卡住的时候。然而从log里仍然看不出有什么问题。 |
| 35 | + |
| 36 | +## 伏笔:用不了的ipv6 |
| 37 | + |
| 38 | +曾有好友尝试用DeepSeek搭建了网站,并架设在自己家里,通过ipv6向互联网暴露服务。 |
| 39 | +我尝试用手机浏览器直接访问,然而无论是使用移动网络还是Wi-Fi,都无法连接上。 |
| 40 | + |
| 41 | +除此之外,我家的网络结构也比较出人意料。一般人家入户都是光纤,由光猫解调后插在路由器 |
| 42 | +WAN口上。然而我家买的电信宽带,直接入户网线插到路由器LAN口上,没有认证, |
| 43 | +唯一的安全措施是外面的路由器是锁在柜子里的。 |
| 44 | + |
| 45 | +## 只有地址的ipv6 |
| 46 | + |
| 47 | +回归主线,群友让我`strace -p $(pgrep v2ray)`并把log再发一份,这次她找到了共同点: |
| 48 | +所有的失败的请求都是ipv6请求,ipv4请求都是正常的。更令她疑惑的是我的出站ipv6 |
| 49 | +地址可以正确定位到浙江电信,而不是本地ipv6地址,这意味着上游路由器确实给我分配了 |
| 50 | +ipv6地址。一番尝试后,我俩发现 **这个地址既不能发送请求,也不能接受请求, |
| 51 | +只是一味地挂起**,直到超时,连接被关断。不能用的ipv6又有什么用呢? |
| 52 | +合理推测是外面的路由器太老,因此功能是残废的,这时候大概只能打运营商电话投诉了。 |
| 53 | + |
| 54 | +这时候也就不难理解为什么迟迟无法访问一些网站了,由于流量被卡在透明代理上, |
| 55 | +而linux又是优先选择ipv6的,对于代理来说,ipv6解析成功了,连接建立了, |
| 56 | +既没有应答,也没有强制关闭,继续等下去自然是合理的,对于代理来说, |
| 57 | +它只是认为应答比较“慢”而已。 |
| 58 | + |
| 59 | +{% notel purple fa-check 最后的解决方案 %} |
| 60 | +首先我把家里路由器的ipv6功能关闭了,然后把系统设置成了ipv4优先, |
| 61 | +就这样用到现在,没出过什么连接长时间无法建立的情况。 |
| 62 | + |
| 63 | +```ini /etc/gai.conf |
| 64 | +precedence ::ffff:0:0/96 100 |
| 65 | +``` |
| 66 | + |
| 67 | +倒是没必要完全禁止ipv6,万一哪天真需要呢。 |
| 68 | +{% endnotel %} |
| 69 | + |
| 70 | +只能说在国内,宽带方面的IPv6的部署情况实在不容乐观。移动网络IPv6倒是相当普及了, |
| 71 | +可是面对宽带用户的老设备,运营商都抱着“没人投诉就不用管”的心态。 |
| 72 | + |
| 73 | +<img src="/assets/trueblog/vv.png" height="30%" width="30%"> |
| 74 | +<p align="center"><strike><em>最近看张维为的视频有点上头</em></strike></p> |
| 75 | + |
| 76 | +## 后日谈 |
| 77 | + |
| 78 | +由于我的机场的`vmess+ws`的机器有`alterId`,因此我一直使用v2fly核心, |
| 79 | +而没有切换到xray核心。自从edge更新了13x版本后,它在使用QUIC |
| 80 | +协议访问网站时会导致v2fly核心在[嗅探时出bug](https://github.com/v2fly/v2ray-core/issues/3303), |
| 81 | +换用xray后没有问题。(由于xray不支持`alterId != 0`,因此我只能使用SS协议) |
| 82 | + |
| 83 | +{% note green fa-code-pull-request %} |
| 84 | +截至2月15日,这个问题已有PR修复错误,等待Release即可。 |
| 85 | +{% endnote %} |
| 86 | + |
| 87 | +## 参考 |
| 88 | + |
| 89 | +[TUN模式下出现panic: runtime error: slice bounds out of range](https://github.com/v2fly/v2ray-core/issues/3303) |
0 commit comments