最开始用ngrok,难用。然后准备搞frp,结果一直没时间咕咕咕,现在v2有了反向代理功能,终于可以研究一下了。
为什么需要反向代理和内网穿透,这里不多说了,反正点进来看的都是有这需求的。
这里只说感想:v2ray的反向代理配合路由真的可以玩出很多骚操作!
为方便理解和统一称呼,我们把没有公网IP的主机,即欲访问的内网服务器称为bridge;把具有公网IP的主机,即外网直接访问的服务器称为portal;所有的外网设备都称为client
v2ray反向代理的大致工作原理如下:
- 在 bridge 和 portal 中配置各一个V2Ray。
- bridge 会向 portal 主动建立连接,此连接的目标地址可以自行设定。portal 会收到两种连接,一是由 bridge 发来的连接,二是公网用户发来的连接。portal 会自动将两类连接合并。于是 bridge 就可以收到公网流量了。
- bridge 在收到公网流量之后,会将其原封不动地发给主机 A 中的网页服务器。当然,这一步需要路由的协作。
因此,bridge 需要两个 outbound ,portal 需要两个inbound ,它们都需要配置相应的路由。
ps:本文省略了部分基础内容,详情请参考:V2Ray完全配置指南/反向代理配置章节,或直接查看官方文档。
pss:本文中所有实例都是实验通过的,如有其他思路欢迎在评论里面讨论。
目录
基础反向代理
用到反向代理最常见的场景就是想要在外面访问家中的NAS,此时家中的NAS即为bridge。
在本场景中,client 不需要安装 v2ray 客户端,直接通过浏览器进行访问。
bridge的配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout",
"protocol": "freedom",
"settings": {
"redirect": "127.0.0.1:80" // 将所有流量转发到网页服务器
}
},
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的IP地址",
"port": 4096,
"users": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
]
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"outboundTag": "bridgeout"
}
]
}
}
portal的配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "portalin",
"port": 80,
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1", // 将所有流量转发到网页服务器,与bridge上redirect配置相同,或任选其一配置
"port": 80,
"network": "tcp"
}
},
{
"port": 4096,
"tag": "interconn",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"portalin"
],
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal"
}
]
}
}
client 无需配置。
配置好 bridge 和 portal 的 V2Ray 后,先后运行 bridge 和 portal 的 V2Ray,访问 portal 的 IP 或域名,这时就能内网穿透访问内网服务器了。
注意在本场景下,brigde 配置中 outbounds 的 redirect 和 portal 配置中 inbounds 的转发端口要配置相同,或者就不配置 bridge 的。
全局反向代理(反向翻墙代理)
这个场景适用于:想要从国外翻回国内,但国内VPS贼贵,于是家中路由器上搭建;可以利用反向代理在校外访问校园网的资源;在以上等等场景之外,同样能访问家中内网里的NAS等设备。
在本场景中,client 等效于在 bridge 网络中。
在本场景中,client 需要安装 v2ray 客户端并进行相应的配置。
bridge配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout",
"protocol": "freedom"
},
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的IP地址",
"port": 4096,
"users": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
]
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"outboundTag": "bridgeout"
}
]
}
}
portal的配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "portalin",
"port": 5001,
"protocol": "vmess", // 用于client连接
"settings": {
"clients": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
}
},
{
"port": 4096,
"tag": "interconn",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"portalin"
],
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal"
}
]
}
}
client配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks"
}
],
"outbounds": [
{
"protocol": "vmess", // 对应portal中tag为portalin的inbound
"settings": {
"vnext": [
{
"address": "portal的IP",
"port": 5001,
"users": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
}
]
}
}
]
}
配置好 bridge、portal 和 client 的 v2ray 后,先后运行 bridge 和 portal 的 v2ray,再在 client 上运行v2ray即可。
本场景与第一个场景相比,主要区别有两个:
- bridge 和 portal 均没有配置端口转发
- portal 中原来的 dokodemo-door 协议变成了 vmess
- client 需要运行 v2ray 客户端,配置方法等同于连接到一个正常的 vmess 服务器
在第一个场景中,由于 portal 中的对于 client 的入站协议是 dokodemo-door,这时 v2ray 会将收到的流量原封不动地转发,因此相当于一个端口映射,我们通过指定端口的方式,将内网服务器的端口通过反向代理的方式暴露给外网。
而在本场景中,portal 对于 client 的入站协议变成了 vmess,因此 client 也需要配置 v2ray客户端;同时由于以上原因,portal 将不是一个单纯的“端口转发机”,而是成为了一个v2ray梯子,只不过这个梯子的出口是你自家的内网而已;同时内网设备将不会直接暴露于公网中,而需要通过连接 v2ray 客户端后才能访问。
在本场景的实际使用中,在 client 看来,portal 和 bridge 就像成为了一个整体,通过 v2ray 客户端连接后访问任何网站就如同是从 bridge 上访问的一样,就如同置身于家中的内网环境中。此时如要访问家中的设备,直接在浏览器中访问192.168.1.x这样的内网地址就行了(家中NAS设备记得配置静态地址,不然你懂的……)。
分流反向代理
以上两个场景基本就是绝大部分的使用场景了,但如果有些奇怪的需求,比如:我想在 client 上配置 v2ray 后,既能同时访问家中的内网设备,又能同时利用海外的服务器翻墙呢?
你们先把头伸过来,我给你们上个祝福.webp
先解释一下为什么会有这种需求。对于身在海外的人来说,翻回国内和访问国内内网设备的需求是同向的,因此直接适用场景二即可;但对于身在国内的人来说,需要同时翻出去和访问国内内网设备(以及身在海外要翻回国内同时还要访问海外内网设备的),这两个需求的方向是不同的,因此直接使用场景二中的方法就不靠谱了。
因此,我们需要使用一点小手段,来分流我们的流量,这个方法就是:路由。当然,在这里只是提出一种思路,和一个例子,通过这种方法甚至还能实现身在国内能同时同时翻出去和访问国内内网设备并能访问海外内网设备(真有这么闲到蛋疼的人吗)。
前面开篇就说到,利用路由可以在反向代理上能玩出很多骚操作,这个方法的重点在于如何区分我们想要进行反向代理的流量和爬梯子的流量。
那如何区分呢?答案是:端口。通过配置 portal 和 client 的路由配置,我们可以做到正常翻墙的同时,用特定端口访问我们自己的内网设备!(考验各位记忆力的时候到了!)
首先假设自己是个有钱人,家里面有NAS、有服务器、有智能家具、有一堆可以联网的设备,我们想要从外网访问它们。假设你有个刷了 openwrt 的路由器并且把 v2ray 装好了,现在这个路由器就是 bridge 了。
bridge配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout1", // 内网设备1
"protocol": "freedom",
"settings": {
"redirect": "127.0.0.1:21" // 内网设备1的内网地址与端口
}
},
{
"tag": "bridgeout2", // 内网设备2
"protocol": "freedom",
"settings": {
"redirect": "192.168.1.110:22" // 内网设备2的内网地址与端口
}
},
{
"tag": "bridgeout3", // 内网设备3
"protocol": "freedom",
"settings": {
"redirect": "192.168.1.120:80" // 内网设备3的内网地址与端口
}
},
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的IP地址",
"port": 4096,
"users": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
]
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5001", // 为内网设备1分配访问端口,须在portal分配的端口范围中
"outboundTag": "bridgeout1" // 对应内网设备1
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5002", // 为内网设备2分配访问端口,须在portal分配的端口范围中
"outboundTag": "bridgeout2" // 对应内网设备2
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5003", // 为内网设备3分配访问端口,须在portal分配的端口范围中
"outboundTag": "bridgeout3" //对应内网设备3
}
]
}
}
portal配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "portalin", // 与client连接
"port": 5001,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
}
},
{
"port": 4096,
"tag": "interconn", // 与bridge连接
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
}
],
"outbounds": [
{
"tag": "crossfire", // 正常流量出口
"protocol": "freedom"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"portalin"
],
"ip": "111.111.111.111", // 指定一个用来进行内网穿透的ip
"port": "5001-5100", // 指定一个进行内网穿透的端口范围
"outboundTag": "portal" // 对应内网穿透连接
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal" // 对应bridge连接
},
{
"type": "field",
"inboundTag": [
"portalin"
],
"outboundTag": "crossfire" //对应翻墙连接
}
]
}
}
client的配置与第二个场景中的相同:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks"
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的IP",
"port": 5001,
"users": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
}
]
}
}
]
}
配置好 bridge、portal 和 client 的 v2ray 后,先后运行 bridge 和 portal 的 v2ray,再在 client 上运行v2ray即可。
此时 client 可以正常翻墙,portal 即为梯子。如果想要访问内网设备,在浏览器中输入 portal 配置中的指定的ip,加上 bridge 为内网设备分配的端口号即可。如在本例中,如果我想要访问家中内网设备3,只需要连接上 v2ray 后直接访问 111.111.111.111:5003 就行了。
在本例中,我们使用路由配置将家中的内网ip映射到一个(xjb写的)ip上,同时将内网设备的不同端口也映射到了这个(xjb写的)ip的不同端口上。
在本场景中,内网设备同样不会直接暴露于公网中,需要通过连接 v2ray 客户端后才能访问。而与场景二的不同在于,场景二中连接 v2ray 客户端后相当于处于家中内网环境,访问内网设备是通过直接访问内网ip进行的;而本例在连接 v2ray 客户端后是处于翻墙后的状态,访问内网设备需要通过访问特定的(那个xjb写的)ip以及为内网设备分配的端口进行。
这个xjb写的ip地址其实不写也是可以的,但这样的话像本例中访问任意ip的5001-5100端口都会被转发到内网去了……不过为了方便好记,这个(xjb写的)ip当然是越简单越好,不过意外事故还是有可能的,比如政府网上办事/公司/学校给的一些ip地址刚好和你用的撞车(怎么可能),这时改改就行了,反正就改几个数字耗不了多少时间(。端口号也按个人喜好分配,也是方便记忆的最好。这个端口号和 v2ray 客户端连接的端口也没有关系,一样也是可以的。远程登陆费的是时间)
还有一点就是映射端口时,和上一个场景一样,家中设备要记得配置静态地址,不然的话后果自己体会。当然这个方法配置起来比较麻烦,毕竟需要把家中每个设备都单独配置 outbound,不过这个方法用起来是最舒服的,值得用点时间去写配置文件。
而且本例中 client 的配置,就是个白板配置,完全可以再加点国内直连啊,广告过滤啊什么的,多的就不在这里详说了……
基础反向代理·改
看了上面这个实例,估计有的人又有新想法了。
我给你的祝福还没有上够吗.png
基础的反向代理一个ip就对应一个设备,利用率太低了。既然上面可以使用路由配置实现类似端口映射的效果,那能不能直接在最简单的反向代理中实现呢,毕竟不是随时随地用到的所有设备上都装了 v2ray 吧,能在任何设备上直接访问不是更方便吗嘛?
答案当然是不可以啦!因为 portal 的入站协议是 dokodemo-door,是必须要指定一个转发的端口的,因此是不能只通过一个 inbound 就搞定多个端口的转发的。
所以在这个场景中的配置其实和路由完全没有一点关系,只需要给每一个内网设备都配置一个 inbound 就行了(其实就是第一个例子在portal上多加了几个inbound而已,没什么改动)(和上面那个例子中每个设备都配置一个 outbound 一样都极不优雅)
(为什么把这段放在这个位置?我也是写到这才想起来还有这茬的)
bridge配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout",
"protocol": "freedom"
},
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的IP地址",
"port": 4096,
"users": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
]
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"outboundTag": "bridgeout"
}
]
}
}
portal配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "device1", // 内网设备1
"port": 5001, // 访问端口
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1", // 内网ip
"port": 80, // 设备开放端口
"network": "tcp"
}
},
{
"tag": "device2", // 内网设备2
"port": 5002,
"protocol": "dokodemo-door",
"settings": {
"address": "192.168.1.100",
"port": 80,
"network": "tcp"
}
},
{
"tag": "device3", // 内网设备3
"port": 5003,
"protocol": "dokodemo-door",
"settings": {
"address": "192.168.1.200",
"port": 21,
"network": "tcp"
}
},
{
"port": 4096,
"tag": "interconn",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [ // 前面所有inbound的tag都要写
"device1",
"device2",
"device3"
],
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal"
}
]
}
}
client 无需配置。
配置好 bridge 和 portal 的 V2Ray 后,先后运行 bridge 和 portal 的 V2Ray,访问 portal 的 IP 或域名+端口号,这时就能内网穿透访问内网设备了。
基础反向代理·二改
在面对多个内网设备的情况下,如何优雅简单地写配置文件并简单优雅地访问一直是个问题,因为有多个设备的话想要分别访问就不可避免的要为其挨个单独设置一个 inbound 或 outbound。况且使用端口号来访问对应设备对记忆起来也是个说大不大说小不小的麻烦。虽说本文第二例的配置就挺简单的,但毕竟作为梯子才是v2ray的主业,内网穿透只是兼职而已。所以想要翻墙同时内网穿透,跟简单优雅的配置仿佛就是鱼与熊掌不可兼得的难题。
在认识到这个现状之后,我突然醒悟了:复杂的配置是为了简单优雅的使用而服务的口牙。只要用起来方便,配置复杂点又有什么关系呢(这是邪道好孩子不要学)。
v2ray的路由配置目前毕竟只能实现一些简单的功能,前面的使用特定ip访问也是一种取巧的方法。在本例中将展示使用 nginx 配合 v2ray 实现的反向代理。
使用建议:最好有个自己的域名。
首先准备工作:先把 nginx 装上:Nginx安装与配置
注意:本例使用的web服务器启用了SSL,并且由于使用了nginx转发,请注意bridge和portal端口不同
装好 nginx 后随便上传个模板主页充当门面。
接下来先开始配置 v2ray。
bridge配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout",
"protocol": "freedom"
},
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的域名",
"port": 443,
"users": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
}
]
},
"streamSettings": {
"network": "ws", //为了使用nginx反代这里需要使用ws
"security": "tls",
"tlsSettings": {
"allowInsecure": false
},
"wsSettings": {
"path": "/interconnpath"
}
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"outboundTag": "bridgeout"
}
]
}
}
portal配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "device1",
"port": 5001,
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1",
"port": 80,
"network": "tcp"
}
},
{
"tag": "device2",
"port": 5002,
"protocol": "dokodemo-door",
"settings": {
"address": "192.168.1.100",
"port": 80,
"network": "tcp"
}
},
{
"tag": "device3",
"port": 5003,
"protocol": "dokodemo-door",
"settings": {
"address": "192.168.1.200",
"port": 21,
"network": "tcp"
}
},
{
"port": 4096,
"tag": "interconn",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "134b53ca-b0cc-44a7-a28f-4214842c2fd6",
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws", //为了使用nginx反代这里需要使用ws
"wsSettings": {
"path": "/interconnpath"
}
}
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"device1",
"device2",
"device3"
],
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal"
}
]
}
}
nginx配置:
upstream nas {
server 127.0.0.1:5001;
}
upstream htpc {
server 127.0.0.1:5002;
}
upstream ssh {
server 127.0.0.1:5003;
}
server {
...
location /interconnpath {
proxy_redirect off;
proxy_pass http://127.0.0.1:4096; #WebSocket监听端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
location /nas/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nas;
}
location /htpc/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://htpc;
}
location /ssh/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://ssh;
}
...
}
反向代理的底层传输配置
有的人可能看到这里还在纠结为什么 v2ray 的反向代理在 bridge 和 portal 之间需要两条连接,现在就先别纠结了,因为实际上这里虽然有两个连接,但在实际的通信中这两条连接实际上是只通过一条连接,也就是上面例子中 tag 为 interconn 的那对出/入站协议进行的。
换句话说,我们可以为反向代理的连接配置底层传输方式,甚至还可以用其他的协议比如shadowsocks来传输反向代理的流量
对于有极端强迫症的人以及有特殊需求的人来说,这是个还算有价值的方案。
真有这样的人?
这里依然以上面第三个实例为基础,但本例中,我们在 bridge 和 portal 之间使用 shadowsocks 协议和 QUIC 传输方式;在 client 和 portal 之间使用 vmess 协议和 WebSocket 传输方式,并且 client 和 portal 之间的连接使用CDN进行中转。使用tls和CDN时需要提前准备一个域名并解析到 portal 上。
ps:所有的协议和底层传输都是可以改的,不是只有这种组合,这个例子(无法形容的奇葩组合方式)只是用于展示本方案可能性,并不是一个好的配置组合(好孩子千万不要直接照抄哦)。
pss:如果之前对这方面没有了解,建议先看看V2Ray完全配置指南/WebSocket+TLS+Web部分
bridge配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "test.ailitonia.com"
}
]
},
"outbounds": [
{
"tag": "bridgeout1",
"protocol": "freedom",
"settings": {
"redirect": "127.0.0.1:21"
}
},
{
"tag": "bridgeout2",
"protocol": "freedom",
"settings": {
"redirect": "192.168.1.110:22"
}
},
{
"tag": "bridgeout3",
"protocol": "freedom",
"settings": {
"redirect": "192.168.1.120:80"
}
},
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "portal的ip",
"port": 4096,
"method": "aes-128-cfb",
"password": "87654321"
}
]
},
"streamSettings": { // 底层传输配置,使用quic
"network": "quic",
"quicSettings": {
"security": "aes-128-gcm",
"key": "",
"header": {
"type": "utp"
}
}
},
"tag": "interconn"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:test.ailitonia.com"
],
"outboundTag": "interconn"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5001",
"outboundTag": "bridgeout1"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5002",
"outboundTag": "bridgeout2"
},
{
"type": "field",
"inboundTag": [
"bridge"
],
"port": "5003",
"outboundTag": "bridgeout3"
}
]
}
}
portal配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"reverse": {
"portals": [
{
"tag": "portal",
"domain": "test.ailitonia.com"
}
]
},
"inbounds": [
{
"tag": "portalin",
"port": 5001, // 注意在web服务器上配置转发
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
},
"streamSettings": { // 底层传输配置,client配置应与其相同
"network": "ws",
"wsSettings": {
"path": "/portalin",
"headers": {
"Host": "ailitonia.com"
}
}
}
},
{
"port": 4096,
"tag": "interconn",
"protocol": "shadowsocks",
"settings": {
"method": "aes-128-cfb",
"password": "87654321"
},
"streamSettings": { // 底层传输配置,应与bridge配置相同
"network": "quic",
"quicSettings": {
"security": "aes-128-gcm",
"key": "",
"header": {
"type": "utp"
}
}
}
}
],
"outbounds": [
{
"tag": "crossfire",
"protocol": "freedom"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"portalin"
],
"ip": "111.111.111.111",
"port": "5001-5100",
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"interconn"
],
"outboundTag": "portal"
},
{
"type": "field",
"inboundTag": [
"portalin"
],
"outboundTag": "crossfire"
}
]
}
}
使用CDN时应当配置web服务器(如Nginx、Caddy)分流。
使用QUIC时记得服务器防火墙放行udp
client配置:
{
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks"
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "portal的域名",
"port": 443,
"users": [
{
"id": "89682891-3d57-4cef-abbb-fbac5937ba29",
"alterId": 64
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false
},
"wsSettings": {
"path": "/portalin",
"headers": {
"Host": "ailitonia.com"
}
}
}
}
]
}
配置好 bridge、portal 和 client 的 v2ray 后,先后运行 bridge 和 portal 的 v2ray,再在 client 上运行v2ray即可。
访问方式与“分流反向代理”中相同。
反向代理的负载均衡
v2ray在V4.4的时候不声不响地放出了路由中负载均衡的配置,相比于之前在同一个 outbound 的 vnext 写入多个服务器的配置方式,在路由中配置负载均衡不仅不需要各服务器的协议与底层传输方式配置相同,还能配合其他路由设置实现更加灵活的分流。虽然目前的负载均衡器似乎只有简单的随机策略,但已经足够我们使用了。
依旧是本文的第三个实例中,这回我们有了十多台服务器,我们要在这十多台服务器上配置负载均衡,同时还要能保证在负载均衡后不仅翻墙要正常,而且反向代理的内网设备也要能正常访问
负载均衡的配置只涉及到 bridge 和 client,而 portal 的配置与第三个例子中的没有区别,只是需要在很多服务器上都配置一遍而已。
bridge配置:
就是个多个负载均衡的配置啦
等我有空再写(咕咕咕)
2018.12.28 初版
2019.1.3 增加:分流反向代理
2019.1.4 增加:反向代理的底层传输配置
2020.2.22 update 修改了部分描述
本文被阅读了:160,365次
刚刚试了一下,portal并不一定要有两个inbound,client和bridge可以复用同一个inbound
讲得很清楚明白 我想请问一下问题,环境是家里有公网,公司没有,我想把家里电脑A当做 portal,公司的电脑B当做bridge,如果按照场景二设置后,公司的电脑B所有流量会全部走A吗?家里的电脑A现在就相当于在公司的内网中了吗?我主要想实现家里的电脑A可以访问公司电脑B、C、D等等局域网的共享文件。请大佬帮下忙
1.按全局反向代理的方法设置后,只有通过A接入反向代理的网络的client的流量才会通过client->A(portal)->B(bridge)->目标地址这一路径,A和B本身的流量不会受到影响;
2.家里的电脑访问公司电脑需要给A在加上client配置让它同时充当portal和client就行,不过这里要注意配置路由,不要让反向代理的流量和client的流量冲突了;
3.试图暴露公司内网资源是严重违反安全规范的,建议不要进行这样的操作OvO
写的太好了,留言收藏先,有空再仔细看看学习学习。
真是细致。
我的有公网ip,手机客户端也可以连上家里nas上的v2服务端,手机显示家里公网ip的上网地址,但是没办法通过192.168.1.x访问内网设备,请问应该怎么配置?
既然已经有公网ip了就不需要内网穿透呀😂
访问不了可能是你客户端设置启用了内网ip直连,可以关闭类似设置或手动配置路由解决
我手机客户端用的bifrostv应用,里面没找到关闭内网ip直连选项。
我的客户端配置文件是这样的(请问怎么修改才能关闭内网ip直连,进而可以192.168.1.x访问内网的设备呢):
{
“log”: {
“loglevel”: “none”
},
“routing”: {
“domainStrategy”: “AsIs”,
“rules”: [
{
“type”: “field”,
“ip”: [
“geoip:private”
],
“outboundTag”: “block”
}
]
},
“inbounds”: [
{
“listen”: “0.0.0.0”,
“port”: 39000,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “xxxxxxxxxxxxxxxxxxx”,
“level”: 1,
“alterId”: 64
}
]
},
“streamSettings”: {
“network”: “ws”,
“wsSettings”: {
“path”: “/”,
“headers”: {
“Host”: “v9-dy-z.bytecdn.cn”,
“Connection”:”keep-alive”
}
},
“security”: “none”
}
}
],
“outbounds”: [
{
“protocol”: “freedom”,
“tag”: “direct”
},
{
“protocol”: “blackhole”,
“tag”: “block”
}
]
}
你贴出来的配置怎么看都像是服务端的配置呀😂
要改的话注意客户端配置的路由部分,改成类似这样的:
“routing”: {
“domainStrategy”: “AsIs”,
“rules”: [{
“type”: “field”,
“ip”: [
“192.168.1.0/24”
],
“outboundTag”: “proxy”,
}, {
“type”: “field”,
“ip”: [
“geoip:private”
],
“outboundTag”: “proxy”
}]
},
大佬您好,我想用v2ray链接两个内网,相互访问对方内网的smb服务。请问这可行吗?我网上搜了好多没找到这种案例的。
具体的情况是这样的:
我家有外网ip,可搭建v2ray服务器,有smb服务
单位没有外网,有上网行为管理(对http协议带宽大,用v2ray的目的是它可以伪装成http协议。),有smb服务
我能看懂v2ray的配置,但是v2ray的路由不会写,能请您帮忙写个这样需求的配置吗?谢谢了。
不清楚你的网络情况我也写不出配置啊😂
不过按你说的情况有两种解决方法
一是你都有公网ip了那可以直接将smb端口通过路由器映射直接访问
二是非要通过代理的话,只使用v2ray是不行的,你还需要一个全局代理软件,比如proxifier
有外网ip的话甚至不需要用反向代理,直接按照一般的配置方式来配置,不过这是要把家里的主机作为服务端进行配置
然后在客户端配置时要把本地地址指向代理outbound,再让proxifier代理配置只想客户端代理端口
这是我在网上找到的最详细的V2ray的实例文章了,非常感谢。内网穿透已经用frq实现了,准备按照教程实现海外回国看被地区限制的视频,原来设置SSR不是很稳定
请问楼主,我配置了全局反向代理,可以连接成功,也可以用内网IP上网,但是无法打开内网NAS等设备,请问是哪里出了问题?
检查你v2ray客户端的配置,是不是路由配置内网ip直连了
我客户端使用的全局代理模式,还是不能连接内网的设备。
1. 检查配置中的路由设置是否有内网ip直连
2. 提供完整配置文件和日志
3. 阅读https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md
好的,V2RAY的端脑客户端配置文件貌似改不了,改了重启V2RAY又会恢复之前的配置
如果使用了gui客户端请在gui客户端的配置里面修改,不要直接修改config.json
你这个基础反向代理 二改 中的 portal 的配置是不是没写完啊,你下面nginx 配了 个 location,你的protal 中只用了一个啊。
第一个location转发来自bridge的ws连接
第二到四个location分别转发来自客户端的访问
博主你好,在【基础反向代理·二改】 里面问个nginx 问题哈
upstream nas {
server 127.0.0.1:5001;
}
location /nas/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nas;
}
“inbounds”: [
{
“tag”: “device1”,
“port”: 5001,
“protocol”: “dokodemo-door”,
“settings”: {
“address”: “127.0.0.1”,
“port”: 80,
“network”: “tcp”
}
}]
上面这段配置在访问nginx 的时候是会转发到 127.0.0.1:5001/nas/ 还是 127.0.0.1:5001?
我测试了一下是nginx是会转发到127.0.0.1:5001/nas/的,这样的话v2ray继续反代nginx 流量请求到内网设备的地址不就是 127.0.0.1:80/nas 了吗?
还是说以上实例的场景中driver 访问的入口就是127.0.0.1/nas ? 还是说v2ray 入站dokodemo-door 中settings 把地址锁定成127.0.0.1,所有的请求路径都被忽略了?这样想也不对啊,请求路径被忽略那怎么切换界面
这里的nginx仅仅只是转发哦,以你举得这个例子,公网入口应该是https://你的域名/nas/
当你访问这个地址时,由nginx把流量转发到upstream nas,即v2ray的相应inbound监听端口127.0.0.1:5001
大佬我想请教一下这个需求[doge]
我在学校,学校网络是ipv4和ipv6双栈,家里有公网ipv4和ipv6开放,家里和学校都有openwrt路由器
家里的路由器下还接了一个ubuntu的服务器
学校的ipv6网络是不限速且免费的
因此我想把我所有的ipv4流量全部通过ipv6转发到家里,然后再通过家里的ipv4访问ipv4资源,并且能同时访问家里的ubuntu服务器,同时能翻墙
有域名,有v2ray机场
请问要怎么配置呢?
要啥反代,你家里都有公网ip了
直接家里路由器当服务器配置一对Inbounds/Outbounds,只监听ipv6,学校里面客户端用ipv6地址连接不就好了吗OvO
如果想从家里访问教育网北邮人要怎么配置呢
北邮人把三大运营商的ipv6网段屏蔽了呜呜呜
突然觉得你的这个需求刚好和上面是反过来的
不如学校里面电商当bridge, 家里电脑当portal,同时也是client
家里面电脑当portal的时候记得路由器开端口转发或者映射,另外配置inbounds时直接使用http或者socks,这样访问时直接使用浏览器或者系统代理就好了
想把本地流量(内网)加入指定host混淆,如何添加配置信息,该怎么写?
抱歉,我不是很清楚你所说的host混淆是什么意思😂
大佬,我照您的配置了一下,报这个错误,试了好久了,我想实现校外使用校内的服务器上网,协议用的shadowsocks/vmess/kcp都试过了,都报这个错误,校内台式机需要放开80端口吗?我只在80开了个网站
v2ray.com/core/proxy/vmess/encoding: failed to read request header > v2ray.com/core/transport/internet/kcp: Read/Write timeout
1.检查公网服务器对应端口防火墙是否放开
2.校园网用kcp的话,确认UDP能用?
膜拜大佬,我用V2ray配置在外网服务器上,家里和办公室都可以在路由器下的内网用V2rayN对墙外进行访问。为什么我到了网吧用V2rayN客户端连接不上去,困惑好久了,搞了半个月也搞不通。请帮忙解决一下实际问题,因为单位网络人均只有200K,只能来用网吧的网。谢谢 🙂
似乎某些网吧网管软件会限制对系统的更改,尤其是代理、虚拟网络这些工具的使用,这个不是v2ray能解决的问题😂
求教大佬!有这样一个场景,一个公网IP的VPS,两台电脑,一个公司的,一个家里的;两台电脑都要能翻墙,然后家里电脑要能访问公司的电脑上的文件,折腾了好久没折腾出来。。。。
可以在有公网ip的vps上分别配置一对用于反向代理和用作梯子的inbound/outbound,使用的时候客户端按需切换配置文件,共存的话我只想到能在路由配置里面根据端口或域名进行分流…
谢谢大佬,我再试试
description 看走眼了,我笑了.
喵喵喵?
很棒的理解,查了很久的bridge和portal用法,读完之后基本都理解了。
但我真的有个比较怪异的场景,折腾很久也没想到一个靠谱的解决方式:
服务器A是Web服务器,具有可以访问的的80和443,但服务器A的OUTPUT链是被阻断的,意思是,服务器A无法主动建立任何对外连接,只有在80/443端口上被动建立的连接可以正常双向通信。
需求是服务器A可以正常访问外网,想法是通过服务器A做portal,另一台具有正常外网访问的服务器B做bridge,通过服务器A端口443下挂的v2 Websocket主动连接到服务器A,服务器A使用iptables把tcp流量转发到local的dokodemo-door上,最后outbound利用服务器B主动连接到A的那条链路完成外网访问。
虽然笔者你提到了portal和bridge确实在底层是共用一条全双工的transport,但在v2ray配置上,我似乎是无法做到把服务器A的那条ws inbound同时作为outbound来用。不知道是不是我配置问题?
这样其实就相当于把portal自己当成透明代理来使用了,这里可能是配置产生的问题
使用iptables转发流量时,dokodemo-door的入站协议配置中followRedirect项应为True
具体可以参考官方文档(https://www.v2fly.org/config/protocols/dokodemo.html)以及透明代理配置说明(https://guide.v2fly.org/app/transparent_proxy.htm)
您好.想咨询下问题.我用的第二个方案.在家里的树莓派上做bridge(192.168.1.109),阿里云做portal,手机上做client.看了下日志.访问百度的流量都走到树莓派了.但是ping不通树莓派.而且我在192.168.1.101的主机上部署了个web手机也访问不到(树莓派上能访问)
啊这…
建议树莓派、阿里云的防火墙都检查一下,另外手机客户端上的分流选项也检查一下,是不是局域网直连了_(:з)∠)_
您好 我是人在境外但是大学校园网有封锁端口和vpn, 最早的时候使用openvpn欺骗splashtop做远程桌面 校园网失效后使用shadowsock,可以把ip挂出来 但是内网访问像是有污染一样不稳定(例如路由器网关后台可能一个页面正常 点另一个tab进行其他操作的时候就像赌博一样 大部分时候都崩溃后来就放弃了) nas和远程桌面都不工作。最近开始研究v2, 可是像我这种简单的需求想不懂怎么配置(我本身就有公网地址)我内网nas做了个虚拟乌班图然后架起v2,手机蜂窝连接后没有内网权限。请问是必须要按照bridge+传送门方式设置吗(我可以做多个虚拟机来模拟 但是感觉非常多此一举) 按照我的理解来说我的手机client-路由器端口转发-nas虚拟机(独立ip不和nas共享)-v2 freedom输出应该是直接可以访问内网的。 是我的理解有问题吗
你有公网ip为什么要设置路由器转发?
就按全局反向代理的模板配置,有公网ip的设备作为portal,内网任意设备作为bridge,bridge的outbounds配置为freedom,直接连接公网设备就等于访问从内网设备访问内网
对于内网设备来说,所有流量都是出站流量,不需要额外配置路由器端口转发
感谢大佬的分享,现在已经照抄完成了一份1个portal对1个bridge的配置。
现在又有需求添加一个新的bridge,暂定为bridge2,搜索过了一下这需求似乎没人提起
按官方说法几个portal对几个bridge都是任意的,尝试写了一份,。
bridge2几乎同bridge1,改了domain、和vmess的id、port
portal上对应添加了bridge2上相关内容,但是却导致与bridge1的反代理都失效,奇怪的是,portal上的日志输出也是空的。
————————————
更新,修正了自己的一个小错误,但也有了新的问题。
“reverse”: 需要的是对象({}框起来的),之前照着”inbounds”写成了一个数组([]框起来的)。
至此portal上的日志终于有了输出,不过error上显示v2ray只采用了最后的一个”reverse”,看来是限定只能有一个了。
或许bridge2应该直接指向bridge1相同或者不同的的vmess,但是分流也出现了明显的问题
期待大佬指点下
反向代理配置里面”domain”配置是不是没改OvO
如果同时启用两对反向代理连接的话,”domain”配置应该不一样才行,不然路由区分不出来
基础反向代理·二改 的Nginx能给个完整的配置吗?我copy你的启动不了Nginx:
May 26 22:48:14 nps-hk systemd[1]: Starting nginx – high performance web server…
May 26 22:48:14 nps-hk nginx[1409]: nginx: [emerg] unknown directive “…” in /etc/nginx/conf.d/default.conf:57
May 26 22:48:14 nps-hk systemd[1]: nginx.service: control process exited, code=exited status=1
May 26 22:48:14 nps-hk systemd[1]: Failed to start nginx – high performance web server.
nginx的关键配置都在文中了哦,其他部分都是保持正常配置不变的
看你的错误提示是配置文件第57行有问题,你是不是复制配置的时候把省略号一起复制进去了啊OvO
感谢,我是把省略号copy进去了,我再试试~
帮忙看下我的ngnix的配置文件,死活穿透不了,端口我都改成600*,
配置文件我是修的/etc/nginx/conf.d/default.conf,帮忙看下是否有问题~
upstream nas {
server 127.0.0.1:6001;
}
upstream htpc {
server 127.0.0.1:6002;
}
upstream ssh {
server 127.0.0.1:6003;
}
server {
listen 443;
server_name localhost;
location /interconnpath {
proxy_redirect off;
proxy_pass http://127.0.0.1:4096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
}
location /nas/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nas;
}
location /htpc/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://htpc;
}
location /ssh/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://ssh;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
不好意思最近比较忙没看留言
server_name localhost;这一行
server_name要么为空,要么就填你的域名,写localhost外部根本没法访问啊😂
额,按照教程处理后,如果完全按照楼主的来做,发现科学上网无效,如果保留科学上网配置,无法访问内网服务,楼主又二合一的么?
额这个配置完全没有考虑到科学上网的东西😂
需要同时使用科学上网建议额外配置一对inbounds/outbounds单独用于梯子
不知道和直接用frp相比的优势是什么
frp配置简单,v2可以兼职,配置灵活,就这样
请问正向呢.V2做中间通道,怎么设置
也就是 A–>B(V2)–>IP1
–> IP2 ..
–> IP3
就是代理转发吧,这个可以参考社区文档(https://guide.v2fly.org/advanced/outboundproxy.html#基本代理转发)这一节
特别请注意,若使用了出站代理配置,当出站代理生效时,此出站协议的streamSettings将不起作用。
请教一下,我网络环境如下:A 是路由器(比如TP-LINK普通宽带路由器),公网IP也是在该路由器上(带宽带拨号功能),然后在路由上映射10086端口给内网ip为 192.168.0.2 的机器B,在机器B上运行 v2ray server 端口10086,我在手机上安装v2ray客户端,连接上述公网IP的10086,然后对192.168.0.x 网段(肉段内经常增加ip 和端口 的服务,做测试用。)进行访问。如何配置?
请参考第二条全局反向代理,连接后客户端等效于在内网网段
谢谢大佬的教程。不过暂时还没尝试成功,简单说下我的需要:国外有台公司电脑可以访问intranet浏览公司的数据库,我想在国内家里用反向代理连接这台电脑访问公司内网,于是乎我按反向翻墙代理配置了台vps作为portal。可是国外的电脑和国内的电脑v2ray都显示failed to find an available destination. dail tcp xx.xx.xx:4096: i/o timeout..感觉意思是v2ray连接不到vps,于是我尝试用telnet pin 4096 和5001端口也都显示failed..这是不是代表我vps有问题?
为什么不先检查一下防火墙呢?😂
大佬牛批!VPS和公司防火墙都有问题,原来我公司电脑防火墙outbound作妖,用443端口就连上了。。已经在家里成功获取到公司内网数据库!爽歪歪! 不过配置2因为没用WS+TLS单纯Vmess链接VPS还是容易被GWF封吧。。
嘛,给反向代理的outbounds/inbounds改改ws+tls的传输配置就可以了,不过国内流量墙一般不会管吧😂
不过你直接在公司内网服务器上部署内网穿透……不怕出事吗😂
VPS和公司内网环境都在国外,我用的公司在欧洲的远程电脑作为bridge,所以流量还是经过墙的吧,在Client和portal之间用ws+tls应该就好了。说实话有点怕公司IT发现,不过有Vmess协议加持讲道理安全性应该没问题(吧)。特殊时期,只能home office。
大佬,拜读了您的分享,非常感谢。虽然有点梦,但是还是有所启发。想请教一个问题:
假如家、公司有动态公网ip,这个情况是否只需要装一个v2ray,通过路由功能,就可以了?
我折腾了一天多了,没有收获。大佬能否百忙中,指点一二,我可以继续研究。
其实就是想简单实现vpn功能,试过很多软件都不行
万分感谢
其实有公网ip的话直接使用ddns就可以了啊,直连网络条件肯定是最好的,如果你是自用的话,注册一个com域名一年也就9刀,配合cloudflare配置ddns,这个成本相对于租用主机来说少太多了,之所以使用内网穿透其实最主要就是因为没有公网ip无奈啊……配置了动态域名解析后就可以使用openvpn(开源,配置相对简单)搭建vpn服务器了
大佬,您说的我都实现了。现在不想内网设备暴漏在公网上,想用vpn访问,这样安全一点。openvpn用的路由器刷的openwrt内置的,win10死活连不上,手机可以。实在没招了。
那其实你有这样的需求也的确可以用反向代理配置
不过参见我跟楼上那位老哥的回复,配置路由理论上是可以的,但实际上inbounds为vmess时似乎有问题,我不确定是不是我写的配置哪里有问题,之后有时间再研究
如果只是想简单的利用v2ray可以访问内网环境的话,不如额外增加一对inbounds/outbounds,就使用最简单反向代理配置,按需连接吧
大佬,汇报下。我用torjan一键脚本,改了下自动获取ssl证书,用chrom加一个插件实现了目的。算是基本达到目的。感谢大佬,有时间再研究下V2ray,向大佬学习。
评论嵌套太多挤不下啦😂另起一楼回复楼上ww
原本按理说未被路由匹配的流量就直接走默认outbounds了,然后我回头仔细看了下我写的配置,路由里面第一个就把portalin那个inbounds直接转发到bridge了,后面那个分流不仅没用ip和域名还混写,能分流才有鬼了😂(我真就瞎写不过脑子啊)
重新写一下应该是这样的:
{
“portals”: [
{
“tag”: “portal”,
“domain”: “example.com”
}
],
“inbounds”: [
{
“tag”: “portalin”,
“port”: 2048,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “01234567-aaaa-bbbb-cccc-76543210abcd”,
“alterId”: 64
}
]
}
},
{
“tag”: “interconn”,
“port”: 4096,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “76543210-cccc-bbbb-aaaa-abcd01234567”,
“alterId”: 64
}
]
}
}
],
“outbounds”: [
{
“tag”: “direct”,
“protocol”: “freedom”,
“settings”: {}
}
],
“routing”: {
“domainStrategy”: “IPIfNonMatch”,
“rules”: [
{
“type”: “field”,
“inboundTag”: [
“interconn” //这个是跟bridge通讯的,没什么问题
],
“outboundTag”: “portal”
},
{
“type”: “field”,
“inboundTag”: [
“portalin” //这个就要指定客户端连接的这个inbounds了,同时匹配到这个inbounds入站及下面域名的丢给bridge
],
“domain”: [
“geosite: cn”,
“domain: 12306.com”,
“domain: bilibili.cn”,
“domain: jd.com”,
“domain: taobao.com”
],
“outboundTag”: “portal”
},
{
“type”: “field”,
“inboundTag”: [
“portalin” //另起一个匹配ip,上面都没匹配到的就会走默认的outbounds
],
“ip”: [
“geoip: cn”
],
“outboundTag”: “portal”
}
]
}
}
bridge就还是正常配置一下:
{
“reverse”: {
“bridges”: [
{
“tag”: “bridge”,
“domain”: “example.com”
}
]
},
“outbounds”: [
{
“tag”: “bridgeout”,
“protocol”: “freedom”,
“settings”: {
}
},
{
“protocol”: “vmess”,
“settings”: {
“vnext”: [
{
“address”: “portal的IP地址”,
“port”: 4096,
“users”: [
{
“id”: “76543210-cccc-bbbb-aaaa-abcd01234567”
}
]
}
]
},
“tag”: “interconn”
}
],
“routing”: {
“rules”: [
{
“type”: “field”,
“inboundTag”: [
“bridge”
],
“domain”: [
“full:example.com”
],
“outboundTag”: “interconn”
},
{
“type”: “field”,
“inboundTag”: [
“bridge”
],
“outboundTag”: “bridgeout”
}
]
}
}
emmmmm大概就这样……吧,话说这种方式是否可行还我还真不确定,因为一般来说用来匹配路由的inbounds一般都是socks、http或者dokodemo-door,就不知道当inbounds为vmess的时候还能不能正确识别流量。
安卓用户,小火箭没用过,pass。至于路由规则和outbounds怎么关联,在一个rules里面写上outboundTag就可以了,当然小火箭怎么配置我真不知道。
软路由的话没怎么玩过openwrt,但你说的那种情况,只在路由器上运行个v2ray客户端的话,“socks监听127.0.0.1:1080,dokomo-door监听0.0.0.0的某一端口”实际上都是v2ray在监听路由器的某个端口哦,此时还是需要电脑上配置socks或者http代理指向路由器的监听端口才可以,路由器是不会主动转发的。你想要的效果应该是透明代理,这个还需要路由器配置转发才行哦,详细的可以看https://guide.v2fly.org/app/transparent_proxy.html还有https://guide.v2fly.org/app/tproxy.html这两篇教程,都写得很详细了。
感谢回复。
Portal的配置测试了。全部流量会走直连,不会分配给代理。为了验证自己想法是正确的,我把outbounds改成blackhole,则全部都无法访问。
说明路由中domain的geosite和geoip规则并没有生效。
是否是“不知道当inbounds为vmess的时候还能不能正确识别流量”这个原因,就不得而知了。服务器配置扑街- -!
openwrt我是真的是被搞的不知道怎么才对。
首先iptables的命令行设置,直接敲上去是不起作用的。
然后查到需要修改防火墙规则的地方在firewall.user文件里。
根据规则,我写了防火墙规则后,启动v2ray会报错。无论dokodemo-door监听什么端口都说端口被占用。。客户端配置扑街- -!
修炼不够,还在研究。
俊男靓仔猫娘控,你好,拜读了你帖子,你写的很棒!
本人海外党,正好在研究国外如何潇洒看国内视频的方法,然后在V2ray官网也参考了反向代理2的内容搭建了一套服务器。
但是我设置后出现了如下问题:
1.可以正常连接,流量正常,但某云音乐,某Q视频访问的时候仍然显示IP限制未解除,检查IP位置仍在海外
2.客户端连接后妥妥的不能访问谷歌了,就是典型的翻回国后翻不出来的情况
我的模型如下:
Bridge:国内公网IP云服务器A,Portal:国外公网IP云服务器B,Client:海外手机/PC
配置文件完全格式完全COPY官方教程,配置我大概解释下:
1.Bridge:国内公网IP云服务器A
只有outbounds:tag:out是freedom,另一个tag:tunnel是vmess指向B域名地址和端口,没配置WS
路由:
bridge进,tag:out出;bridge进,B的域名地址,tag:tunnel出
2.Portal:国外公网IP云服务器B
只有inbounds:tag:interconn监听端口1(即A指向B的端口),vmess协议,没配置WS
tag:tunnel监听端口2(即C连接B时用的端口),vmess协议,使用了WS
路由:
tag:interconn进,portal出;tag:tunnel进,A的域名地址,portal出
PS:其实我自己考虑原因的时候也发现了问题,服务器A与B的连接应该是Vmess+WS+TLS才对。。但貌似COPY的时候只是学会了客户端和服务器之间的WS连接。。。AB之间怎么整不太明白了
现在我想实现的效果是:
1.直接可以享用国内资源
2.客户端即便连接了V2ray,海外资源的访问也不受影响
关于配置的疑问:
1.配置上感觉C连B的时候不需要WS+TLS,对吗?
2.AB之间使用WS+TLS如何配置?
3.C连B的时候,为了实现海外资源的访问不受影响,B的路由规则该怎么写?
是不是得利用国内IP网段地址?我的思路是国内IP网段是固定的,然后设置只有这些网段才进A,其余的都是不进A直接从B自由出。。
大概思路我懂,不太会写格式。。
不好意思,学艺不精,请多指教
感觉你是不是钻牛角尖了啊😂,使用反向代理/内网穿透的需求主要是没有公网IP,你的国内云服务器既然已经有公网IP了,为什么不直接在国内服务器上配置inbounds/outbounds用,反而还要用反向代理绕一圈呢?
说白了你的需求跟国内往外爬墙刚好相反,完全不需要使用反向代理呀。实现“国内资源走梯子,海外资源的访问不受影响”,直接在国内云服务器上配置好后,客户端直连就可以了,只需客户端的路由部分这样写:
“routing”: {
“domainStrategy”: “IPIfNonMatch”,
“rules”: [
{
“type”: “field”,
“port”: null,
“outboundTag”: “direct”, //自定义国外域名直连,outbounds为freedom,outboundTag为”direct”
“ip”: null,
“domain”: [
“geosite:google”,
“geosite:github”,
“geosite:netflix”,
“geosite:steam”,
“geosite:telegram”,
“geosite:tumblr”,
“geosite:speedtest”,
“geosite:bbc” //自行添加国外域名,格式见官方文档路由部分
]
},
{
“type”: “field”,
“port”: null,
“outboundTag”: “proxy”, //自定义国内域名使用代理,outbounds按需配置,outboundTag为”proxy”
“ip”: null,
“domain”: [
“domain:12306.com”,
“domain:bilibili.cn”,
“domain:jd.com”,
“domain:taobao.com” //自行添加国内域名,格式见官方文档路由部分
]
},
{
“type”: “field”,
“port”: null,
“outboundTag”: “direct”, //使用预定义域名列表,国外域名直连
“ip”: [
“geosite:geolocation-!cn”
],
“domain”: null
},
{
“type”: “field”,
“port”: null,
“outboundTag”: “proxy”, //使用预定义域名列表,国内域名、ip使用代理
“ip”: null,
“domain”: [
“geoip:cn”,
“geosite:cn”
]
}
]
}
考虑到该使用场景是在国外,请务必、务必、务必将直连(freedom)的outbounds放置在outbounds数组的第一位作为主出站协议,使未被路由规则匹配的地址默认直连,并可将路由规则当中的国外地址直连两部分删去。
感谢回复。
按照你提供的思路,我重新搭建了国内服务器。并且发生了免费SSL无法通过的问题。
用其他方法获得SSL证书后,突然又发现个问题,在国内域名没备案,导致自己的Web服务器没法正常访问。
然后国内云服务器的配置和我国外直连用的云服务器的配置是一模一样的,V2ray+ws+tls模式。
结果无法正常访问任何网页。请问域名没备案会影响v2ray的连接使用么?
有什么方法解决问题呢?
国内云服务器备案问题我之前的确没有考虑到OvO
备案是针对网站的,国内云服务器如果上面有网站但没有备案的话80端口是不开放的,部分云服务商未备案的话连443、8080端口也一起封,所以let’s encrypt验证过不了,国内好像云服务器好像的确无解啊……
怕麻烦不想备案的话可以换端口,不用80/443端口,其他好像也没办法了……
现在突然想想你之前用反代好像还有点道理,毕竟我之前还没想到国内还有备案这一茬😂
然后我又仔细看了下你之前描述的配置,配置看起来是没有问题的,可能还是由于路由配置的原因导致国内/国外流量没有正确区分(用的是国内往国外翻的配置,跟你描述的很像)。另外至于国内服务器A和国外服务器B之间使用ws+tls的话,配置等同于将A的outbounds当作客户端,把B的inbounds当作服务器按ws+tls配置就行,reverse和路由配置保持不变。这里需要注意的一点就是服务器B的nginx配置需额外增加一个location块用于转发该连接的流量。
感谢回复。
第一个,国内云服务器上,let’s encrypt即使指定其他端口,仍然无法通过,我感觉我大天朝云服务商是妥妥的封了let’s encrypt了。
第二个,我查了绕过备案方法,用云服务你妥妥的绕不过啊,除非反向代理一个有备案的域名,所以等于没说。我的目的不是为了架设WEB服务器,所以不折腾了。
此外,我确实用的是国内向国外翻的配置。按照自己对V2ray的理解,在客户端连接服务器的基本配置上,无论内→外,还是外→内,方向上并没有本质区别。
最后,关于nginx location的配置问题,有一点疑惑,客户端C连接服务器B时使用的路径,是否可以在服务器A连接服务器B时共同使用?我在搭建服务器A与B的连接配置(V2ray)的时候,也是相当于把服务器A当作客户端C的方法写的,相当于A与C同时访问B。关于在nginx添加额外的location块的部分,如何添加?
我的理解:
A和C同时用自身的443端口访问B。
B开放2个端口17666,17888接收A和C的流量。
因此,nginx配置:
location /路径A/ {
proxy_pass http://localhost:17666;
···
}
location /路径B/ {
proxy_pass http://localhost:17888;
···
}
可是。。。路径A和路径B不应该是一个玩应儿么?难道我需要在nginx上搭建2个WEB?
我之前的配置是:
location /路径A/ {
proxy_pass http://localhost:17666;
proxy_pass http://localhost:17888;
···
}
不知道上述认识有没有错,如果有还请指正。
这里还是要先说一下nginx在ws+TLS+web这套配置中的作用。
客户端配置时,在streamSettings中配置network为ws,security为tls时,表示传输协议使用WebSocket,并启用传输层加密,加密类型为tls。注意在v2ray中ws协议并没有原生的tls配置,tls则是由nginx提供的,此时nginx的作用就是端口转发+加密。
来看具体配置,例如在服务器端配置两个inbounds:
“inbounds”: [
{
“port”: 17666,
“listen”:”127.0.0.1″,//只监听 127.0.0.1
“protocol”: “vmess”,
“settings”: {//略
},
“streamSettings”: {
“network”: “ws”,
“wsSettings”: {
“path”: “/ws/path/A”
}
}
},
{
“port”: 17888,
“listen”:”127.0.0.1″,
“protocol”: “vmess”,
“settings”: {//略
},
“streamSettings”: {
“network”: “ws”,
“wsSettings”: {
“path”: “/ws/path/B”
}
}
}
]
可以看到v2ray服务端配置ws协议的时候没有涉及到tls相关配置。
配置nginx同样需要两个location块对应两个inbounds:
server {
listen 443 ssl;
ssl_certificate /etc/v2ray/v2ray.crt;
ssl_certificate_key /etc/v2ray/v2ray.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name example.com;
location /ws/path/A { #对应端口17666的inbounds的path
proxy_redirect off;
#后端错误重定向
proxy_intercept_errors on;
error_page 400 = https://example.com/;
#对应端口17666的inbounds
proxy_pass http://127.0.0.1:17666;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
# 向后端传递访客ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/path/B { #对应端口17888的inbounds的path
proxy_redirect off;
proxy_intercept_errors on;
error_page 400 = https://example.com/;
#对应端口17888的inbounds
proxy_pass http://127.0.0.1:17888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注意两个location块的区别,location的路径和转发的端口需一一对应。nginx的个location配置的作用就在于分流,将不同path的流量分别转发到不同的端口。
最后在客户端上配置:
“outbounds”: [
{
“protocol”: “vmess”,
“settings”: {
“vnext”: [
{
“address”: “example.com”,
“port”: 443,
“users”: [ //略
]
}
]
},
“streamSettings”: {
“network”: “ws”,
“security”: “tls”,
“tlsSettings”: {
“allowInsecure”: false,
“serverName”: “example.com”
},
“wsSettings”: {
“path”: “/ws/path/A”
}
}
}
}
],
可以看到客户端配置的时候,outbounds的端口都是443,只有path不同,可以看到,客户端直接连接的是服务器上的nginx,再有nginx转发给v2ray服务端,整个连接过程如下:
客户端 –> nginx 443端口 path为/ws/path/A –> nginx根据location中path转发给本机17666端口 –> v2ray服务端17666端口建立连接
说句题外话,nginx的确可以方便的配置多个web,只不过这里只需要一个web就足够了。
感谢回复。
好消息,根据您的指导,已经成功完成V2ray+ws+tls的反向代理,顺利翻墙回国啦!!
我这爱折腾的心又开始躁动了~
在此先跟您分享下自己的心得,为了翻墙回国,我在国内云服务器上搭建了三种梯子:
1.V2ray+ws+tls反向代理
2.Docker部署shadowsocks-libev+v2ray-plugin(ws类型+tls)
3.Docker部署IPsec VPN服务器
经过测试,最好用的是3,部署简单方便,速度也非常不错,无论上传下载几乎能跑满国内云服务器的带宽,但估计容易被封。
2部署起来也挺简单,就是域名证书申请上有点坑,因为不需要搭建web服务器,只需要域名证书就好,所以备案可以忽略。速度方面不太满意,上传下载均不行,上传甚至没有速度。
1的部署相对较难,难点在portal服务器上正确配置web服务器上,如果没有您指导如何正确配置Nginx,估计使用ws+tls方法几乎没法完成。速度测试了一下,还行。不过仍然是出现了上传没有速度的现象。
所以,问题来了:
1.上传没有速度是什么原因造成的?使用3的时候上传和下载都可以跑出带宽,1,2的时候上传基本没有速度。我知道上传不影响我看视频的速度,只要下载速度OK就行,不过如果您知道这是为什么,还请为我解惑。
2.关于连接V2ray反向代理后,无法正常访问国外资源的问题,您在之前提供了一个关于客户端配置的方法,请问有没有可能在portal服务器上设置呢?毕竟手机连接的时候,配置文件不知道在哪加载,还是想完成直连比较爽。如何修改portal的路由设置,请指教。
—————
PS:题外话,还有个小白问题。。最近在搞Nginx代理的时候,遇到了一个问题。
我利用Docker建了一个elasticsearch的服务器,然后端口映射使用的是本地对容器(9300:9300),按理说直接访问localhost:9300就能看见网页吧,然后我用服务器IP加端口号9300访问,结果不行。不知道为什么不能以IP:9300访问。。
于是我考虑到了用Nginx来代理。然后在Nginx代理本地9300,结果Nginx设置完以后,启动Nginx会显示9300被占用,然后就查了各种方法,结果还是不会搞。请指导一下。
简单来说,Nginx安装在服务器上,然后我以后想利用Docker建立各种web服务器,然后想用Nginx代理来实现访问,配置应该怎么实现?谢谢~
没上传速度这个我也不知道啊,就这现象我也胡乱分析不出什么玩意啊OvO
至于在服务器端进行分流的,一般来说不会这么干啊,毕竟流量都已经到服务器端了,再分流那不就还得绕回来,这样完全没有分流的意义了啊😂真要在服务器端分流那一般都是因为这个服务器后面还有多个二级代理,真要在反代上面配置的话portal上大概这样写吧:
{
“portals”: [
{
“tag”: “portal”,
“domain”: “example.com”
}
],
“inbounds”: [
{
“tag”: “portalin”,
“port”: 2048,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “01234567-aaaa-bbbb-cccc-76543210abcd”,
“alterId”: 64
}
]
}
},
{
“tag”: “interconn”,
“port”: 4096,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “76543210-cccc-bbbb-aaaa-abcd01234567”,
“alterId”: 64
}
]
}
}
],
“outbounds”: [
{
“tag”: “direct”,
“protocol”: “freedom”, //portal在国外的话,默认流量直接freedom就出去了,虽然还是在国外,但还是绕了一截路
“settings”: {}
}
],
“routing”: {
“domainStrategy”: “IPIfNonMatch”,
“rules”: [
{
“type”: “field”,
“inboundTag”: [
“portalin”
],
“outboundTag”: “portal”
},
{
“type”: “field”,
“inboundTag”: [
“interconn”
],
“outboundTag”: “portal”
},
{
“type”: “field”,
“port”: null,
“outboundTag”: “portal”, //访问国内的流量,反手就丢给bridge,一定要记得在bridge上配置一个freedom的outbounds
“ip”: null,
“domain”: [
“geoip: cn”,
“geosite: cn”,
“domain: 12306.com”,
“domain: bilibili.cn”,
“domain: jd.com”,
“domain: taobao.com”
]
}
]
}
}
(没仔细想xjb写的配置,有问题之后再说,反正这个配置写出来我觉得挺魔幻的)
最后那个nginx的反向代理,我觉得你最好先检查一下防火墙有没有开9300端口,我觉得是你防火墙没放行OvO
你映射本地主机的9300端口到docker的9300端口,本地主机的9300端口肯定会被占用啊,nginx当然不能再去用9300端口啊
docker端口映射可以自己设置的,不一定端口号要对应,把本地主机的3900端口映射到docker的9300端口也是可以的
nginx当端口映射用也比较好配置,就跟这篇文章里面写的差不多,比如把80端口转发到8080:
server {
listen 80;
…
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080
}
}
大概就这些OvO
感谢回复。
protal的配置试了一下,不通。无法访问网页。
比较疑惑的是,protal配置中间添加了一个outbounds是freedom的出战,可是在routing中完全没有用到啊?
我明白您说的那个流量走向的意思了,确实是绕路了。这个做法不太明智吧。但我发现配置客户端感觉更麻烦。。。
真的不想再一一对应客户端,才想着用服务器来做路由策略的。如果有可行的方案,请指教。
关于客户端:
我知道Shadowsocks使用PAC规则可以在客户端实现分流。V2ray是通过客户端配置路由实现的。
然后网络上对于小火箭上如何设置V2ray的路由分配方法,几乎查不到。您是否知道小火箭上如何添加路由设置?现在只能全局代理翻回国。
是否直接把routing的代码复制在default.conf里就OK?问题是我现在连最起码的出站tag如何与routing关联都不知道怎么操作。
具体操作如果您懂得的话还请不吝赐教。
此外,我试着在openwrt上的v2ray配置客户端,但是出现的问题是无法正常翻回国内。
两种入站规则都试过,socks监听127.0.0.1:1080,dokomo-door监听0.0.0.0的某一端口。
没有实际效果,网站可以访问但没有走代理的样子,仍然存在IP限制。确认过v2ray的运行状况也正常。
看官网也只写了inbounds和outbounds,没有routing啊。客户端上配置没那么复杂但是没有搞定我感到很疑惑啊。。
还没使用分流呢,连代理都没搞定,呵呵了。哪里的问题还请指教。
备案的解法很简单:
1. Let’s Encrypt 用 DNS 设 TXT 记录的方式手动验证(并且这样可以申请泛域名证书,用 HTTP 的方式不行)
2. 把申请好的证书用在国内服务器的非常用端口上,这时网站仍然能通过浏览器的证书验证显示绿锁,同时无需备案
我现在打算配置国内能通过国外中间服务器翻墙出去,国外能通过国外中间服务器+国内路由器翻回来,没有访问内网设备的需求。大体是按分流反向代理来配置吗,bridge的配置该如何调整(没搞明白….)
并不需要那么复杂啊,只用基础的反代配置就可以了。翻回国内就用基础的反向翻墙代理配置,其中路由器作为bridge,配置outbounds的时候使用freedom且不使用重定向;翻出去的时候就无需使用反代,而是在portal上额外配置一对inbounds/outbounds,并使用路由配置绑定,这样翻回国内和往外翻使用的就是两对不相干的inbounds/outbounds了,向内和向外的协议之类的也都可以单独配置。
赞 按楼主的设置一次成功~
一直在爬墙,现在顺便可以把内网撸出去当临时网站,而且速度还相当不错。
大佬tql~ 刚入门V2Ray, 正好有内网穿透+翻墙的需求, 按你的配置完美达到~
“bridge 会向 portal 主动建立连接” 是不是说不用担心bridge是动态公网ip了?
目前我家里是用一个域名做DDNS绑定家里的动态公网IP,然后一台公网服务器上用nginx直接反代DDNS的那个域名。现在遇到的问题是,如果家里的动态IP变动了,那么服务器上的nginx需要重启下,才能让DDNS的域名指向新的IP。
如果v2ray是从家里主动连接到公网服务器的话,是不是就意味着不用担心动态IP的问题了?
是这样的,v2ray,包括frp这些反向代理应用的作用就是为没有公网ip的服务器提供服务的,基本原理就是让内网中的服务器主动向具有公网ip的服务器建立连接,并通过公网服务器中转流量实现内网服务器的访问。
使用v2ray的优点是配置灵活,可做多用途,当然配置起来也比较麻烦。
如果只是单纯指想用做内网穿透的话frp相对更加简单。
不过既然你已经配置了DDNS,那么说明你是具有公网ip的,那么内网穿透方案可能并不适合你,因为内网穿透主要是针对没有公网ip但却需要公网访问的需求,比如被运营商NAT没有公网ip的宽带。
而且如果你已经配置好了DDNS,那么你完全没有必要再用一台服务器来配置反代,额外增加一台反代服务器中转反而损失了网络性能,通过DDNS的域名你应当可以直接访问家中网络才对。
至于你说的家中动态ip变动需要重启nginx,大概是因为nginx启动的时候只会解析一次域名,不过还是上面的结论,完全没必要再加一个反代服务器了。
v2ray的内网穿透是否是点对点呢? 如果不是,感觉意义也不大。如果我同时运行v2ray和frp是否会有冲突呢?
官方文档已经说的很清楚了,反向代理的流量是由portal转发到bridge的,因此如果你对网络要求比较高,或者是你用来当作portal来中转流量的VPS网络性能不佳的话,包括v2ray在内的所有需要转发流量的内网穿透工具可能的确不是一个特别好的选择。
内网穿透的最终目的是为了从外网访问内网设备或访问无公网ip的设备,我觉得从这点来看是否点对点并不是一个一票否决的问题,如果你对点对点的打洞有特别的执着的话我倒是推荐你使用n2n。
另外同时运行v2ray和frp我没试过,不过理论上只要监听的不是同一个端口……大概……也许没问题吧╮(╯-╰)╭
可以同时使用,没有问题,刚试过。
不得不说,v2ray的骚操作被你钻研透啦,给博主手动点赞👍
谢谢夸奖o(* ̄▽ ̄*)o
我的TG联系不上你,说你是陌生人. 用email可以吗? 博主留个email,有事请教。愿意给学费。
您可能是+86受害者,+86手机号无法向非+86手机号用户发起私聊,请向@Ailitonia_bot发消息来给我留言
我也不是什么大佬,最多交流一下我的个人见解,学费什么的我还真受不起_(:з)∠)_
bridge 与 portal 之间的连接断开后多久会重新连接,有没有地方可以设置?
因为发现在 portal 中重启服务后会使通道断开,想要立即连接的话需要在 bridge 里也重启一下 v2ray。(我没试过等待 bridge,不清楚会不会一段时间后自动重连
虽然官方文档建议先启用bridge,再启用portal,燃鹅只要bridge和portal上的v2ray服务都是正常运行的,那无论哪一方断线后,都会自动重连而无需重启服务,反正我的是这样没问题……如果的确无法自动重连,请先查看一下日志排查一下是否存在网络问题。
我之前是 bridge 通过 cloudflare 和 portal 之间建立通道,portal 中重启 nginx 或者 v2ray 之后不会自动重连(等了1分钟左右)。
然后换成 bridge 和 portal 直接通过 vmess 进行通道连接,在 portal 中重启 v2ray 后几秒内就重新连接了……
有可能是你nginx分流的配置有问题,我不清楚你的nginx是怎么配置的,我在portal上也用了cloudflare,但我反向代理的链接还配置了WebSocket+TLS,我不清楚直接使用nginx分流vmess会不会有什么奇怪的问题……
师傅tql,能求个好友位吗
你想要什么样的好友呀(*/ω\*)
vxOK不,[deleted,请不要公开私人联系方式]
vx就算了吧,想要私聊可以tg联系我,详见“ABOUT”页面