Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Proposal] 支持 DNS Upstream "fake" #567

Open
mzz2017 opened this issue Jun 28, 2024 · 5 comments
Open

[Proposal] 支持 DNS Upstream "fake" #567

mzz2017 opened this issue Jun 28, 2024 · 5 comments

Comments

@mzz2017
Copy link
Contributor

mzz2017 commented Jun 28, 2024

Proposal

#565 反映了一个问题,考虑如下情况:

  1. 公司/学校的内网 dns 服务器上提供 example.edu.cn 或 abc.example.company 的解析,指向内网服务器,而在公网 dns(例如运营商和 alidns)没有该解析,从而使得只有在内网(通过网线/wifi连上公司/学校网络)可以访问某些域名
  2. 公司/学校使用了 easyconnect 作为 vpn 服务,提供了远程接入方式
  3. 居家办公或正在休假的员工/学生使用了类似 docker 化 easyconnect 并开放了 http 代理端口的方式使得宿主机可以通过 http 代理接入公司/学校内网进行工作/学习
  4. 通过 HTTP(S)_PROXY 环境变量或 curl -x 可以直接访问到上述域名,因为传统代理直接发送域名到代理服务器且不先进行 dns 解析
  5. 通过 dae 无法访问上述域名,因为上述域名在 public dns 上无法解析,从而不会通过代理进行转发

对于 #565 的问题,需要完善文档,如何透过 dae 和跳板机访问公司内网。

另一个方式是支持“fake” upstream,对特定的 qname 设置使用 fake upstream,从而返回一个 fake ip,绕过 dns 解析。

例如

qname(geosite:cn)->alidns
qname(suffix:company)->fake
fallback: googledns

有两种实现方式:

  1. 由于只需要解决特定问题,可以实现为返回固定 dummy ip,例如 127.114.5.14。dae 在遇到该 ip 时跳过 ip routing 规则(ip 规则将失效),并无条件使用嗅探结果,并向代理服务器发起请求,嗅探失败时拒绝请求。如果这样实现,建议改为 upstream 取名“dummy”。
  2. 完整实现 fakeip。在 dns 侧建立映射,跳过 ip routing 规则(ip 规则将失效),使用映射域名进行路由并发起请求。

如果完整实现 fakeip,尽管不是推荐的方式,但用户可以通过 dns request routing 里使用 fallback: fake 来全部使用 fakeip。

需要广泛讨论。

Use Cases

如上

Potential Benefits

  1. 减少特殊情况下的配置复杂度。
  2. 对特定域名可以减少一次 dns 请求次数。

Scope

No response

Reference

No response

Implementation

No response

@dae-prow
Copy link
Contributor

dae-prow bot commented Jun 28, 2024

Thanks for opening this issue!

@Mitsuhaxy
Copy link

属于特殊需求,直接添加hosts解析功能是否更妥?

@mzz2017
Copy link
Contributor Author

mzz2017 commented Jul 1, 2024

hosts 只能单个单个添加。

这个功能先搁置了,后续有其他问题或更多人有类似需求再推动。先完善文档。

@marsjane
Copy link

marsjane commented Jul 2, 2024

之前使用tcp的方式好像在某些情况下还是会有bug(目前发现的是网站一些操作还是有问题),我切换回用clash的方式是没问题的,所以目前有什么办法我可以直接跳过DNS解析直接进入routing规则么?上面提到的hosts的方法我不是很懂,hosts是静态的吧?如何让特定域名直接走代理呢

@troubadour-hell
Copy link
Contributor

建议学有余力者fork个fakedae实现fakeip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants