LINUX.ORG.RU
ФорумAdmin

Прошу помощи с настройкой XTLS xray сервера.

 , ,


0

1

Всем привет! Уже который день пытаюсь настроить связку xray c xtls + nginx proxy сервер за основу взят данный проект GitHub. Да, я знаю, что в данном проекте существует возможность автоматической установки скриптом(с этим кстати тоже есть свои проблемы). Но скриптам я не доверяю, т.к. ничего в них не понимаю. Удалось установить и запустить сервер под root всё работает но это не есть good). Для настройки взята за основу статья на habr (В ней как раз описан способ запуска из поз root пользователя). И да я знаю, что есть куча проектов с автоматическими установками и web панелями, но как по мне то лишняя нагрузка на сервер + возможные уязвимости. И так, OS - чистая, не испорченная раним творчеством Ubuntu 20.04 Server. Делаю следующее:

Создаёт нового пользователя «xrayuser» без домашнего каталога и доступа к оболочке (bash).
# sudo adduser --shell /usr/sbin/nologin --no-create-home xrayuser

Загружаем архив с программой на сервер.
# wget https://github.com/XTLS/Xray-core/releases/download/v1.8.0/Xray-linux-64.zip

Создание каталога программы распаковка и добавление прав на запуск xray - файла.
# mkdir /opt/xray
# unzip ./Xray-linux-64.zip -d /opt/xray
# chmod +x /opt/xray/xray

Это позволит процессу открывать сокеты на привилегированных портах в частности (443) без необходимости запуска всего процесса от имени (root).
# setcap cap_net_bind_service=+ep /opt/xray/xray

Создаёт systemd юнит со следующим содержимым:
# nano /etc/systemd/system/xray.service

[Unit]
Description=Xray Service
After=network.target
                                  
[Service]
ExecStart=/opt/xray/xray run -c /opt/xray/config.json
Restart=on-failure
RestartSec=30
User=xrayuser
Type=simple
                     
[Install]
WantedBy=multi-user.target


Делаю всё так, как описано выше, но процесс не существует через systemctl status не отображается. Хотя делаю всё так же через root пользователя(за небольшими исключениями), и всё работает. Что я делаю не так?

скриптам я не доверяю, т.к. ничего в них не понимаю

а васянам с лора доверяешь? ща насоветуют - ты ж всё равно проверить не сможешь - «т.к. ничего в них не понимаю». окееей

aol ★★★★★
()
Ответ на: комментарий от Dimez

Да, не указал, потому, что перезагружаю сервер, после всяких манипуляций так надёжнее. Ещё есть предположение, что с правами, что то не так. В директории xray лежат 4 файла

  1. xray - тип у него (ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped),
  2. config.json тип (json: ASCII text),
  3. geoip.dat - тип data,
  4. geosite.dat тип тоже data. У рута на них все права есть read write и exec. А у нового пользователя только exec.

Может нужно дать права на всю директорию новому пользователю или сменить владельца? Да, и конфиг сконфигурирован верно, под рутом запускаю с ним, и всё работает как нужно.

agragregra
() автор топика
Ответ на: комментарий от BOOBLIK

Еще советую подправить свой systemd-юнит на вот это:

