lighthouse

使用v2ray进行代理流量分流(国内外自动分流)

v2ray是一款强大的代理服务框架,不仅支持他自身有VMess协议,他也同时支持shadowsocks、socks和http这样人民群众喜闻乐见的代理协议。当然今天我们并不是要利用v2ray直接的去搭梯子过墙,而是希望利用v2ray来对我们的流量进行分流,让国内网站(IP)的流量直接连接,国外的网站(IP)流量走代理

TL;DR

0x00 准备知识

这里假设你已经对v2ray有一些比较基础的了解,建议先看一下以下的文章:

0x01配置过程

传入连接配置

本次我们的代理主要是希望给Chrome使用,Chrome支持socks5方式,所以说我们需要配置一路socks方式传入来给Chrome使用,同时为了确保我的虚机里的应用(比如wordpress)这类的不支持socks代理的应用的使用需要,也需要再配置一路http方式的传入来给他们使用
主传入配置

"inbound": {
    "port": 1081,
    "listen": "0.0.0.0",
    "protocol": "socks",
    "settings": {
        "auth": "noauth"
    }
}

附加传入配置

"inboundDetour": [
    {
        "port": 1082,
        "listen": "0.0.0.0",
        "protocol": "http",
        "settings": {
            "timeout": 1000
        }
    }
]

传出连接配置

我日常使用shadowsocks来作为自己自己首要的代理方式。虽然v2ray原生支持shadowsocks协议,但是由于自己目前暂时没有找到什么太好的v2ray GUI,实在没法忍受难受的配置方式,所以说我在这里配置了一路socks传出来连接我windows下的shadowsocks-windows。

"outbound": {
    "protocol": "socks",
    "settings": {
        "servers": [
            {
                "address": "127.0.0.1",
                "port": 2333,
                "users": []
            }
        ]
    },
    "tag": "forgin"
}

同时我们需要配置一个freedom协议配置(就是直接传出)来为我们下一步路由配置做基础

"outboundDetour": [
    {
        "protocol": "freedom",
        "settings": {},
        "tag": "direct"
    }
]

配置路由

v2ray的路由默认操作是直接走默认传出,我们仅需要在路由配置里加上我们需要设置特殊情况路由即可。在这里我们需要将请求至大陆的所有站点的流量直接连接,同时为了保证访问内网正常也需要排除内网IP段。v2ray自带国内ip表(从手册中可以知道是从ChinaDNS的脚本中获得),可以很方便的使用。只要将type设为chinaip或者chinasites即可,但经过我测试好像要做到对应效果需要两个都配置一遍才可以。
domainStrategyIPIfNonMatch时,大概的工作流程为,IP的话直接走对应路由表,如果是域名的话,路由表里没有匹配对应域名的话,将这个域名使用默认DNS解析IP(A记录或者AAAA记录)来应用规则(见手册)

"routing": {
    "strategy": "rules",
    "settings": {
        "domainStrategy": "IPIfNonMatch",
        "rules": [
            {
                "type": "chinaip",
                "outboundTag": "direct"
            },
            {
                "type": "chinasites",
                "outboundTag": "direct"
            },
            {
                "type": "field",
                "ip": [
                    "0.0.0.0/8",
                    "10.0.0.0/8",
                    "100.64.0.0/10",
                    "127.0.0.0/8",
                    "169.254.0.0/16",
                    "172.16.0.0/12",
                    "192.0.0.0/24",
                    "192.0.2.0/24",
                    "192.168.0.0/16",
                    "198.18.0.0/15",
                    "198.51.100.0/24",
                    "203.0.113.0/24",
                    "::1/128",
                    "fc00::/7",
                    "fe80::/10"
                ],
                "outboundTag": "direct"
            }
        ]
    }
}

下面那段绕内网的我直接抄了example里的对应内容。。

0x02 我编写的完整的配置文件

v2ray_chinaip_router.json
使用时将记得修改对应端口号

0x03 一些其他想法

级然能够实现了自动分流,能不能做到全局流量都通过代理,实现全局流量自动分线路?
windows下可以配置全局代理,也可以使用Proxifier对全局设置代理
Ubuntu下也有全局代理配置的选项
但是这些难免都有漏网之鱼,一些应用是不吃系统代理配置的。如果想做到真正的全局自动流量路由,可能需要将这个socks代理转换成vpn才可以