mirror of
https://github.com/fruworg/fruworg.github.io.git
synced 2025-07-12 15:03:57 +03:00
212 lines
6.3 KiB
Markdown
212 lines
6.3 KiB
Markdown
---
|
||
title: Marzban - продвинутый роутинг
|
||
description: VLESS + gRPC + Reality
|
||
date: 2025-07-02T12:48:00+02:00
|
||
tags: [linux, xray]
|
||
---
|
||
|
||
## Вступление
|
||
|
||
Для конфигурации нам необходимо два сервера - один будет в России, а второй за её пределами.\
|
||
Российский сервер будет точкой входа и проксировать траффик через себя до российских сервисов.\
|
||
До сервисов вне России сервер будет дополнительно проксировать через сервер вне России.\
|
||
Домен для сервера в России, например - `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](https://github.com/XTLS/Xray-core/releases/).\
|
||
`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"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
И, наконец, необходимо поднять контейнер.
|
||
|
||
```shell
|
||
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"
|
||
}
|
||
]
|
||
|
||
```
|
||
|
||
Готово, теперь пользователи могут подключаться к серверу в России.
|