部署 V2RayA 实现全屋旁路代理及外网双协议转发

Routing · · 107人浏览

个人由于工作原因需要经常需要访问 Github 和 Google 查阅文档和资料,针对国内网络环境的局限性,利用家里 X86 架构的 OpenWrt 软路由部署 V2RayA 旁路由透明网关代理,针对远程办公也同时支持 HTTP 与 Socks5 的双协议外网代理转发,实现高性能、高可用的网络加速解决方案。

安装 V2RayA 面板

建议 OpenWrt 系统不低于 21.02 版本,通过 OpenWrt 官方软件源安装 V2RayA 软件包,如果你使用了 23.05 或 更高版本 的用户可以直接从软件源安装,目前安装插件后默认依赖于 Xray 核心,如需要安装 V2ray 核心,可移步 V2rayA Docs 文档,以下为安装命令:

opkg update // 更新软件源

opkg install luci-i18n-v2raya-zh-cn v2ray-geoip v2ray-geosite // 安装 luci-app-v2raya

opkg install v2raya // 安装 V2RayA

// V2rayA Docs 文档地址如下
https://v2raya.org/docs/prologue/installation/openwrt/

配置基础功能

当首次成功安装完成 V2RayA 面板就会在 OpenWrt 后台的“服务”选项内显示,在页面内勾选“启用”,如你的网络支持 IPV6 协议,那么 监听地址 可修改为“[::]:2017”,并把 IPV6 支持 选择为“开启”,如不支持 IPV6 协议默认即可。

