mirror of
https://github.com/XTLS/Xray-examples.git
synced 2024-11-08 18:13:13 +00:00
add reverse proxy examples
fix address add reverse proxy examples
This commit is contained in:
parent
2c15ebd323
commit
7d3abd2153
21
ReverseProxy/README.md
Normal file
21
ReverseProxy/README.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# 反向代理
|
||||
# 原理
|
||||
Xray Client <--- VMESS/SS ---> Xray Protal(需要公网 IP) <--- VMESS/SS ---> Xray Bridge
|
||||
# 说明
|
||||
配置中,内网设备使用的配置为 `bridge.json`,有公网 ip 的设备使用 `protal.json`,通过`protal`连接到内网的设备使用`client.json`。
|
||||
|
||||
实际应用中,可以使用`VMESS-TCP、Shadowsocks-2022`等作为Xray Client 到 Xray Protal、Xray Bridge 到 Xray Protal 的传输协议。
|
||||
|
||||
## psk
|
||||
|
||||
Shadowsocks 2022 使用与 WireGuard 类似的预共享密钥作为密码。
|
||||
|
||||
使用 `openssl rand -base64 <长度>` 以生成与 shadowsocks-rust 兼容的密钥,长度取决于所使用的加密方法。
|
||||
|
||||
| 加密方法 | 密钥长度 |
|
||||
|-------------------------------|-----:|
|
||||
| 2022-blake3-aes-128-gcm | 16 |
|
||||
| 2022-blake3-aes-256-gcm | 32 |
|
||||
| 2022-blake3-chacha20-poly1305 | 32 |
|
||||
|
||||
在 Go 实现中,32 位密钥始终工作。
|
58
ReverseProxy/Shadowsocks-2022/bridge.json
Normal file
58
ReverseProxy/Shadowsocks-2022/bridge.json
Normal file
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"reverse": {
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "reverse.proxy"
|
||||
}
|
||||
]
|
||||
},
|
||||
"outbounds": [
|
||||
{
|
||||
"tag": "interconn",
|
||||
"protocol": "shadowsocks",
|
||||
"settings": {
|
||||
"servers": [
|
||||
{
|
||||
"address": "{{ protal.address }}",
|
||||
"port": 65510,
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "{{ psk interconn }}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"settings": {},
|
||||
"tag": "out"
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"domain": [
|
||||
"full:reverse.proxy"
|
||||
],
|
||||
"outboundTag": "interconn"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"outboundTag": "out"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
49
ReverseProxy/Shadowsocks-2022/client.json
Normal file
49
ReverseProxy/Shadowsocks-2022/client.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"routing": {
|
||||
"domainStrategy": "IPIfNonMatch",
|
||||
"domainMatcher": "mph",
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"port": "0-65535",
|
||||
"outboundTag": "proxy",
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": "2080",
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"auth": "noauth",
|
||||
"udp": true,
|
||||
"ip": "127.0.0.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": "2081",
|
||||
"protocol": "http"
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"protocol": "shadowsocks",
|
||||
"settings": {
|
||||
"servers": [
|
||||
{
|
||||
"address": "{{ protal.address }}",
|
||||
"port": 65511,
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "{{ psk external }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
54
ReverseProxy/Shadowsocks-2022/protal.json
Normal file
54
ReverseProxy/Shadowsocks-2022/protal.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"reverse": {
|
||||
"portals": [
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "reverse.proxy"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"tag": "external",
|
||||
"port": 65511,
|
||||
"protocol": "shadowsocks",
|
||||
"settings": {
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "{{ psk external }}",
|
||||
"network": "tcp,udp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag": "interconn",
|
||||
"port": 65510,
|
||||
"protocol": "shadowsocks",
|
||||
"settings": {
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "{{ psk interconn }}",
|
||||
"network": "tcp,udp"
|
||||
}
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"external"
|
||||
],
|
||||
"outboundTag": "portal"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"interconn"
|
||||
],
|
||||
"domain": [],
|
||||
"outboundTag": "portal"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
61
ReverseProxy/Vmess-TCP/bridge.json
Normal file
61
ReverseProxy/Vmess-TCP/bridge.json
Normal file
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"reverse": {
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "reverse.proxy"
|
||||
}
|
||||
]
|
||||
},
|
||||
"outbounds": [
|
||||
{
|
||||
"tag": "interconn",
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "{{ protal.address }}",
|
||||
"port": 65510,
|
||||
"users": [
|
||||
{
|
||||
"id": "{{ uuid }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"settings": {},
|
||||
"tag": "out"
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"domain": [
|
||||
"full:reverse.proxy"
|
||||
],
|
||||
"outboundTag": "interconn"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"outboundTag": "out"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
60
ReverseProxy/Vmess-TCP/client.json
Normal file
60
ReverseProxy/Vmess-TCP/client.json
Normal file
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"routing": {
|
||||
"domainStrategy": "IPIfNonMatch",
|
||||
"domainMatcher": "mph",
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"port": "0-65535",
|
||||
"outboundTag": "proxy",
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": "2080",
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"auth": "noauth",
|
||||
"udp": true,
|
||||
"ip": "127.0.0.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": "2081",
|
||||
"protocol": "http"
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "{{ protal.address }}",
|
||||
"port": 65511,
|
||||
"users": [
|
||||
{
|
||||
"id": "{{ uuid }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
},
|
||||
"tag": "proxy"
|
||||
},
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"tag": "direct"
|
||||
}
|
||||
]
|
||||
}
|
64
ReverseProxy/Vmess-TCP/protal.json
Normal file
64
ReverseProxy/Vmess-TCP/protal.json
Normal file
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"reverse": {
|
||||
"portals": [
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "reverse.proxy"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"tag": "external",
|
||||
"port": 65511,
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "{{ uuid }}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag": "interconn",
|
||||
"port": 65510,
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "{{ uuid }}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
}
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"external"
|
||||
],
|
||||
"outboundTag": "portal"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"interconn"
|
||||
],
|
||||
"domain": [],
|
||||
"outboundTag": "portal"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue