个人由于工作原因需要经常需要访问 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 // 查询命令

设置 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 失效;

接着打开 规则端口的分流模式 的“配置”页面,将以下自定义路由规则内容复制到“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)

填写无误就可以到 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 文件的,本文内容虽然多,但很多都是在个人使用中遇到的问题,较为真实可靠。
暂无评论,快来抢沙发吧!