Как стать автором
Обновить

XRay (с VLESS/XTLS): проброс портов, реверс-прокси, и псевдо-VPN

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров51K
Всего голосов 69: ↑68 и ↓1+67
Комментарии92

Комментарии 92

ЗакрепленныеЗакреплённые комментарии

Спасибо за статью!
подправил конфиг бриджа, иначе не работает

{
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "reverse.hellohabr.com"
}
]
},
"outbounds": [
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "....",
"port": 5555,
"method": "2022-blake3-aes-128-gcm",
"password": "..."
}
]
},
"tag": "outgoing"
},
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["bridge"],
"domain": ["full:reverse.hellohabr.com"],
"outboundTag": "outgoing"
},
{
"type": "field",
"inboundTag": ["bridge"],
"outboundTag": "direct"
}
]
}
}

НЛО прилетело и опубликовало эту надпись здесь

Кстати, да, спасибо за напоминание. Хотел бы сохранить PDF'ки статей, но вдруг у Хабра есть годное зеркало даже для удалённых статей?

Изменения в пользовательском соглашении и политике конфиденциальности на сервисах Хабра:
https://habr.com/ru/companies/habr/articles/487528/
https://account.habr.com/info/agreement/
https://company.habr.com/ru/

"Если ранее управление сервисом осуществлялось российской компанией ООО «Хабр», то теперь за бразды правления взялась наша головная компания — Habr Blockchain Publishing Ltd, зарегистрированная и действующая в юрисдикции и по законам Республики Кипр и Европейского Союза."

значит можно готовиться, что весь хабр отъедет..

можно в личку ссылку на сайт, где это можно потом почитать, когда начнут вырезать на сайте полезную информацию?)
p.s. Или тут, потом будет, в зависимости от региона IP-адреса как на joyreactor плашка вылезать "Контент на территории РФ запрещен"?))

НЛО прилетело и опубликовало эту надпись здесь

Это не поможет, если госорган попросит удалить статью физически из сервера для всез - либо придёт бан всему домену. Дешевле (до определенного предела) выполнять требования местного царька, если его рыночек приносит хороший доход.

предположим ситуацию, в которой хабр удаляет (именно удаляет, а не блокирует) ваши статьи "про это" - тогда вас где-то еще почитать можно будет? есть какая-то запасная площадка?

НЛО прилетело и опубликовало эту надпись здесь

Подскажите, вы видели, что в Иране vless reality определяется и на данный момент не работает? Легко гуглится по соответствующему запросу. Что думаете по этому поводу?

НЛО прилетело и опубликовало эту надпись здесь

Можно скачать приложение для заметок, по типу Obsidian, и туда копировать эти статьи. А заметки бекапить куда нибудь. Там можно удобно и скрины и блоки кода сохранять.

Вопрос, зачем так усложнять жизнь, если можно использовать тот же netbird, где не нужен внешний сервер или белый ип, только поставь и авторизуй клиентов, а на том же одноплатнике в довесок можно поставить любой VPN сервер и подключаться через канал netbird. Аналоги есть и даже можно на своем сервере netbird подгять. Поясните для чего мучиться с настройкой всего этого?

НЛО прилетело и опубликовало эту надпись здесь

Есть аналоги (OpenGNB, tailscale, zerotier) где другие протоколы и есть вообще без шифрования. Я понял что суть только в супер зашифрованном канале, только и оно до поры до времени.

НЛО прилетело и опубликовало эту надпись здесь

с недетектируемыми протоколами Shadowsocks-2022

Смотрим п.49.
Ой, а что с лицом? Значит, всё таки научились детектить? Или РКН бежит впереди паровоза?
Ой, а что с лицом? Значит, всё таки научились детектить? Или РКН бежит впереди паровоза?

НЛО прилетело и опубликовало эту надпись здесь

