V2ray的功能详实, 其一就是路由功能. Windows系统下用户多用V2rayN图形界面, 因此本文借着V2rayN软件来作文本文实例. 当然现在的QV2ray有后来居上的趋势, 不过因为其设计风格, 还有内核不能一键更新一直没有用他.
注意: V2ray指V2ray核心(类似Linux kernel, 只提供内核), 为无图形界面软件; V2rayN指带V2ray核心的图形界面软件(类似Gnome, KDE, XFCE等, 提供内核的图形交互软件用于操作内核).
路由功能, 就是根据不同网站/网域/地区, 决定不同的连接方式代理/直连/阻断, 达到预期的上网需求. 比如, 在使用Google的时候, 我希望能代理(不然上不去或者); 但是在使用某中国网站的时候, 我希望直连(访问速度快且IP不会跳跃), 就需要用到路由功能.
本文只讲解 V2ray的域名解析策略(domainStrategy) 和 V2rayN的代理模式(Http proxy). 如果想看具体的路由示例见 Project V - 路由功能 和 新 V2Ray 白话文指南 - 路由功能.
V2ray的域名解析策略(domainStrategy)
路由的JSON配置长这样
{
"domainStrategy": "AsIs",
"rules": [],
"balancers": []
}
domainStrategy 为域名解析策略,根据不同的设置使用不同的策略。有”AsIs”, “IPIfNonMatch”和”IPOnDemand”三种策略.
- “AsIs”: 只使用域名进行路由选择。默认值。
- “IPIfNonMatch”: 当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配;
- 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
- 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
- “IPOnDemand”: 当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
V2rayN的代理模式(Http proxy)
我使用的V2rayN长期被一个问题困扰. 照理来说, 只会有设置本地代理走127.0.0.1:10808(socks口)的软件和浏览器的流量才会通过V2ray, 甚至CMD/Powershell都会走代理, 我猜可能因为全局模式意思是全部流量代理(其实不是); 然而不知为何又有些国内网站, 却使用的是直连模式.
其实, V2rayN的全局模式指的并不是全部流量走代理. V2rayN的HTTP Proxy共有四种模式:
- 不代理模式
- 全局模式(global)
- PAC模式
- 直连模式(direct)
全局模式(global)指的是V2ray所有流量通过V2rayN的路由(Settings -> Core: Routing settings 中设置), 而不是全部流量走代理. 这些路由里面有代理, 直连和阻拦三种路由, 因此导致全局模式下有的网页是直连的. 同时此模式会设置系统代理, 因此CMD/Powershell也会走代理. Windows下浏览器默认使用的是系统代理, 因此流量也会走V2ray. 软件如果需要使用代理需要在软件内单独设置, 需要在软件内设置代理(Proxy)为V2rayN的默认socks口127.0.0.1:10808(socks协议), 或者http口10809(http协议); 如果只使用V2ray核心, 则默认为1080.
PAC模式跟全局模式(global)不同之处在于使用的是PAC维护的路由, 网页更全. 不过因为代理没有github因此我日常用的还是全局. 自己在V2rayN内维护路由.
P.S. V2rayN没有写个文档还是比较坑的, 害我用V2rayN跟在抛硬币一样.
讲了那么多, 那为什么有时候全局模式(global)或者PAC模式下访问某些网站, 流量仍然不符合预期呢? 这时候可以检查一下 domainStrategy 域名策略.
虽然 Project V - 路由功能 说”AsIs”模式为路由选择的默认值, 但是V2rayN默认为”IPIfNonMatch”模式. 照理来说应该是”AsIs”模式的更进一步, 不知道怎么就出了问题. 我看V2rayN的规则内多用domain做策略, 因此就把domainStrategy改为”AsIs”模式就一切正常了.
参考资料: