v2ray反向代理的工作原理:

反向代理可以把服务器端的流量向客户端转发,即逆向流量转发。

  • 反向代理的使用场景为:假设在主机A中有一个网页服务器,但其没有公网IP,无法直接通过公网访问。而另一台主机B则拥有公网IP。而这时,我们便需要将B作为入口,将流量从B转发到A。
  • 主机A中的v2ray称为bridge,主机B中的v2ray称为portal
  • bridge会向portal主动建立连接,此连接的目标地址可以自行设定。portal会收到两种连接,一是由bridge发来的连接,二是主机B发来的连接。portal会自动将两类连接合并。于是bridge就可以收到了主机B的公网流量了。
  • bridge在收到主机B的公网流量之后,会将其原封不动地发给主机 A 中的网页服务器。当然,这一步需要路由的协作。

配置文件中的reverse项

1
2
3
4
5
6
7
8
9
10
{
"bridges": [{
"tag": "bridge",
"domain": "XXX.xxx"
}],
"portals": [{
"tag": "portal",
"domain": "XXX.xxx"
}]
}

其中bridges代表bridge数组,portals代表portal数组。

  • tag:一个标识,所有由bridge发出的连接,都会带有这个标识。可以在路由中使用inboundTag进行识别。
  • domain:一个域名。bridgeportal建立的连接,都会使用这个域名进行发送。这个域名只作为bridgeportal的通信用途,不必真实存在。

具体配置可参考配置文件

bridge通常需要两个出站代理(outbounds),一个用于连接portal,另一个用于发送实际的流量。也就是说,需要用路由(routing)区分两种流量。
portal通常需要两个入站代理(inbounds),一个用于接收bridge的连接,另一个用于接收实际的流量。同时也需要用路由(routing)区分两种流量。

v2ray内网穿透的工作原理:

v2ray内网穿透具有三个对象,分别为:待访问的内网服务器bridge,具有公网IP外部用户可访问的中间服务器portal,需要访问内网的外部用户client
基础内网穿透:只访问一个指定端口。client不需要配置v2ray,直接通过浏览器访问公网IP+端口号即可。场景举例:在外面访问家中的NAS。在本场景中,portal成为一个“端口转发机”。

  • bridgeportal中各配置v2ray
  • portal中的接收真实流量的协议应设置为任意门 (dokodemo-door),即原封不动转发至指定端口。

全局内网穿透:可全局访问内网服务器。client需要配置v2ray并设置代理。场景举例:在国外访问国内网络,在校外访问校内网络。在本场景中,client等效于在bridge网络中,即portal成为一个从外部通向内网的“梯子”。

  • bridgeportalclient中各配置v2ray
  • portal中的接收真实流量的协议应设为vmess,即接收client的vmess协议连接。
  • client中需要设置入站代理。具体情况可见《内网穿透使用手册》。


pic

v2ray内网穿透网络拓扑图