YtFlow / Maple

A lightweight Universal Windows proxy app based on https://github.com/eycorsican/leaf
Apache License 2.0
1.19k stars 121 forks source link

很抱歉打扰,一点疑问,希望解惑 #26

Closed hinego closed 2 years ago

hinego commented 2 years ago

请问UWP提供的tun时,客户端和服务端建立TCP/UDP链接时是否无视 UWP VPN设定的路由规则 例如0.0.0.0/1 128.0.0.1/1 还是类似安卓 的vpnservice 需要protect一下fd

https://docs.microsoft.com/en-us/uwp/api/windows.networking.vpn.vpnchannel.associatetransport?view=winrt-22000

另外这个API的作用是?

bdbai commented 2 years ago

按照 UWP VPN API 的设计,一个传统的 VPN 客户端和服务端通信最多只有两条 TCP/UDP 连接,对应两个 socket 对象。理论上这里的 socket 是 VPN 平台托管的,路由不会绕进 VPN 接口,所以要用 AssociateTransport 向平台注册 socket 对象。 然而我们的代理和传统 VPN 不一样,是 1:1 向服务端建立连接的,仅仅两个 socket 没法实现,只能让 Leaf 主动往服务端建立连接。新创建的 socket 平台没有特殊处理,依然会绕回 VPN 接口,所以我们用了 bind 主动绑定 socket 到一个物理接口来规避这个问题。

hinego commented 2 years ago

感谢解惑,明白了

直接使用wintun也能达到相同的效果吧(同样bind 物理接口)

路由表的路由规则只是在建立链接未指定本地网络出口时自动选择的规则

如果手动指定后就不归路由表管了?

bdbai commented 2 years ago

Wintun 应该也可以用类似的处理方法。

bind 绑定接口大概只是 Windows 下可行,别的平台要用别的方法。关于怎么影响路由这块你可以找找别的资料,我也不是太熟。