前置要求
- 有 v2ray-core 客户端
- 有一定的 Linux 操作基础
一些介绍
- 正如我们所知的那样,
v2ray
的配置文件大体是由log
+inbound
+outbound
+route
组成的。 - 下面是一个简单的 v2ray 配置文件
config.json
1 | { |
- 在图片中我们可以清楚的看到该配置文件有一个
inbound
和 两个outbound
以及 两条路由规则。
一些想法
- 既然可以有多个
outbound
那么为什么不能有多个inbound
? - 而且官方文档里也说了,
inbounds
和outbounds
是inbound
和outbound
的集合。
简单的尝试
以上面的 config.json 为例,copy & paste
然后再修改一下端口协议什么的
1 | { |
尝试的结果
./v2ray --conf=./config.json
lsof -i:1080 && lsof -i:1081
显然试验成功了。那么是 为什么 呢?
一些原因
- 我们可以将
v2ray
看成一个带加密功能的switch
, 将inbound
看成LAN
口,将outbound
看成WAN
口。 - 如果我们想正常上网,那么我们就得添加路由规则。也就是
routing
下面的rule
。 v2ray
接收来着LAN口
的流量(也就是用户的流量),经过rule
的匹配筛选后,转发给对应的WAN口
,从而实现正常上网。- 参考上面
config.json
里面的rule
,inboundTag
都为空,outboundTag
都有明显的值。相当于匹配所有inboundTag
,不区分,只区分应该转发到哪个outboundTag
(相当于默认路由)。 - ?如何匹配路由?我们可以看到在每一个
rule
下面都有一个ip
或者domain
,v2ray
根据这个来匹配。书写规范
routing 下 rule 的 IP 或域名书写规范
官方文档:https://guide.v2fly.org/basics/routing/basics_routing.html
为了方便,copy 一份如下:
关于路由规则的注意事项
本节记录了一些新手朋友使用 V2Ray 使用路由功能时常范的错误,希望大家能够避免。
通配符
如果我想让淘宝和京东的域名直连,路由功能的规则写成下面这样的,你觉得这样的规则有问题吗?
1 | [ |
看起来没有什么问题,但事实上,有。如果使用了这样的规则,你会发现根本没有走 direct 直连。很奇怪?这并不奇怪。这是因为你的经验在作祟。在 V2Ray 中,星号 * 不具备通配符的意义,只是一个普通的字符而已,是你以为星号 * 是通配符,这是臆想。如果想要匹配所有子域名的话,可以这么写规则:
1 | [ |
domain:
代表子域名,如 “domain:taobao.com” 这样一条规则包含了所有 taobao.com 域名及其子域名。
IP & domain
1 | [ |
这样的一个规则的严格来说没有问题,真正的问题在与使用者不理解规则的配置。如果要匹配以上的规则,那么代表这有一个数据包的目标地址域名是 taobao.com 并且 IP 属于 192.168.0.0.1/16。通常情况下这是不可能的,所以你访问淘宝是不会匹配这个规则。如果你要满足域名和 IP 任一条件都能够匹配规则,那么应该这么写:
1 | [ |