А где в таблице основные vpn протоколы для блокирования-то? Openvpn, wireguard, ikev2, gre, l2tp, sstp, pptp? Или их блочить будут по-умолчанию? Или пункт 23 - это про них (но тогда почему только в РФ)?

нет, п. 23 - это название приложения из гугл плея, в предыдущей статье была ссылка

Что-то мне кажется, что п.23 - это как раз все vpn протоколы в ... И именно протоколы, а не сервера, и куда они бегут (внутри периметра или за) будет не важно. Ровно как в мае и августе.

И тем не менее, это не мешает этому словосочетанию быть названием приложения.

P.S. Если это "все протоколы", то зачем остальные пункты списка?

Просьба не путать обычный ShadowSocks и ShadowSocks-2022 — это очень разные протоколы. С SS-2022 можно даже в Китае обходить блокировки, если грамотно это всё дерьмо настроить и уметь бегать быстрее полисменов.

Мой провайдер блокирует все трафик кроме Телеграмм, Инстаграма, Фейсбук, Вотсап, можно ли как то обойти эти ограничении, с помощью этой прокси?

НЛО прилетело и опубликовало эту надпись здесь

это в РФ такой провайдер?

НЛО прилетело и опубликовало эту надпись здесь

Полагаю статью стоит скачать, а то не все сейчас долговечное долговечно

труд конечно тектоникстический, но яра зачеровался в етой всей теме, потому что москируй-не москируй всё равно... они просто дропают неизвестный трафик через границу и всех дел

НЛО прилетело и опубликовало эту надпись здесь

Есть ли разница, что я гоню во vless xtls-rprx-vision? К примеру с просым подключениям к сайтам всё ок, но будут ли палиться идущие внутри wireguard/ssh/??? ?

Будет ли рабочей такая схема подключения: между linux машинами cloak(vless | wg(всё ~локальное)), а на android vless(tls | любые обращения в локалку wg).

Поднять на дроиде и cloak, и vless как я понимаю, будет запарно, тк это нужны два vpn подключения.

