我用 Android 开了一个虚拟 tun ,然后通过 tun2sock 转到 tcp 上代理全局浏览,然后加密。然后我需要把代理的流量发出去,我发现我发出去的流量,似乎又发到全局的 tun 上面去了。这样就死循环了。由于我不太熟悉 Android ,网络部分是我用 golang 写的,编译成 ndk 给调用。求问,怎么把流量发出去,不走全局虚拟网卡代理,有偿咨询,解决可以发个红包,请大佬喝杯咖啡。
1
duke807 2022-03-11 13:51:00 +08:00 via Android
linux 的 route 表啊
把目標代理服務器的地址指定用非虛擬的網口傳輸 |
2
madeye 2022-03-11 14:10:09 +08:00
|
3
zxjunz 2022-03-11 15:43:56 +08:00
VpnService.protect()
|
4
FranzKafka95 2022-03-11 15:47:09 +08:00 via Android
@madeye 大佬~
|
5
Goooler 2022-03-11 15:47:52 +08:00
Max 本尊出来了啊,太强了
|
7
shawndev 2022-03-11 16:08:00 +08:00
本来想班门弄斧回答下的,结果鲁班本人现身了。。
|
8
shawndev 2022-03-11 16:22:12 +08:00
如果是通过 go 创建的 tunfd ,外部管理连接,通过 VpnService.protect 可以处理。https://github.com/Jigsaw-Code/outline-go-tun2socks/blob/e08601a0b188ad80baf4c243c5e2f288cdd7d1e6/intra/protect/protect.go#L43-L52
|
9
shawndev 2022-03-11 16:40:07 +08:00
VpnService.protect 最终内部调用的代码和 Max 提到的相似,这是 Android Code Search 的结果 https://cs.android.com/android/platform/superproject/+/master:system/netd/client/FwmarkClient.cpp;drc=master;l=71
|
10
wlgqa OP @shawndev 意思是我要获取 golang 创建的 client (连接目标服务的)的实际系统文件描述符 ID ,然后 Protect 这个文件描述符? 感谢大佬,方便发个 base64 收款码,请大佬喝杯咖啡。
|
11
shawndev 2022-03-11 16:45:46 +08:00
@wlgqa 是的,可以参考下上面发的 outline 项目,应该是 google 的团队开发的。https://chinsyo-blog.s3.ap-northeast-2.amazonaws.com/img/alipay/IMG_7339.PNG
|