目录

v2ray添加路由规则解决自定义域名访问出错


引言

本文介绍如何将自定义域名添加到v2ray路由规则集中,解决通过自定义域名访问本地局域网设备时由于路由规则匹配不到导致无法连接的问题。

问题描述

家中电脑在浏览器中,通过synology.local 域名访问本地局域网的一台NAS设备,浏览器报错显示无法连接, 报错页面如下:

https://static.weycen.com/2024/07/14c7b1c6bf30d355f3081f7f9c2b67b3.png

问题分析

检查网络

synology.local域名是我在路由器SmartDNS服务中设置的自定义DNS解析,对synology.local域名的访问会被解析为对192.168.1.10(NAS设备的本地局域网IP地址)的访问;

因此对NAS设备访问请求仅限于局域网内部,不涉及外网访问,按理说不应该出现访问不了问题,第一反应是NAS设备网络断掉了(当时有一瞬间怀疑是我家猫把NAS网线给咬掉了,天大的冤枉啊哈哈);

https://static.weycen.com/2024/07/d3f43475a6b2bad6fecaa47304c7cde3.png

尝试直接在浏览器中直接用输入NAS设备IP地址192.168.1.10来访问,访问提示如下,说明NAS设备网络是正常的;由于此时我是开启了v2ray服务,于是把怀疑点转向v2ray

https://static.weycen.com/2024/07/6ea33c238a4c5202c225790d07c81799.png

v2ray日志分析

查看v2rayN客户端日志,发现域名synology.local的路由规则被处理为proxy代理模式,请求被转发到局域网外部了,所以导致访问出错;

https://static.weycen.com/2024/07/40846bced7aaa9f27b24eaf05c740945.png

v2ray路由原理

v2rayN客户端当前设置的系统代理模式为自动配置系统代理,路由模式为V2-绕过中国大陆(Whitelist);V2-绕过中国大陆(Whitelist)路由模式下,v2ray会通过geosite(用于查询目标域名所在的地理位置)和geoip(用于查询IP 地址所在的地理位置)这两个文件来对域名和IP地址进行查询和匹配,如果是中国的域名/IP则走direct直连,如果是国外的域名/IP则走proxy代理;

由于synology.local是我自定义的域名,自然不会被收录在geosite文件中,因此会按用户配置的“默认规则”进行处理,我的“默认规则”是proxy代理,所以访问请求被路由到局域网外部,这就是导致导致访问出错的根因;”默认规则“在v2rayconfig.json文件中定义,也可以在v2rayN界面中查看,下文会提到;

v2ray 路由规则修改

NAS设备是位于局域网内,因此我们需要将synology.local的路由规则修改为direct直连模式,使其不经过 v2ray 代理,直接访问局域网内的 NAS。

v2rayN修改路由配置

在 v2rayN 客户端界面,点击“设置”>“路由设置”,进入路由规则列表页面。

https://static.weycen.com/2024/07/1dcb8c07edb1aff67e40c0dc4d618eff.png

可以看到所有的路由规则列表,双击修改当前正在使用的路由规则,界面最下方中间位置可以看到当前正在使用的路由;我当前使用的是V2-绕过中国大陆(Whitelist) ,双击进入路由规则集设置页面。

https://static.weycen.com/2024/07/ee8f256baf440f0454e292878d93117a.png

这里我们先看下最后一行规则:proxyv2ray会按顺序对用户请求进行查询匹配,当上面所有的规则都匹配不到时,会统一按最后一个规则进行处理,也就是前面说的”默认规则“,这里我们的”默认规则“就是proxy模式;

根据需要修改对应的规则,我这里是要将synology.local的路由方式者只为direct直连,因此要要修改的是第一行的direct规则集,既将synology.local添加到direct直连规则中;

双击要修改的规则进入路由详细规则设置;

https://static.weycen.com/2024/07/98e229781c73f8bc43c25247dd928855.png

可以看到direct规则集中已有的两个示例,既example-example.comexample-example2.com这两个域名的访问会被处理为direct直连;

https://static.weycen.com/2024/07/ee8f256baf440f0454e292878d93117a.png

我们在后面添加需想要direct直连处理的域名,这里添加synology.local, 注意要在上一行末尾加一个逗号作为分隔符,然后依次点击确定返回主页面;

https://static.weycen.com/2024/07/574e2303cc7d1463faa2315d91f4e490.png

  1. 重启v2ray

添加成功后v2rayN客户端会重启v2ray内核以更新配置,v2rayN客户端界面可以看到重启v2ray过程的日志;

https://static.weycen.com/2024/07/13b5e503666f4f34b65363eeda7ac5e3.png

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直连了;

https://static.weycen.com/2024/07/edaa8c9ad1d51a2ea86fdcb4b7e517da.png

其他

v2ray和v2rayN

v2rayN 是一个基于 v2ray 内核的Windows图形用户界面客户端,用于方便地配置和管理 v2ray。用户可以通过v2rayN图形界面对v2ray进行配置,而不必直接编辑v2ray配置文件,从而轻松地管理和配置 v2ray 的各种功能,比如选择节点、设置代理协议、调整传输方式等;还可以进行网络延迟测试、网速测试、流量统计等。