我用 Android 开了一个虚拟 tun ,然后通过 tun2sock 转到 tcp 上代理全局浏览,然后加密。然后我需要把代理的流量发出去,我发现我发出去的流量,似乎又发到全局的 tun 上面去了。这样就死循环了。由于我不太熟悉 Android ,网络部分是我用 golang 写的,编译成 ndk 给调用。求问,怎么把流量发出去,不走全局虚拟网卡代理,有偿咨询,解决可以发个红包,请大佬喝杯咖啡。
我用 Android 开了一个虚拟 tun ,然后通过 tun2sock 转到 tcp 上代理全局浏览,然后加密。然后我需要把代理的流量发出去,我发现我发出去的流量,似乎又发到全局的 tun 上面去了。这样就死循环了。由于我不太熟悉 Android ,网络部分是我用 golang 写的,编译成 ndk 给调用。求问,怎么把流量发出去,不走全局虚拟网卡代理,有偿咨询,解决可以发个红包,请大佬喝杯咖啡。
1
duke807 Mar 11, 2022 via Android
linux 的 route 表啊
把目標代理服務器的地址指定用非虛擬的網口傳輸 |
3
zxjunz Mar 11, 2022
VpnService.protect()
|
4
FranzKafka95 Mar 11, 2022 via Android
@madeye 大佬~
|
5
Goooler Mar 11, 2022
Max 本尊出来了啊,太强了
|
7
shawndev Mar 11, 2022
本来想班门弄斧回答下的,结果鲁班本人现身了。。
|
8
shawndev Mar 11, 2022
如果是通过 go 创建的 tunfd ,外部管理连接,通过 VpnService.protect 可以处理。https://github.com/Jigsaw-Code/outline-go-tun2socks/blob/e08601a0b188ad80baf4c243c5e2f288cdd7d1e6/intra/protect/protect.go#L43-L52
|
9
shawndev Mar 11, 2022
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 Mar 11, 2022
@wlgqa 是的,可以参考下上面发的 outline 项目,应该是 google 的团队开发的。https://chinsyo-blog.s3.ap-northeast-2.amazonaws.com/img/alipay/IMG_7339.PNG
|