Похоже, что "палятся" внутренние соединения :( Вот прямо сейчас бьюсь с "неожиданно" упавшим openvpn соединением (tcp на нестандартный порт). Сразу после начала handshake такому соединению стал приходить reset.

Поднял, по наставлениям уважаемого @Deleted-user xray на обоих концах (с "flow": "xtls-rprx-vision"). Проверил. Как обычная socks прокся для браузера работает замечательно. Но при попытке заправить туда соединение от openvpn (с помощью параметра socks-proxy) получаю "те же яйца, вид в профиль" - reset на handshake. Насколько я понял то, что написано в https://habr.com/ru/articles/731608 - шифрованные соединения заново не шифруются, значит openvpn трафик идёт as is, а значит, DPI может его распознать и порубать чисто по шаблонам.... Что с этим можно сделать пока не понимаю. В конфигах есть параметр encryption, но во всех примерах он стоит в "none", и что туда вообще можно подставить - пока не понятно...

Насколько я понял то, что написано в https://habr.com/ru/articles/731608 - шифрованные соединения заново не шифруются, значит openvpn трафик идёт as is, а значит, DPI может его распознать и порубать чисто по шаблонам

Нет, это не так работает. Второй раз "не шифруются" только сами данные, заголовки (хендшейки) соединений же шифруются всегда. Иначе в прокси не было бы никакого смысла вообще, там SNI бы летали в открытом виде. У вас дело в чем-то явно в другом, то ли параметр socks-proxy не работает как надо с какой-то из сторон (это можно посмотреть по логам XRay, видно ли в них вообще что-нибудь), то ли еще что.

Если грешите на xtls-vision, можете ограничить OpenVPN в конфиге, чтобы оно использовало TLS версии не выше 1.2 (в Vision второй слой шифрования отключается только для TLS 1.3, все остальное шифруется полностью), либо вообще отключите xtls-rprx-vision (уберите пункт flow из конфига) и попробуйте без него.

Спасибо за подсказки, на досуге поэкспериментирую... В XRay логах было как раз то, что я наблюдал воочию - установление соединения и его разрыв. А т.к. цель у меня была практическая, то в итоге я удовлетворился установкой Cloak - с ним всё заработало "как из пушки" (даже udp+tap, хотя везде написано, что это не поддерживается, или поддерживается экспериментально).

А возможно ли на том же XRAY или чёмто ином из современного настроить подключение через обычный socks5 ?

PS: Через Proxifier тот же nekoray/nekobox работает, но вот как бы обойтись без этого костыля ?

НЛО прилетело и опубликовало эту надпись здесь

Я про случай когда nekobox как клиент стороннего удаленного ss сервера.

но вот что-то не пойму (я только разбираюсь с этим софтом) как построить цепочку, или как задать профиль с socks5 сервером как outbound для всех других профилей (чтоб можно было быстро переключать)

PS: когда nekobox подключается к ss через промежуточный socks5

НЛО прилетело и опубликовало эту надпись здесь

Бгагодарю, с цепочкой все получилось. Понятно и логично.

Но я надеялся что существует иной вариант настройки. Задать некое правило (роутинг, outbound, или как оно еще может называться) чтобы весь выходной трафик клиента Nekobox к серверу ss/vless/etc выпускать через постоянный socks5 адрес.

При этом профили (Active Server) с SS подключениями иметь возможность переключать через интерфейс Nekobox что называется одним кликом. А не править цепочки через меню редактирования....

PS: если тут нельзя, может знаете альтернативу Nekoray/Nekobox с таким функционалом ?

Спасибо за статью!
подправил конфиг бриджа, иначе не работает

{
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "reverse.hellohabr.com"
}
]
},
"outbounds": [
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "....",
"port": 5555,
"method": "2022-blake3-aes-128-gcm",
"password": "..."
}
]
},
"tag": "outgoing"
},
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["bridge"],
"domain": ["full:reverse.hellohabr.com"],
"outboundTag": "outgoing"
},
{
"type": "field",
"inboundTag": ["bridge"],
"outboundTag": "direct"
}
]
}
}

НЛО прилетело и опубликовало эту надпись здесь

а как проверить, что север и сервис замаскировался корректно?

попробовать без vpn зайти на ip_адрес_сервера:443 и должен открыться условный сайт майкрософта?
если http://xx.xxx.xxx.xxx:443 то браузер пишет что соединение сброшено
если https://xx.xxx.xxx.xxx:443 то браузер ругается на сертификат и при нажатии продолжить открывается какая то заглушка с картинкой "not found"

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за цикл статей. Но вот немного не могу понять одного. Везде вроде пишут что VMESS используют шифрование, но в то же время это не впн а прокси.
Когда там используется шифрование?
Если на телефоне поднимаем такого соединение, провайдер видит что там летает или нет? Это же не впн туннель.

НЛО прилетело и опубликовало эту надпись здесь

Случилась странная проблема после настройки

Настроил Vless-Reality через 3x-ui, все заработало, начал тестировать скорость, и на сервере на интерфейсе eth0 увидел скорость 950мбит/с (Но на клиенте 100 мбит максимум по тарифу), и параллельно xray выжрал всю RAM.

В чем может быть проблема ?

НЛО прилетело и опубликовало эту надпись здесь

Нет, только xtls с reality, либо с TLS, запамятовал как точно оно называется, со своим сертификатом. Vless На 443 порту, для теста запускал еще на 8443, ибо 443 был занят, ситуация аналогичная была

Скриншот

НЛО прилетело и опубликовало эту надпись здесь

На 443 порту в одном случае висел openconnect, но я его не отключал, проверял просто на 8443 порту. На другом сервере поставил на 443 и встретил то, что на скриншоте выше.

