基于Proxifier和V2/Ray的嵌套代理方案

打印 上一主题 下一主题

主题 919|帖子 919|积分 2757

前言

近来遇到了一个比力奇怪的需求:我的电脑只能访问到局域网内的服务器A,而服务器A可以访问到服务器B国内网络,
服务器B可以访问到国外网络。
当电脑简单地使用服务器A举行代理的时候,就可以变成正常的家庭网络了(只能访问国内网络);
但我此时需要使用服务器B举行代理以访问github的时候,发现体系代理已经被设置了。
这时我想起用Proxifier解决这个标题。
工具介绍

Proxifier

Proxifier通过对R0层劫持过滤驱动实现对全部软件都险些透明的代理。
使用这个软件的原因除了可以更方便地处置惩罚路由之外,还是为了让不走体系代理的应用也可以走代理。
别的,实现嵌套代理也离不开它。
V2/Ray (Core)

V2/Ray是当前主流的代理软件之一,功能很强大、灵活。
但缺点是现在常见的V2/Ray可视化客户端(如V2/RayN)都无法实现V2/Ray的全部功能,
为了更好地指定路由,我使用V2/Ray Core(以下简称V2/Ray)来实现需要的功能。
梳理流程


  • 当访问国内网络时,我们只需要像平凡代理一样使用服务器A:
    主机 --> 服务器A --> 国内网站
  • 当访问国外网络时,我们需要经过A、B两个服务器:
    主机 --> 服务器A --> 服务器B --> 国外网站
为了写成Proxifier需要的格式,我们需要进一步简化,将其简化为“原本目标;转发目标”:

  • 当发送请求给国内网站时,转发给服务器A的当地代理
  • 当发送请求给国外网站时,转发给服务器B的当地代理
  • 当请求发送给服务器A时,直接发送(不转发)
  • 当发送请求给服务器B时,转发给服务器A的当地代理
由于服务器A、B是被包罗在国内(外)网站里的,所以我们要提拔它们优先级,即按34、12的顺序排序。
这些规则应该写在Proxifier的Proxification Rules页面里。
分辨国表里网站

谈论理论以为很容易,但真正上手写的时候会发现有不少标题,如:如何分辨国表里的网站?
V2/Ray软件自带geoip、geosite文件,包罗的网站已经足够日常使用了,但我没找到方法让Proxifier读取这个文件。
所以我用V2/Ray的路由功能。
打开服务器B当地代理的设置文件(config.json),此处以绕过大陆的设置为例,节选outbounds和routing部分:
  1. "outbounds": [
  2.     {
  3.         "tag": "proxy",
  4.         // ...
  5.     },
  6.     {
  7.         "tag": "direct",
  8.         "protocol": "freedom",
  9.         "settings": {}
  10.     },
  11.     {
  12.         "tag": "block",
  13.         "protocol": "blackhole",
  14.         "settings": {
  15.             "response": {
  16.                 "type": "http"
  17.             }
  18.         }
  19.     }
  20. ]
  21. "routing": {
  22.     "domainStrategy": "AsIs",
  23.     "rules": [
  24.         {
  25.             "type": "field",
  26.             "inboundTag": [
  27.                 "api"
  28.             ],
  29.             "outboundTag": "api"
  30.         },
  31.         {
  32.             "type": "field",
  33.             "outboundTag": "block",
  34.             "domain": [
  35.                 "geosite:category-ads-all"
  36.             ]
  37.         },
  38.         {
  39.             "type": "field",
  40.             "outboundTag": "direct",
  41.             "domain": [
  42.                 "geosite:cn"
  43.             ]
  44.         },
  45.         {
  46.             "type": "field",
  47.             "outboundTag": "direct",
  48.             "ip": [
  49.                 "geoip:private",
  50.                 "geoip:cn"
  51.             ]
  52.         },
  53.         {
  54.             "type": "field",
  55.             "port": "0-65535",
  56.             "outboundTag": "proxy"
  57.         }
  58.     ]
  59. }
复制代码
关于V2/Ray的设置可以参考这两个文档[1][2]
outbounds应该包罗了三个最基础的设置,分别是代理、直连、拦截。
然后routing的规则将国内流量引到直连,其他的流量默认走代理,
所以我的思路是修改直连的逻辑,替换为服务器A的outbounds中的proxy项,但它的tag字段仍为direct不要修改。
如果仍有真正direct需求,可以再加一个actualdirect项。
此时Proxifier的路由规则也简化为了:

  • 当请求发送给服务器A时,直接发送(不转发)
  • 当发送请求给服务器B时,转发给服务器A的当地代理
  • 当发送请求给国表里网站时,转发给服务器B的当地代理
简化掉服务器A的当地代理

看完上一段后,大家肯定会以为,为什么还需要保留服务器A的当地代理,直接让服务器B的当地代理的路由处置惩罚了不就好了?
我也是这么以为的,但在实践的过程中遇到了标题:

  • Proxifier主动域名解析
    查看Proxifier的日志时,可以发现担当到的对服务器B的请求还是域名的形式,而在服务器A的当地代理日志中就变成了IP形式。
    就算关闭了Proxifier的名字解析器(Name Resolution)还是如此。
  • 通过V2/Ray端口筛选路由
    我尝试通过端口筛选出对服务器B访问流量,固然已经在日志中看到了对应条目,但还是连不上。
最终我选择了保留服务器A的当地代理,如果有大佬知道解决方案请告诉我x。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表