Replies: 1 comment
-
这是一个很好的想法,稳定的映射可以帮助V2Ray重启后设备快速恢复连接。实际使用时,我通常需要重启浏览器或者重新连接网络来刷新DNS。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
此讨论受此issue启发:shadowsocks/shadowsocks-rust#1906
正如问题中所描述的,TTL、DNS 缓存造成的不一致性的确会造成一些问题,a.com重定向成b.com这样的情况确实有可能发生,在实际使用中我通过观察服务器日志发现,某些时候v2ray甚至会直接将fakeip直接路由到服务器,重启则可能会造成断网一段时间,所以使用基于哈希的稳定映射不失为一种解决方案。
以下是我使用AI生成一个简单实现,使用xxhash3和线性探测解决碰撞,我已经在我的透明代理环境中使用了几天,到目前为止它似乎工作正常~ 这种方式即使重启也能够保持相对稳定的映射关系。
我想讨论一下将该方案整合到 v2ray 的可行性,下面的代码移除了之前的 IP 分配逻辑和 Lru 淘汰机制,但是在实际实现中,我们可以保留原版的功能,并通过增加配置选项使用新特性,例如我们可以增加一个
StableMapping bool
选项来使用稳定映射。对于 IP 池满的问题,我们假定显式的指定 StableMapping 的用户知道自己在干什么,如果池满我们可以简单的抛出一个错误,提醒用户设置更大的 IP 地址池,而且在实际使用中 fakedns 通常仅解析特定的域名列表,典型的是 gfwlist 即使默认的 ipv4 地址池也不应该轻易出现池满问题。
要彻底解决问题还需要配合数据持久化,简单方案可以使用GOB,或者干脆使用kv数据库。
另外有一点想法供开发人员参考:
fakedns 能否作为入站协议或者直接在 DNS 设置中设置监听端口作为一个标准 DNS 服务器来使用?这对于使用 iptables 或 nftables 进行分流的用例十分有用,局域网中的 DNS 服务器只需要将特定的查询转发至 fakedns 即可, 如果我们有了一种稳定的映射方式,DNS 缓存也不再是问题。目前要以这种方式使用 fakedns 我们不得不采取一些迂回的方式,在入站设置一个 dokodemo 并通过路由设置将流量路由到出站 DNS。
很遗憾我无法为此提交PR,我不是专业人士。
以上 @xiaokangwang
注意:以下代码完全AI生成,未作修改和调试,仅做参考。
Beta Was this translation helpful? Give feedback.
All reactions