И еще ради интереса взял чистый vds, и установил туда подчистую, тоже на 443 порт. RAM на чистом сервере не выжирал, но перегрузка на сетевом интерфейсе все ровно была, только не такая высокая, порядка 400 мбит/с.

Оффтоп:outline ведет себя также, странные аномальные перегрузки на интерфейсе, только оперативную память не жрет, зато сжирает почти 5 гбит/с траффика, и только на выход. Он вроде как раз на Shadowsocks

НЛО прилетело и опубликовало эту надпись здесь

Да, только что купленный, с дебианом 12м на борту. Хостер тот же, hetzner в моем случае

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Но ведь такое происходит только при проверке скорости, в условном спидтесте. Но кстати, в копилку к вашей версии, иногда я замечаю скачки на eth0 до каких то аномальных значений. Но это происходит редко. Обычно такое твориться только при тесте скорости.

Заметил еще перегрузки на интерфейсе зависят от параметров net.ipv4.tcp_rmem и net.ipv4.tcp_wmem. Больше от первого, чем от второго. На системных настройках, без моих правок, сеть грузится на 300/400 мбит/с, на моих под гигабит

На графике скачки это как раз замеры скорости, а скачут они от редактирования переменных, которые выше

График

НЛО прилетело и опубликовало эту надпись здесь

На первых двух, которые куплены давно, одинаковое ядро 6.4.10, один из них дубль первого сервера, поэтому фактически системы там идентичны. Ядро сам собирал

А вот ядро нового сервера не запомнил, вероятно было 6.1.0-13-amd6, не помню точно

В dmesg видел out of memory, больше ничего криминального

Спасибо, уважаемый автор за ваши труды!
Могли бы Вы сделать пошаговую инструкцию по настройке реверс-прокси, не совсем понятно как это сделать, если есть vps с 3x-ui и одноплатник на armbian в локалке.

НЛО прилетело и опубликовало эту надпись здесь
  1. Создал клиента на vps в 3x-ui

  2. Установил xRay на bridge
    bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

  3. Прописал конфиг на bridge

{
"reverse": {
"bridges": [
{
"tag": "bridge",
"domain": "reverse.hellohabr.com"
}
]
},
"outbounds": [
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "xxx.xxx.xxx.xxx",
"port": 34862,
"method": "2022-blake3-aes-256-gcm",
"password": "BTbEg8DduZthSx/nZx7nEyZjTjIuxw1bhV0VrL0/s98="
}
]
},
"tag": "outgoing"
},
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["bridge"],
"domain": ["full:reverse.hellohabr.com"],
"outboundTag": "outgoing"
},
{
"type": "field",
"inboundTag": ["bridge"],
"outboundTag": "direct"
}
]
}
}

При запуске xRay на bridge выдает ошибку

