FreeDom

V2Ray综合性配置:同时连接本地、远程局域网、海外

V2Ray(现在貌似变成V2Fly了)最常见的用法是科学上网。其实正如V2Ray自己描述自己那样:“助你打造专属基础通信网络”。V2Ray更像一个平台。科学上网只是它的一个功能(以前是VMess,现在还支持了SS、Trojan)。

于是我尝试用V2Ray去替代VPN,在外面连接家庭网络。这样做的好处之一就是不用去配置复杂的VPN,说的就是你,OpenVPN(OpenVPN可以用Docker部署,相对来说比较简单,不过这不是本文的主题)。

首先,V2Ray的配置既复杂,又简单。为什么这么说呢?复杂在于你需要了解配置的各种细节,然后再着手去构建配置文件;简单在于,V2Ray不过是一个入口接收流量,一个出口发出流量,用路由规则将入口和出口连接起来。至于入口和出口所用的协议,则是另一回事。v2ray现在支持的协议也是琳琅满目,从现在的状况来看,VMess已经很难躲过分析了,但是作为国内网络之间的互联还是可以的。

v2ray路由规则

一个典型的v2ray配置文件如下所示:

{
    "log": {},
    "api": {},
    "dns": {},
    "routing": {},
    "policy": {},
    "inbounds": [],
    "outbounds": [],
    "transport": {},
    "stats": {},
    "reverse": {},
    "fakedns": [],
    "browserForwarder": {},
    "observatory": {}
}

v2ray的路由规则在routing字段中配置(称为RoutingObject)。RoutingObject字段的格式如下:

{
    "domainStrategy": "AsIs",
    "domainMatcher": "mph",
    "rules": [],
    "balancers": []
}

balancers是负载均衡的配置,domainMatcher是匹配算法,这些我们都不需要考虑。

先看domainStrategy,它规定了查找路由规则的方式。路由规则里,如果要将流量导入到不同的出口(比如是远程局域网还是海外),就要根据流量的域名和IP进行判断,判断条件将会被写在路由规则里。如果domainStrategy的值是AsIs,那么就只看域名;如果是IfNonMatch,那么先看域名,如果路由规则中没有对这个域名做规定,那么就把它解析为IP,然后按IP规则判断;如果是IPOnDemand,那么对于所有流量,都把域名解析为IP,然后按IP规则判断。(为什么不命名为:DomainOnly,DomainAndIp,IPOnly这样直白一点呢)

所以,就需要在访问外网时(加速/跳墙),将流量从连接外网服务器出口发出;当需要访问国内网址时,直接从本地发出(freedom);当访问远程局域网时,,将流量从连接远程局域网的出口发出。

连接远程局域网

注意:因为v2ray本身并没有转发整个网卡流量的功能,因此用v2ray连接远程局域网只适合轻度的使用需求,部分地代替VPN。

这里,假设要连接的远程局域网是我的家庭局域网,我需要能在别处访问家庭局域网的一些服务(比如Nextcloud),要求有公网IP地址。(没有公网IP地址的话就有些麻烦了,需要反向代理,不在本文讨论范围之内)

实际上,无论是连接远程局域网还是连接海外,实质上都是一样的,因此可以直接把连接海外的服务端配置文件拿来用。

这个配置文件。你可以在分享一个v2ray配置,对内做透明代理旁路由,对外做VPN一文中找到,虽然是挺久之前做的,但一直也没做什么改动。

连接海外服务器

从一个SS就能愉悦冲浪,到SSR,再到VMess,现在VMess也被狙击了。如今伪装技术成了主流,为了降低伪装的消耗,还诞生了XTLS。不过就我个人测试,对于没有特别优化的线路效果都差不多,毕竟伪装技术在速度上再怎么优化,理论上都跑不过最原始的混淆方法。

海外服务器的配置文件可以参看https://github.com/XTLS/Xray-examples/tree/main/VLESS-TCP-XTLS-WHATEVER

IPv6和IPv4

IPv4的地址被ban也不是稀罕事了。从前开一台服务器偶尔遇到一次,还觉得很新鲜,如今可能开好几台都开不出能用的IPv4地址。IPv6理论上能比IPv4快一些,就我测试来看,由于路由的不同,IPv6的延迟可能比IPv4好那么一点点,更重要的是,IPv6很难被ban。5G网络是确定支持IPv6的,家庭宽带也可以支持,也可能不支持,这个要问宽带客服。

本地完整配置一览