通过终端命令可查询是否安装了 Nftables 组件,系统 21.02 或 更高版本默认是安装的,如果查询结果类似:nftables v1.1.1 (Commodore Bullmoose #2),那么是支持的,可将 Nftables 支持 选择为“开启”,否则直接选择“自动”或“关闭”。

nft -v // 查询命令

V2rayA 配置基础功能

设置 GFWList 透明代理

通过“打开WEB界面”访问到控制面板,设置好管理员的账号密码,

在“设置”内将 透明代理/系统代理 选择为“分流规则与规则端口所选模式一致”,

将“开启 IP 转发”勾选为黄色,如需要 HTTP 与 Socks5 外网代理,可将“端口分享”开启,

透明代理/系统代理实现方式 优先选择“system tun”系统网卡模式,其次为“tproxy”代理,

规则端口的分流模式 优先选择“RoutingA”自定义路由规则,懒人选择“大陆白名单”或“GFWList”,

其他设置保持“默认”或“关闭”状态,如下图:

简单的说明下为什么使用 System TUN 系统网卡模式,第一点就是提高转发性能,第二点就是解决 Github 回环问题,旁路由模式下可以不修改 Hosts 文件直接访问到 Github 网站,而且访问速度和下载速度极佳,而选择 TProxy 模式虽然也不错的表现,但终究无法全面接管流量。

Redirect:支持 Docker 模式,不支持 UDP 转发;

TProxy:支持 UDP 转发,不支持 Docker 模式使用;

GVisor TUN:用户虚拟网卡,性能比 System TUN 差,CPU 占用更高;

System TUN:系统虚拟网卡,兼容性最强,性能最好支持所有协议处理;

System Proxy:标准系统代理,有局限性,对 游戏、GIT、UWP 失效;

设置 GFWList 透明代理

接着打开 规则端口的分流模式 的“配置”页面,将以下自定义路由规则内容复制到“RoutingA”内,自定义规则每一条都标记了注释说明,可直接复制粘贴使用,自定义规则如下:

# 大陆白名单模式
default: proxy

# 解决 Github 污染回流
domain(keyword:github)->proxy
domain(geosite:github)->proxy

# 让该死的大厂强走白名单
domain(keyword:aliyun, keyword:dnspod, keyword:tencent)->direct
domain(keyword:douyin, keyword:wechat, keyword:baidu)->direct
domain(domain:bing.com, domain:qq.com, domain:jd.com)->direct

# 核心规则
ip(geoip:private, geoip:cn)->direct
domain(geosite:geolocation-!cn)->proxy
domain(geosite:google-scholar)->proxy
domain(geosite:category-scholar-!cn, geosite:category-scholar-cn)->direct
domain(geosite:geolocation-!cn, geosite:google)->proxy
domain(geosite:cn)->direct
ip(geoip:hk,geoip:mo)->proxy

# 解决网关下 TG 无法连接
ip("91.105.192.0/23","91.108.4.0/22","91.108.8.0/21","91.108.16.0/21","91.108.56.0/22","95.161.64.0/20","149.154.160.0/20","185.76.151.0/24","2001:67c:4e8::/48","2001:b28:f23c::/47","2001:b28:f23f::/48","2a0a:f280:203::/48")->proxy

节点的导入和使用

以上完成后就返回 V2RayA 控制面板进行订阅节点的添加,目前支持 订阅链接自建节点 的添加和导入,高质量办公追求稳定选择“自建节点”,如果服务器支持 IPV4+IPV6 同时可以满足双协议转发,轻度日常追剧选择“订阅链接”,好处就是免折腾。

订阅链接:此方式较为简单,同时也是投入成本最小的,控制面板找到“导入”按钮,以 大哥云 为例,将机场提供的“订阅地址”粘贴到输入框内,确认即可,如下图:

导入机场订阅链接

自建节点:此方式需要 自建节点 或 复制他人提供的协议参数,成本较大,但贵在稳定和安全,找到“创建”按钮,选择自建的对应协议并填写参数,确认即可,如下图:

填写自建节点参数

导入订阅地址 或 添加自建节点 完成后,需要在控制面板首页左上角选择“启动”按钮,启动后 无任何提示 或 显示正在运行,那么说明启动成功了。

旁路由网关设置说明

家庭内网设备要想使用 IPV4+IPV6 双网关转发,就要确认自己的 OpenWrt 是否启用了 IPV6 协议,如何开启这里就不过多阐述了,网上一抓一大把,如果你的旁路由不支持 IPV6 协议,要不就折腾让它支持,要不就放弃,单独只设置 IPV4 网关,IPV4 网关简单的令人发指,简单了解以下内容即可。

IPV4 地址:192.168.31.180

子网掩码:255.255.255.0

默认网关:192.168.31.200,IPV4 网关地址

首选 DNS 地址:192.168.31.1

单独只说 IPV6 网关的设置,在软路由终端使用命令 ifconfig 查看软路由的 br-lan 地址,在 Openwrt > 网络 > 接口 页面内,选择“全局网络选项”记下 IPv6 ULA 前缀(如:fd00:1111:2222::/48),打开电脑的以太网属性双击 IPV6 协议版本进入,并参考以下内容进行修改填写,如下图:

IPV6 地址:fd00:1111:2222::180,后缀可以随便填写,最好取本地 IPV4 地址的后三位,方便管理

子网前缀长度:64,默认会自动获取

默认网关:fe80::5054:ff:fec9:7415,也就是 ifconfig 获取的 IPV6 网关地址

首选 DNS 地址:2400:3200::1,阿里云的

备选 DNS 地址:2400:3200:baba::1,可以选择地址填写阿里云,或填写腾讯云和其他厂商的

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr 52:54:00:C9:74:15 // Mac 地址
          inet addr:192.168.31.200  Bcast:192.168.31.255  Mask:255.255.255.0 // IPV4 网关地址
          inet6 addr: fe80::5054:ff:fec9:7415/64 Scope:Link // IPV6 网关地址
          inet6 addr: 2408:820c:9c0c:5f50::200/128 Scope:Global // IPV6 公网地址一
          inet6 addr: 2408:820c:9c0c:5f50:8893:1d85:fe54:6344/64 Scope:Global // IPV6 公网地址二
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:86537 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142828 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:77959426 (74.3 MiB)  TX bytes:161350674 (153.8 MiB)

设置IPV6协议网关代理

填写无误就可以到 Openwrt > 状态 > 路由 页面内,选择 IPV6路由 内查看到电脑设备的临时 IPv6 地址,一般为动态的 IPV6 公网地址,其他设备设置与其同理。

通过端口分享外网代理

说明:想要实现通过端口分享外网代理功能,前提条件是家里宽带要支持 公网 或 动态公网,后者就是要使用 DDNS-GO 动态域名解析旁路由的 IPV4+IPV6 地址,如无法实现,直接跳过此功能。

满足以上条件,就可以开始设置 HTTP 与 Socks5 端口分享外网代理功能了,打开 V2RayA 控制面板进入右上角的“设置”内,找到“地址与端口”将 Socks5 端口(含:带分流规则)、HTTP 端口(含:带分流规则)、VMess 端口(带分流规则)全部修改为 0 并确认保存应用。

打开“RoutingA”规则设置页面,根据需求选择 Socks5 或 HTTP 端口分享规则,二者也可同时存在,端口不能冲突,建议复制粘贴到 default: proxy 下面,如旁路由支持 IPV6+ IPV4 协议那么就选择 IPV6 专用,如不支持 IPV6 那么就选择默认配置规则即可,详细说明如下:

port:端口号,别冲突就行,建议4位起步

user:用户名

pass:密码,建议复杂点

# Socks5 端口设置(默认规则)
inbound: socksauthin = socks(address: 0.0.0.0, port: 5566, udp:true, user: admin, pass: admin888)
inbound: sockslocalin = socks(address: 127.0.0.1, udp:true, port: 5566) 

# HTTP 端口设置(默认规则)
inbound: httpauthin = http(address: 0.0.0.0, port: 7788, user: admin, pass: admin888)
inbound: sniffing_http = http(address: 127.0.0.1, port: 7788, sniffing: 'http, tls')

# Socks5 端口设置(IPV4+IPV6专用)
inbound: socksauthin = socks(address: "::", port: 5566, udp:true, user: admin, pass: admin888)
inbound: sockslocalin = socks(address: "::1", udp:true, port: 5566) 

# HTTP 端口设置(IPV4+IPV6专用)
inbound: httpauthin = http(address: "::", port: 7788, user: admin, pass: admin888)
inbound: sniffing_http = http(address: "::1", port: 7788, sniffing: 'http, tls')

如何外网使用 HTTP 与 Socks5 端口代理就不说了,很简单,苹果、安卓的手机和平板在  WIFI 环境下可以在网络设置内找到 HTTP 代理进行设置,流量模式下使用代理工具(如:NekoBox、Shadowrocket ...),电脑设备可以找到“代理”功能,通过手动设置代理进行设置,不懂多查阅搜索引擎或问AI。

为什么不使用默认的“地址与端口”?

答:默认的地址与端口不需要用户名和密码的验证就可以连接,在内网使用使用倒是没有什么问题,一旦暴露公网,没有用户名和密码的保护,那么就是定时炸弹,谁也不清楚会发生什么不可描述的行为。

为 BT 下载设置单独的直连端口

大多数 BT 下载软件都可以设置 HTTP 与 Socks 代理,以下会以迅雷为例,不清楚什么时候发现迅雷会走代理下载,莫名的服务器流量浪费一大半还下载慢,所以还是建议默认直接添加 下载工具 走直连,同样直接复制到“RoutingA”规则设置页面内即可,端口随意别冲突就行。

# 迅雷/其他下载工具
inbound: socks_direct = socks(address: "::", port: 30000, udp:true) // IPV4 修改为 address: 0.0.0.0
inboundTag(socks_direct) -> direct

迅雷代理走直连

文章结语

这是个人的使用心得,简答的汇总出来提供给需要的网友,未来如有心得补充也会在文章内接着更新,如遇问题也可以留言与我沟通交流,不管在什么情况下也请记得没事就更新 GFWList 文件的,本文内容虽然多,但很多都是在个人使用中遇到的问题,较为真实可靠。

暂无评论,快来抢沙发吧!