root@armbian:~# journalctl -u xray
Journal file /var/log/journal/84152d3d1a5b70e8a8566df06569a60c/system.journal is truncated, ignoring file.
Dec 07 12:30:12 armbian systemd[1]: [🡕] /etc/systemd/system/xray.service:7: Special user nobody configured, this is not>
Dec 07 12:30:12 armbian systemd[1]: Started xray.service - Xray Service.
Dec 07 12:30:12 armbian xray[6688]: Xray 1.8.4 (Xray, Penetrates Everything.) Custom (go1.21.0 linux/arm64)
Dec 07 12:30:12 armbian xray[6688]: A unified platform for anti-censorship.
Dec 07 12:30:12 armbian xray[6688]: 2023/12/07 12:30:12 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/c>
Dec 07 12:30:12 armbian xray[6688]: 2023/12/07 12:30:12 [Warning] core: Xray 1.8.4 started
Dec 07 12:30:13 armbian systemd[1]: [🡕] /etc/systemd/system/xray.service:7: Special user nobody configured, this is not>
Dec 07 15:29:47 armbian systemd[1]: Stopping xray.service - Xray Service...
Dec 07 15:29:47 armbian systemd[1]: xray.service: Deactivated successfully.
Dec 07 15:29:47 armbian systemd[1]: Stopped xray.service - Xray Service.
Dec 07 15:29:47 armbian systemd[1]: xray.service: Consumed 3.841s CPU time.
Dec 07 15:29:47 armbian systemd[1]: Started xray.service - Xray Service.
Dec 07 15:29:47 armbian xray[8313]: Xray 1.8.4 (Xray, Penetrates Everything.) Custom (go1.21.0 linux/arm64)
Dec 07 15:29:47 armbian xray[8313]: A unified platform for anti-censorship.
Dec 07 15:29:47 armbian xray[8313]: 2023/12/07 15:29:47 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/c>
Dec 07 15:29:47 armbian xray[8313]: Failed to start: main: failed to load config files: [/usr/local/etc/xray/config.jso>
Dec 07 15:29:47 armbian systemd[1]: xray.service: Main process exited, code=exited, status=23/n/a
Dec 07 15:29:47 armbian systemd[1]: xray.service: Failed with result 'exit-code'.
Dec 07 15:37:30 armbian systemd[1]: Started xray.service - Xray Service.
Dec 07 15:37:30 armbian xray[8360]: Xray 1.8.4 (Xray, Penetrates Everything.) Custom (go1.21.0 linux/arm64)
Dec 07 15:37:30 armbian xray[8360]: A unified platform for anti-censorship.
Dec 07 15:37:30 armbian xray[8360]: 2023/12/07 15:37:30 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/c>
Dec 07 15:37:30 armbian xray[8360]: 2023/12/07 15:37:30 [Warning] core: Xray 1.8.4 started

НЛО прилетело и опубликовало эту надпись здесь

Не могу победить Kitty, не переносит выводимый текст на другую строчку, поэтому всё не копируется :(

/conf/serial: failed to read config file at line 16 char 19 > invalid character '.' after object key:value pair

Ругается на точку в IP адресе, я так понял

НЛО прилетело и опубликовало эту надпись здесь

прогнал через валидатор, все в нормально, но ошибка та же!

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Так, ладно, конфиг буду переписывать, хотя скопипастил отсюда :)
А как настроить 3x-ui, куда вставлять настройки сервера ("portal")?

Или на vps лучше поставить голый xray без оболочки?

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за ответы, буду пытаться настроить :)

Какой-то абсурд, удалил все из конфига, оставил {}, а все равно xray не стартует. Путь к конфигу проверил /usr/local/etc/xray/config.json.

На всякий случай еще раз скрипт запустил:
bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/046d9aa2432b3a6241d73c3684ef4e512974b594/install-release.sh)" @ install --version 1.8.6

Ошибка та же:

failed to read config file at line 16 char 19 > invalid character '.' after object key:value pair

НЛО прилетело и опубликовало эту надпись здесь

эта команда помогла, конфиг подхватился.
systemctl daemon-reload

По статье все настроил, работает отлично, доступ в локалку есть!
Подскажите, как на portal настроить rules, чтобы на bridge пускать только определенные IP и домены, а все остальное чтобы шло через portal в глобал?

НЛО прилетело и опубликовало эту надпись здесь

Посмотрите, что может быть не так с конфигом, bridge похоже не подключается к portal.
И еще вопрос, как посмотреть логи xray?

