Marzban - продвинутый роутинг
Вступление
Для конфигурации нам необходимо два сервера - один будет в России, а второй за её пределами.
Российский сервер будет точкой входа и проксировать траффик через себя до российских сервисов.
До сервисов вне России сервер будет дополнительно проксировать через сервер вне России.
Домен для сервера в России, например - example.com
, для сервера вне России - exit.example.com
.
Установка Marzban (аналогично для двух серверов)
Нужно создать папки tls
и lib
:
mkdir tls
mkdir lib
Необходимо переместить TLS
ключ и сертификат в папку tls
.
Необходимо создать compose.yaml
:
services:
marzban:
image: gozargah/marzban:latest
container_name: marzban
network_mode: host
restart: always
env_file: .env
volumes:
- ./lib:/var/lib/marzban
- ./tls:/tls
В файл .env
нужно вписать следующее:
UVICORN_HOST = "0.0.0.0"
UVICORN_PORT = 8000
ALLOWED_ORIGINS=https://<fqdn>
SUDO_USERNAME = "admin"
SUDO_PASSWORD = "<password>"
UVICORN_SSL_CERTFILE = "/tls/<fqdn>.crt"
UVICORN_SSL_KEYFILE = "/tls/<fqdn>.key"
DASHBOARD_PATH = "/<secret-uri>/"
XRAY_JSON = "/var/lib/marzban/xray_config.json"
XRAY_SUBSCRIPTION_URL_PREFIX = "https://<fqdn>"
Для полученя xray
ключа и uuid
для lib/xray_config.json
необходимо скачать xray-core.uuid
- ./xray uuid
key
- ./xray x25519
Далее нужно создать файл lib/xray_config.json
(fqdn
у каждого сервера свой):
{
"log": {
"loglevel": "debug"
},
"dns": {
"servers": [
"9.9.9.9",
"149.112.112.112",
"2620:fe::fe",
"2620:fe::9"
],
"queryStrategy": "UseIP",
"tag": "dns_inbound"
},
"routing": {
"rules": [
{
"ip": [
"geoip:private"
],
"outboundTag": "BLOCK",
"type": "field"
},
{
"type": "field",
"outboundTag": "BLOCK",
"protocol": [
"bittorrent"
]
}
]
},
"inbounds": [
{
"tag": "VLESS GRPC REALITY",
"listen": "0.0.0.0",
"port": 8443,
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "xyz"
},
"security": "reality",
"realitySettings": {
"show": false,
"dest": "google.com:443",
"xver": 0,
"serverNames": [
"<fqdn>"
],
"privateKey": "<xray-private-key>",
"SpiderX": "/<uuid>",
"shortIds": [
"<16-hexadecimal-characters>"
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "DIRECT"
},
{
"protocol": "blackhole",
"tag": "BLOCK"
}
]
}
И, наконец, необходимо поднять контейнер:
docker compose up -d
Создание клиентов
Далее необходимо создать пользователей для конечных пользователей на российском сервере
и пользователя на сервере вне России для российского сервера.
Далее приложением v2rayNG
подключаемся на сервер вне России и экспортируйте конфиг -
Экспорт всей конфигурации в буфер обмена
.
Модификация роутинга
Далее только на российском сервере необходимо в xray_config.json
изменить routing
на:
"routing": {
"rules": [
{
"domain": [
"regexp:\\.ru$",
"regexp:\\.\u0440\u0444$"
],
"outboundTag": "RU",
"type": "field"
},
{
"ip": [
"geoip:ru"
],
"outboundTag": "RU",
"type": "field"
},
{
"ip": [
"geoip:private"
],
"outboundTag": "BLOCK",
"type": "field"
},
{
"type": "field",
"outboundTag": "BLOCK",
"protocol": [
"bittorrent"
]
}
]
}
И также только на российском сервере изменить outbounds
на
(вместо <proxy>
необходимо вставить outbound
с тегом proxy
из экспортированного
конфига v2rayNG
и заменить тег proxy
на DIRECT
):
"outbounds": [
<proxy>
{
"protocol": "freedom",
"tag": "RU"
},
{
"protocol": "blackhole",
"tag": "BLOCK"
}
]
Готово, теперь пользователи могут подключаться к серверу в России.