[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target

[Service]
User=xrayuser
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/opt/xray/xray run -c /opt/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000

[Install]
WantedBy=multi-user.target
BOOBLIK ★★★
()
Ответ на: комментарий от BOOBLIK

Разобрался, дело было действительно в правах, нужно было сделать так:
chown xrayuser:xrayuser /opt/xray/config.json,
теперь командой:
sudo -u xrayuser /opt/xray/xray -c /opt/xray/config.json -
программа запускается и работает, так как нужно. Поэтому не вижу смысла, да и лень, затирать и выкладывать конфиг (но если кому интересны все настройки и конфиги, пишите выложу), ибо он верный, но вот при создании юнита и:
sudo systemctl daemon-reload,
sudo systemctl enable xray,
sudo systemctl start xray
терминал висит секунд 10 после последний команды, а команда sudo systemctl status xray.service возвращает следующее:

* xray.service - Xray Service
     Loaded: loaded (/etc/systemd/system/xray.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Mon 2023-08-28 23:10:48 EEST; 4s ago
    Process: 978 ExecStart=/opt/xray/xray -c /opt/xray/config.json (code=exited, status=217/USER)
   Main PID: 978 (code=exited, status=217/USER)

Команда systemctl list-units 'xra*' возвращает следующее:

  UNIT         LOAD   ACTIVE     SUB          DESCRIPTION
  xray.service loaded activating auto-restart Xray Service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Что сейчас может быть не так?

agragregra
() автор топика
Ответ на: комментарий от BOOBLIK

Интересный конфиг! Оно chatGPT описывает его так:

Описание

Этот systemd unit файл описывает службу Xray, которая будет управляться с помощью systemd. Вот разбор его разделов:

[Unit]

  • Description: Это описание службы, которое будет отображаться при использовании команды systemctl. Описывает службу как «Xray Service».
  • Documentation: Здесь указан URL документации для Xray, который можно посетить для получения дополнительной информации.
  • After: Это определяет зависимости службы. В данном случае, служба должна запускаться после network.target и nss-lookup.target, что обычно является стандартными зависимостями для служб, связанных с сетью.

[Service]

  • User: Указывает, от имени какого пользователя будет запущена служба. В данном случае, служба будет запущена от имени пользователя xrayuser.
  • CapabilityBoundingSet и AmbientCapabilities: Эти опции устанавливают наборы системных возможностей (capabilities), которые будут доступны для службы. В данном случае, службе разрешено использовать CAP_NET_ADMIN и CAP_NET_BIND_SERVICE, что позволяет управлять сетевыми настройками и биндить сокеты на привилегированных портах.
  • NoNewPrivileges: Устанавливает значение true, что предотвращает создание новых привилегий для процесса службы.
  • ExecStart: Это команда, которая будет выполнена для запуска службы. Она запускает Xray с указанием конфигурационного файла /opt/xray/config.json.
  • Restart: Указывает, что служба будет автоматически перезапускаться в случае сбоя.
  • RestartPreventExitStatus: Это значение 23 указывает, какие коды выхода будут считаться предотвращающими перезапуск. В данном случае, коды выхода 23 будут предотвращать перезапуск.
  • LimitNPROC и LimitNOFILE: Ограничивают количество процессов (LimitNPROC) и открытых файлов (LimitNOFILE), которые может создать служба. Эти ограничения помогают управлять ресурсами.

[Install]

  • WantedBy: Указывает, что служба желательна для мультипользовательской цели (multi-user.target). Это означает, что служба будет запускаться при входе в многопользовательский режим.

Этот systemd unit файл определяет, как будет управляться служба Xray и какие параметры будут использованы при ее запуске и перезапуске.

То есть получается при данном конфиге команда # setcap cap_net_bind_service=+ep /opt/xray/xray не нужна?

agragregra
() автор топика
Ответ на: комментарий от agragregra

Интересный конфиг!

Честно стырил где-то в репах скрипта, который рекомендуют мейнтейнеры самого xray.

То есть получается при данном конфиге команда # setcap cap_net_bind_service=+ep /opt/xray/xray не нужна?

Верно. CapabilityBoundingSet выставляет capabilities в то значение, что там прописано. Просто для перестраховки или для того, чтобы убрать лишние, высталвенные через setcap ранее.

BOOBLIK ★★★
()
28 марта 2024 г.

Может мне кто-то подсказать что не нравится моему XRay-core? Вот его /usr/local/etc/xray/config.json

{
    "log": {
        "loglevel": "warning"
    },
    "inbounds": [
        {
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "66666666-CCCC-4444-8888-999999999999",
                        "flow": "xtls-rprx-vision",
                        "level": 0,
                        "email": "myname@mydomain.com"
                    }
                ],
                "decryption": "none",
                "fallbacks": [
                    {
                        "dest": 80
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "xtls",
                "xtlsSettings": {
                    "alpn": [
                        "http/1.1"
                    ],
                    "certificates": [
                        {
                            "certificateFile": "/etc/letsencrypt/live/gehxxxx.xxxx.xxx/fullchain.pem",
                            "keyFile": "/etc/letsencrypt/live/gehxxxx.xxxx.xxx/privkey.pem"
                        }
                    ]
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}

Ну а вот, что в статусе:

root@ubuntu:~# systemctl status xray
× xray.service - Xray Service
Loaded: loaded (/etc/systemd/system/xray.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/xray.service.d
└─10-donot_touch_single_conf.conf
Active: failed (Result: exit-code) since Tue 2024-03-26 21:51:04 UTC; 4min 23s ago
Docs: https://github.com/xtls
Main PID: 662 (code=exited, status=23)
CPU: 19ms

Mar 26 21:51:03 ubuntu systemd[1]: Started Xray Service.
Mar 26 21:51:04 ubuntu xray[662]: Xray 1.8.9 (Xray, Penetrates Everything.) 37f8654 (go1.22.1 linux/amd64)
Mar 26 21:51:04 ubuntu xray[662]: A unified platform for anti-censorship.
Mar 26 21:51:04 ubuntu xray[662]: 2024/03/26 21:51:04 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/config.json
Mar 26 21:51:04 ubuntu xray[662]: Failed to start: main: failed to load config files: [/usr/local/etc/xray/config.json] > infra/conf: Please use VLESS flow "xtls-rprx-vision" with TLS or REALITY.
Mar 26 21:51:04 ubuntu systemd[1]: xray.service: Main process exited, code=exited, status=23/n/a
Mar 26 21:51:04 ubuntu systemd[1]: xray.service: Failed with result 'exit-code'.
root@ubuntu:~#

Подскажите плиз, как это исправить?

senglory
()