v2ray添加路由规则解决自定义域名访问出错
引言
本文介绍如何将自定义域名添加到v2ray
路由规则集中,解决通过自定义域名访问本地局域网设备时由于路由规则匹配不到导致无法连接的问题。
问题描述
家中电脑在浏览器中,通过synology.local
域名访问本地局域网的一台NAS设备,浏览器报错显示无法连接, 报错页面如下:
问题分析
检查网络
synology.local
域名是我在路由器SmartDNS
服务中设置的自定义DNS解析,对synology.local
域名的访问会被解析为对192.168.1.10
(NAS设备的本地局域网IP地址)的访问;
因此对NAS设备访问请求仅限于局域网内部,不涉及外网访问,按理说不应该出现访问不了问题,第一反应是NAS设备网络断掉了(当时有一瞬间怀疑是我家猫把NAS网线给咬掉了,天大的冤枉啊哈哈);
尝试直接在浏览器中直接用输入NAS设备IP地址192.168.1.10
来访问,访问提示如下,说明NAS设备网络是正常的;由于此时我是开启了v2ray
服务,于是把怀疑点转向v2ray
;
v2ray日志分析
查看v2rayN
客户端日志,发现域名synology.local
的路由规则被处理为proxy
代理模式,请求被转发到局域网外部了,所以导致访问出错;
v2ray路由原理
v2rayN
客户端当前设置的系统代理模式为自动配置系统代理
,路由模式为V2-绕过中国大陆(Whitelist)
;V2-绕过中国大陆(Whitelist)
路由模式下,v2ray
会通过geosite
(用于查询目标域名所在的地理位置)和geoip
(用于查询IP 地址所在的地理位置)这两个文件来对域名和IP地址进行查询和匹配,如果是中国的域名/IP则走direct
直连,如果是国外的域名/IP则走proxy
代理;
由于synology.local
是我自定义的域名,自然不会被收录在geosite
文件中,因此会按用户配置的“默认规则”进行处理,我的“默认规则”是proxy
代理,所以访问请求被路由到局域网外部,这就是导致导致访问出错的根因;”默认规则“在v2ray
的config.json
文件中定义,也可以在v2rayN
界面中查看,下文会提到;
v2ray 路由规则修改
NAS设备是位于局域网内,因此我们需要将synology.local
的路由规则修改为direct
直连模式,使其不经过 v2ray 代理,直接访问局域网内的 NAS。
v2rayN修改路由配置
在 v2rayN 客户端界面,点击“设置”>“路由设置”,进入路由规则列表页面。
可以看到所有的路由规则列表,双击修改当前正在使用的路由规则,界面最下方中间位置可以看到当前正在使用的路由;我当前使用的是V2-绕过中国大陆(Whitelist)
,双击进入路由规则集设置页面。
这里我们先看下最后一行规则:proxy
,v2ray
会按顺序对用户请求进行查询匹配,当上面所有的规则都匹配不到时,会统一按最后一个规则进行处理,也就是前面说的”默认规则“,这里我们的”默认规则“就是proxy
模式;
根据需要修改对应的规则,我这里是要将synology.local
的路由方式者只为direct
直连,因此要要修改的是第一行的direct
规则集,既将synology.local
添加到direct
直连规则中;
双击要修改的规则进入路由详细规则设置;
可以看到direct
规则集中已有的两个示例,既example-example.com
和example-example2.com
这两个域名的访问会被处理为direct
直连;
我们在后面添加需想要direct
直连处理的域名,这里添加synology.local
, 注意要在上一行末尾加一个逗号作为分隔符,然后依次点击确定返回主页面;
- 重启v2ray
添加成功后v2rayN
客户端会重启v2ray
内核以更新配置,v2rayN
客户端界面可以看到重启v2ray过程的日志;
v2rayN
软件中添加的规则,其实是被更新到一个名为config.json
的配置文件,该配置文件中,v2rayN
软件添加完成后可以看到config.json
配置文件会随之更改,对比添加前后的config.json
文件,可以看到在路由列表的direct
规则集中多了一个我们刚刚添加的synology.local
域名;
添加前:
"routing": {
"domainStrategy": "AsIs",
...
{
"type": "field",
"outboundTag": "direct",
"domain": [
"domain:example-example.com",
"domain:example-example2.com"
]
},
...
}
添加后:
"routing": {
"domainStrategy": "AsIs",
...
{
"type": "field",
"outboundTag": "direct",
"domain": [
"domain:example-example.com",
"domain:example-example2.com",
"domain:synology.local"
]
},
...
}
注意,这里不能直接修改config.json,只能通过v2rayN客户端来设置;试验了下,如果直接修改config.json,在v2rayN客户端重启后修改内容会被删除丢失;应该是v2rayN客户端保存了一个config.json的副本,在重启时会把源配置文件跟副本做一个比较,以防config.json被意外修改;
验证效果
此时再次通过浏览器访问synology.local
, 可以正常访问,查看v2rayN
界面,通过日志可以看到synology.local
域名的路由规则已经是direct
直连了;
其他
v2ray和v2rayN
v2rayN
是一个基于 v2ray
内核的Windows图形用户界面客户端,用于方便地配置和管理 v2ray
。用户可以通过v2rayN
图形界面对v2ray
进行配置,而不必直接编辑v2ray
配置文件,从而轻松地管理和配置 v2ray
的各种功能,比如选择节点、设置代理协议、调整传输方式等;还可以进行网络延迟测试、网速测试、流量统计等。