V2ray 的内网访问策略

用处

笔者有一些 web 服务是不便于或是不适合暴露在公网上的,包括

  1. 文件存储服务
  2. 密码管理器
  3. jupyter ( web 文件编辑器 )

这些东西虽然都可以上密码,但是暴露在公网必然会存在一些风险。特别像是密码管理器,无论是服务漏洞,还是密码遭破解,都是致命性的事件。
企业的解决方法一般是内网隔离,外部用 VPN 进入内网。为了方便,可能还会维护一个内网 dns 来提供解析内部域名。
但这样会要额外维护一到两个套软件,故笔者考虑在已经搭建好的 v2ray 上写上路由,用 v2ray 来代替大部分 VPN 和内网 dns 的功能。
这样只会需要将 v2ray 的端口暴露到公网。

前提

  • 本文默认读者熟悉 v2ray 的一般配置,参考官方文档
  • 在目标内网,需要一个能长期运行的 v2ray 服务
  • 需要拥有一个公网 ip ,并能将 v2ray 的监听端口绑定到这个公网 ip 上。建议使用家庭带宽的动态公网 ip 。
    虽然可以通过 v2ray 的内网穿透功能 配合公网服务器来到达类似的功能,但配置更为复杂,且效率较低,故本文不介绍此种方式,如有需求,请自行配置解决。

v2ray 的 dns 分流

关于 v2ray 的 dns 分流,可参考 这篇文章
简述如下

  1. 添加 dns inbounds:
{
    "port": 53,
    "tag": "dns-in",
    "listen": "0.0.0.0",
    "protocol": "dokodemo-door",
    "settings": {
        "address": "233.5.5.5",
        "port": 53,
        "network": "tcp,udp"
    }
}
  1. 添加 dns outbounds
{
    "tag": "dns-out",
    "protocol": "dns",
    "streamSettings": {
        "sockopt": {
            "mark": 255
        }
    }
}
  1. 添加 dns 解析策略
"dns": {
    "hosts": {
        "pass.lin.moe": "172.233.233.1",
        "read.lin.moe": "172.233.233.1",
        "note.lin.moe": "172.233.233.1",
        "st.lin.moe": "172.233.233.1"
    },
    "servers": [
        "1.1.1.1",
        "8.8.8.8",
        // 以上两条 dns 会通过前置代理转发,以应对 dns 污染。如没有国外前置代理,请将上述两条替换为国内 dns
        {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
            "geosite:cn",
            "ntp.org"
        ]
        }
    ]
}
  1. 添加 dns 路由
{
    "type": "field",
    "inboundTag": [
    "dns-in"
    ],
    "outboundTag": "dns-out"
}

服务端入口

(这里的服务端指内网入口所提供的服务)
服务端入口配置与一般的 v2ray inbound 配置无异,建议使用 vmess 等加密协议,而不是使用 http 或 socks 等,以免被恶意利用。
示例如下:

{
    "port": 22233,
    "listen": "0.0.0.0",
    "protocol": "vmess",
    "settings": {
    "clients": [
        {
        "id": "96ce0eea-ffa5-4e94-bb68-2e42cbacbd1d",
        "level": 1,
        "alterId": 16
        }
    ],
    "disableInsecureEncryption": true
    }
}

之后将这个 inbound 入口端口(示例中为 22233)暴露到公网。
服务端的路由可以直接写一个 freedom 协议出口处理所有流量。
也可以通过 v2ray 自身提供的 geoip 和 geosite 文件改写路由,来满足访问国外网络等需求,这里不做过多赘述。

客户端路由与 dns 配置

一般情况下的 v2ray 会添加 nat ip 和国内 ip 直连的路由策略,示例如下

{
    "type": "field",
    "outboundTag": "direct",
    "ip": [
        "geoip:cn",
        "geoip:private"
    ]
}

为了使 nat ip 也通过代理转发,在上条规则之前添加

{
    "type": "field",
    "outboundTag": "home",
    // home 为客户端出口标签
    "ip": [
        "172.233.233.0/24"
        // 这里改为需要通过代理内网 ip 网段 
    ]
}

之后客户端将 dns 服务器改为内网 dns

"dns": {
    "hosts": {
    },
    "servers": [
        "172.233.233.1"
        // 这里怎么写请自行判断,全局 dns 转发可能会导致延迟增加
    ]
}

示例配置文件

服务端
客户端

注意:以上配置文件没由经过测试,如有错误,请自行更改