-
Notifications
You must be signed in to change notification settings - Fork 24
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
feat: add dns-hijack for tun mode #45
Conversation
我感觉和fake-ip还有一些区别,在tun只接管10.0.0.0/8的前提下没法做正常的dns劫持,所以只能将用户的/etc/resolve.conf 改成比如举个例子 1.2.3.4, 然后路由表里面加一条规则 1.2.3.4的ip去tun设备,这样用户对1.2.3.4的udp dns请求就会被发送到tun设备中,就可以进行劫持 mac由于是强主机模型 https://learn.microsoft.com/zh-cn/previous-versions/technet-magazine/cc137807(v=msdn.10)?redirectedfrom=MSDN
|
@Mythologyli https://github.com/Mythologyli/zju-connect/blob/403c98d6aaf05360665d7c1dfacafed7842de2b9/main.go#L141C1-L143 这里是否应该启一个协程,更符合其代码语义,测试过使用协程对程序执行逻辑没有影响 |
9f0d967
to
0dbae1b
Compare
啊,这个是我写的时候疏忽了,确实应该启一个协程 |
已在该分支修复,后续合入即可解决 |
Android有这种需求的话我觉得也完全OK 👍 |
macos下发现了一种十分甚至9分优雅的方法,创建/etc/resolver/hostname 的文件,向其中写入 nameserver a.b.c.d 即可做到对hostname后缀的域名使用a.b.c.d进行解析,这种用法相当符合我们的场景,只需要创建zju.edu.cn和cc98.org等文件即可,a.b.c.d是tun网卡的ip。 cc btw,macos这种区分domain和search domain的行为感觉其实更加合理,linux就没法(不使用其他软件的情况下)做到根据域名使用不同的dns。 至此windows/linux/macos都可以以一种比较优雅的方法实现dns-hijack |
现在dns-hijack已经基本可用,相比于最初的设计有如下的改动,clientIP代指拿到的10.a.b.c的ip
@Mythologyli 辛苦测试下windows的效果,俺不太懂windows 🙇🙇 |
感觉差不多可以合并了~ |
此PR旨在为zju-connect提供基本可用的dns劫持,使用户可以在tun模式下更方便的访问*.zju.edu.cn
目前tun模式使用的是10.0.0.0/8的路由,无法劫持所有流量,所以不同os下实现的方法不同。
通用的实现细节:
os相关的细节:
9500: not from all dport 53 lookup main #注意这里不能用前缀抑制!!!! 9510: not from all iif lo lookup 1234 9520: from 0.0.0.0 iif lo uidrange 0-4294967294 lookup 1234 9530: from 10.a.b.c iif lo lookup 1987 ip route add default dev tun0 table 1987