{
    "log": {

    },
    "dns":{
      "hosts": {
        "adsb.home": "192.168.3.xxx",
        "nextcloud.home": "192.168.3.xxx",
        "aria.home": "192.168.3.xxx"
      },
      "servers": [
        {
          "address": "223.5.5.5",
          "port": 53,
          "domains": [
            "domain:orgleaf.com"
          ]
        }
      ]
    },
    "inbounds": [
      {
        "port": 10808,
        "tag": "socks5",
        "protocol": "socks",
        "sniffing": {
          "enabled": true,
          "destOverride": ["http", "tls"]
        },
        "settings": {
          "udp": true,
          "auth": "noauth"
        }
      },
      {
        "listen": "127.0.0.1",
        "port": 10809,
        "protocol": "http",
        "settings": {
          "userLevel": 8
        },
        "tag": "http"
      },
      {
        "listen": "127.0.0.1",
        "port": 23390,
        "protocol": "dokodemo-door",
        "settings": {
          "address": "192.168.3.30",
          "port": 3389,
          "network": "tcp,udp",
          "timeout": 300,
          "followRedirect": true,
          "userLevel": 0
      },
        "streamSettings": {},
        "tag": "rdp"
      },
      {
        "listen": "127.0.0.1",
        "port": 20022,
        "protocol": "dokodemo-door",
        "settings": {
          "address": "192.168.3.239",
          "port": 22,
          "network": "tcp,udp",
          "timeout": 300,
          "followRedirect": true,
          "userLevel": 0
        },
        "streamSettings": {},
        "tag": "ssh"
      }
    ],
    "outbounds": [
      {
        "tag": "oversea_vless",
        "protocol": "vless",
        "settings": {
            "vnext": [
                {
                    "address": "oversea.example.cn",
                    "port": 443,
                    "users": [
                        {
                            "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                            "encryption": "none",
                            "level": 8,
                            "flow": "xtls-rprx-direct"
                        }
                    ]
                }
            ]
        },
        "streamSettings": {
          "network": "tcp",
          "security": "xtls",
          "xtlsSettings": {
              "serverName": "oversea.example.cn"
          }
        }
      },
      {
        "protocol": "trojan",
        "tag": "oversea_trojan",
        "settings": {
            "servers": [
                {
                    "address": "oversea.example.cn",
                    "port": 447,
                    "password": "password1",
                    "level": 0
                }
            ]
        },
        "streamSettings": {
            "network": "tcp",
            "security": "tls",
            "tlsSettings": {
                "serverName": "oversea.example.cn"
            }
        }
      },
      {
        "tag": "home",
        "protocol": "vmess",
        "settings": {
          "vnext": [
            {
                "address": "home.example.cn",
                "port": 1234,
                "users": [
                {
                    "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                    "alterId": 64
                }
                ]
            }]
        },
        "mux": {
          "enabled": false,
          "concurrency": 8
        }
      },
      {
        "tag": "direct",
        "protocol": "freedom",
        "settings": {
          "domainStrategy": "UseIP"
        },
        "streamSettings": {
          "sockopt": {
            "mark": 255
          }
        }
      },
      {
        "tag": "block",
        "protocol": "blackhole",
        "settings": {
          "response": {
            "type": "http"
          }
        }
      }
    ],
    "routing": {
        "domainStrategy": "IPIfNonMatch",
        "domainMatcher": "mph",
        "rules": [
          {
            "type": "field",
            "inboundTag": ["ssh", "rdp"],
            "outboundTag": "home"
          },
          {
            "type": "field",
            "port": null,
            "inboundTag": null,
            "outboundTag": "oversea_vless",
            "domain": [
                "geosite:geolocation-!cn"
            ],
            "geoip": [
                "geoip:!cn"
            ]
          },
          {
            "type": "field",
            "port": null,
            "inboundTag": null,
            "outboundTag": "home",
            "domain": [
            ],
            "ip": [
                "192.168.3.0/24"
            ]
          },
          {
            "type": "field",
            "port": null,
            "inboundTag": null,
            "outboundTag": "direct",
            "domain": [
              "geosite:geolocation-cn",
              "geosite:cn",
              "domain:orgleaf.com"
            ],  
            "ip": [
              "geoip:cn"
            ]
          },
          {
            "type": "field",
            "ip": [

              "223.5.5.5",
              "114.114.114.114"
            ],
            "outboundTag": "direct"
          },
          {
            "type": "field", 
            "domain": [
              "geosite:category-ads-all"
            ],
            "outboundTag": "block"
          }
        ]
      }
  }
(0)

本文由 橙叶博客 作者:FrankGreg 发表,转载请注明来源!

热评文章

发表评论