{
    "reverse": {
        "bridges": [
            {
                "tag": "bridge",
                "domain": "reverse.hellohabr.com"
            }
        ]
    },
    "outbounds": [
        {
            "type": "vless",
            "server": "000.000.000.000",
            "server_port": 443,
            "uuid": "09346f9c-ad02-4f8c-8b8e-bc7a3b92cc50",
            "flow": "xtls-rprx-vision",
            "tls": {
                "enabled": true,
                "server_name": "www.microsoft.com",
                "utls": {
                    "enabled": true,
                    "fingerprint": "chrome"
                },
                "reality": {
                    "enabled": true,
                    "public_key": "Z9hU9PU0OLdn1YOUSWsH2B_g8mbm0ZuPH_NHl7VC7SE",
                    "short_id": "7e1b81daf28055e1"
                }
            },
            "packet_encoding": "",
"tag": "outgoing"
        },

        {
            "protocol": "freedom",
            "tag": "direct"
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        }
    ],
    "routing": {
        "rules": [
            {
                "type": "field",
                "inboundTag": [
                    "bridge"
                ],
                "domain": [
                    "full:reverse.hellohabr.com"
                ],
                "outboundTag": "outgoing"
            },
            {
                "type": "field",
                "inboundTag": [
                    "bridge"
                ],
                "outboundTag": "direct"
            }
        ]
    }
}

НЛО прилетело и опубликовало эту надпись здесь

Я запускал на SS-2022 а сейчас на VLESS не работает.
Я про эти логи, как их посмотреть?
xray[1856216]: 11.11.11.11:10457 accepted 22.22.22.22:443 [incoming -> portal]
xray[1856216]: proxy/shadowsocks_2022: tunnelling request to tcp:reverse.hellohabr.com:0
xray[1856216]: app/dispatcher: taking detour [portal] for [tcp:reverse.hellohabr.com:0]
xray[1856216]: common/mux: dispatching request to udp:reverse.internal.v2fly.org:0
xray[1856216]: [33.33.33.33]:63786 accepted reverse.hellohabr.com:0 [incoming -> portal]

НЛО прилетело и опубликовало эту надпись здесь

Спасибо!

при загрузке конфига такую ошибку выдает:

Failed to start: main: failed to load config files: [/usr/local/etc/xray/config.json] > infra/conf: failed to parse to outbound detour config. > infra/conf: unknown config id:

xray.service: Main process exited, code=exited, status=23/n/a

НЛО прилетело и опубликовало эту надпись здесь

Взял из sing-box, который на телефоне стоит, видимо что-то не то сделал :)

НЛО прилетело и опубликовало эту надпись здесь

Понял, буду разбираться! :)

Спасибо! VLESS настроил доступ к локальной сети бриджа, в глобал через бридж не могу выйти!
Как настроить правила на портале, чтобы весь трафик шел в глобал через портал, а на определенные IP и домены через бридж?

вот такая ошибка в логах, проблема в DNS?


[Info] app/proxyman/outbound: failed to process outbound traffic > proxy/freedom: failed to open connection to tcp:8.8.8.8:443 > common/retry: [dial tcp 8.8.8.8:443: i/o timeout dial tcp 8.8.8.8:443: connect: no route to host dial tcp 8.8.8.8:443: i/o timeout] > common/retry: all retry attempts failed

Пробую правила на портале прописать, чтобы 2ip.ru шел через бридж. Не работаю, что делаю не так?

"routing": {
"rules": [
{
"type": "field",
"domain": ["2ip.ru"],
"outboundTag": "portal"
}
]
}

Похоже я тут сам с собой разговариваю и надоел :))), но спросить больше негде!
Я все настроил, через VLESS от клиента через портал на бридж ходит трафик, глобал и локалка доступна через бридж.
Начал разбираться с роутингом, хочу сделать так, чтобы только определенные домены и ip адреса шли через бридж, все остальное шло через портал в глобал.
Например, хочу чтобы 192.168.5.1 шел в бридж, в конфиге портала прописываю:

"routing": {
        "rules": [
            {
                "type": "field",
                "inboundTag": [
                    "incoming"
                ],
                "ip":"192.168.5.1",
                "outboundTag": "portal"
            }
        ]
    }

Но доступа к 192.168.5.1 на клиенте не получаю. В логах бриджа пусто, в логах портала следующее:

IP:13262 accepted tcp:192.168.5.1:80 [incoming -> portal] email: ***

Подскажите, что делаю не так?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории