一、端口转发是什么
端口转发程序会监听某一个端口,将发送到此端口的数据原封不动地传送到设定好的目标服务器 + 端口中,目标服务器可以是本机,也可以是另一个 IP,端口则是目标服务器的一个端口。若目标服务器返回了数据,则端口转发程序也负责将数据回传给用户。
先画个简图吧,端口转发程序在中间就相当于一个连接用户和目标服务器的桥梁,只会原封不动的将数据来回传输,不会数据进行任何处理。对于用户来说,连接端口转发程序就好像直接连接了目标服务器一样,端口转发程序的存在感很低。
二、端口转发能做什么
你可能有时会听人说【中转】二字,比如 A 服务器线路不好,用线路好的 B 服务器进行【中转】,其实这个【中转】就是利用了端口转发的原理。
降低数据传输延迟
假设你连接 A 服务器需要 100 ms,连接 B 服务器需要 30 ms,而 B 服务器连接 A 服务器只要 30 ms,那么你通过 B 服务器中转来连接 A 服务器,得到的时间可以粗略的估算为 60 ms,比直接连接 A 服务器要快 40 ms,若其它的成本忽略不计,那么这个中转就是值得的。
但是不一定所有的中转都会降低延迟,绝大多数反而会增大延迟,对于你来说,只有当 B 服务器的线路比 A 服务器要好上一个档次的时候,中转才可能是有用的。
解锁 Netflix 等视频流媒体
我这里拿 Netflix 来说明,其它的网站也是同理。
同样拿 A、B 服务器说明,假设 A 服务器可以观看 Netflix,但是 B 服务器却不可以,但是苦恼的是,你用 A 服务器速度很慢或者根本无法连接,你用 B 服务器速度快,且 B 服务器和 A 服务器之间也很快,这个时候就可以在 B 服务器架设端口转发程序至 A 服务器了,即使增加了延迟,这也是值得的。
其它说明
实际上,你可以使用不止一个转发程序进行中转,甚至可以形成一条转发链,比如 [你->B->C->D->A] 等等,中间的 B、C、D 都是转发程序,A 则是目标服务器。但是过长的转发链是弊大于利的,在满足你的需求的前提下,应尽量减少转发链的长度。
转发会消耗所有服务器的流量,就拿 [你->B->A] 来说,你发送 1MB 的数据至 A,那么流量消耗可以大致估算为:你(上行 1MB)、B(下行 1MB,上行 1MB)、A(下行 1MB),那么就是说,中间的转发程序永远都会消耗双倍的流量(即上行 + 下行)。从 A 送回数据也是同理。
三、v2ray 使用 dokodemo-door 进行端口转发
Dokodemo door(任意门)是一个入站数据协议,它可以监听一个本地端口,并把所有进入此端口的数据发送至指定服务器的一个端口,从而达到端口映射的效果。
下面来讲讲实际的例子,假设我有一台 A 服务器的 IP 是 1.2.3.4,并且在此服务器上的 1234 端口搭建了一个 vmess 代理(或其它任何代理),我想通过 B 服务器(IP 为 5.6.7.8)的 5678 端口来中转 A 服务器的 1234 端口,那么以下是 B 服务器所需要做的设置。
v2ray 配置文件设置
添加一个 inbound:
推荐使用配置文件生成器:强大的 v2ray 配置文件生成器
{ "protocol": "dokodemo-door", // 协议名称 "port": 5678, // 本地监听端口 "settings": { "address": "1.2.3.4", // 目标服务器,填写 IP 或域名 "port": 1234, // 目标端口 "network": "tcp,udp", // 要转发的网络协议,可填"tcp","udp","tcp,udp" "timeout": 0 // 入站数据的时间限制(秒),默认 300 秒 } }
v2-ui 面板设置
设置好后,重启 v2ray,此时你连接 B 服务器(IP 为 5.6.7.8)的 5678 端口,vmess (或其它任何代理)其它的配置仍旧和之前一样,只是将连接的 IP 和端口改为了 5.6.7.8 和 5678,就可以成功使用 B 服务器 中转 A 服务器了。
生成的配置放哪里呢?
routing里分别将两个inbound对应到outbound里的freedom
请问该方法有办法在一台主机上中转两台机器吗?按照你的配置单个中转很便捷,我想用香港的B主机中转一台美国和英国的机器,试着在中转机器的inbounds添加两个端口和两个机器的配置,还是不行,还是说就是只能中转一个机器吗?
xiexie大神,5分钟搞定~~