# Xray-config **Xray-config** - это набор скриптов для автоматизации маршрутизации. ## Зависимости Для работы tproxy необходимо установить соответствующие пакеты: ```sh opkg update && opkg install kmod-nf-tproxy kmod-nft-tproxy git curl ``` Также необходимо установить полную версию dnsmasq: ```sh cd /tmp opkg update opkg download dnsmasq-full opkg remove dnsmasq opkg install ./dnsmasq-full_*.ipk rm ./dnsmasq-full_*.ipk ``` После чего ставим сам xray: ```sh opkg update && opkg install xray-core ``` ## Настройки среды Скрипт */etc/xray/common/check.sh*, который запускается с *startup.sh* и *update.sh* сам подготавливает окружение и создаёт директории: - */var/log/xray* и добавляет в *rc.local* - */etc/dnsmasq.d* и добавляет *option confdir* в *config/dhcp* ## Добавление rsa-ключа в Gitea 1. Подключаемся по ssh к OpenWrt и генерируем rsa-ключ длиной 4096 бит: ```sh mkdir ~/.ssh chmod 600 ~/.ssh ssh-keygen -f ~/.ssh/id_dropbear -t rsa -s 4096 ``` 2. Копируем публичную часть ключа, которую можно посмотреть, выполнив следующую команду: ```sh cat ~/.ssh/id_dropbear.pub ``` 3. В Gitea переходим в *Настрйки -> Ключи SSH / GPG* ([Ключи SSH / GPG](https://gitea.oyacoi.ru/user/settings/keys)) 4. Нажимаем **Добавить ключ** и в *Содержимое* добавляем ранее скопированную публичную часть ключа 5. Сохраняем, после чего можно клонировать репозиторий по SSH (посмотреть ссылку SSH для прокета можно нажав на *Код -> SSH* внутри репозитория) ## Установка - Клонируем проект в */opt*: ```sh mkdir /opt cd /opt git clone gitea@gitea.lan:pyrschtjag/xray-config.git ``` - Удяляем дефолтный конфиг и initd-сервис: ```sh rm /etc/config/xray rm /etc/init.d/xray ``` - Создаём симлинки: * */etc/xray/common* -> */opt/xray-config/etc/xray/common* * */etc/xray/config* -> */opt/xray-config/etc/xray/config* * */etc/xray/main* -> */opt/xray-config/etc/xray/main* * */etc/init.d/xray* -> */opt/xray-config/etc/init.d/xray* * */etc/config/xray* -> */opt/xray-config/etc/config/xray* ```sh ln -s /opt/xray-config/etc/init.d/xray /etc/init.d/xray ln -s /opt/xray-config/etc/config/xray /etc/config/xray ln -s /opt/xray-config/etc/xray/common /etc/xray/common ln -s /opt/xray-config/etc/xray/config /etc/xray/config ln -s /opt/xray-config/etc/xray/main /etc/xray/main ``` - Копируем *outbounds.jsonc-example* в *outbounds.jsonc* в */etc/xray/config*: ```sh cp /etc/xray/config/outbounds.jsonc-example /etc/xray/config/outbounds.jsonc ``` - Указываем свой id в конфиге */etc/xray/config/outbounds.jsonc* * Если используется сервер, **отличный** от vector, тогда пишем **свой** конфиг *outbounds* ## Использование - При первом запуске достаточно запустить обновление списков маршрутов: ```sh sh /etc/xray/main/update.sh ``` - В дальнейшем пользоваться через основной сервис xray: ```sh service xray stop|start|restart ``` ## Описание Скрипт автообновления маршрутов: */etc/xray/main/update.sh* По деофлту для маршрутизации используются списки ip-диапазонов: - [Re:filter](https://github.com/1andrevich/Re-filter-lists/tree/main) - [cdn_ip_ranges](https://github.com/123jjck/cdn-ip-ranges) - [domain-list-community](https://github.com/v2fly/domain-list-community) При запуске xray будет автоматически создана таблица xray с правилами и маршрутами, а также подготовлены сами маршруты. */etc/xray/ipset* - содержит списки для маршрутизации. Пользовательские адреса задаются в файлах: - */etc/xray/ipset/ip_user.lst* - */etc/xray/ipset/domain_user.lst* Для исключений используются файлы: - */etc/xray/ipset/xray_ip_user_whitelist.lst* - */etc/xray/ipset/xray_domain_user_whitelist.lst* Каждая запись в списках (как для доменов, так и для подсетей) **должна начинаться с новый строки**. Синтаксис для *xray_ip_user_whitelist.lst* (и для других списков с подсетями) выглядит следующим образом: - x.x.x.x - x.x.x.x/mask Скрипт автоматически добавляет: - Суффикс *xray_domain_* или *xray_ip_* в зависимости от типа списка - Постфикс *_whitelist* если список находится в *xray_domain_whitelist* или *xray_ip_whitelist* - Расширение *.lst* Если необходимо добавить свои списки доменов или подсетей и разнести их по нескольким файлам, то необходимо придерживаться следующих правил для нейминга файлов: - *xray_ip_user_LISTNAME.lst* - пользовательский спикок url с подсетями для маршрутизации в прокси - *xray_ip_user_LISTNAME_whitelist.lst* - пользовательский белый список url с подсетями для маршрутизации в обход прокси - *xray_domain_user_LISTNAME.lst* - пользовательский спикок url с доменами для маршрутизации в прокси - *xray_domain_user_LISTNAME_whitelist.lst* - пользовательский белый список url с доменами для маршрутизации в обход прокси Каждый запуск обновления **удаляет** предыдущие списки, не относящиеся к *user*. Скрипт автообновления списков можно добавить в cron: ```cron 0 5 * * 0 sh /etc/xray/main/update.sh ``` ## Добавление своих url со списками Чтобы добавить готовый список адресов, достаточно добавить ссылки на raw-файл в следующие массивы: - **xray_ip** - спикок url с подсетями для маршрутизации в прокси - **xray_ip_whitelist** - белый список url с подсетями для маршрутизации в обход прокси - **xray_domain** - спикок url с доменами для маршрутизации в прокси - **xray_domain_whitelist** - белый список url с доменами для маршрутизации в обход прокси Пример */etc/xray/main/update.sh*: ```sh xray_ip=" https://raw.link_ip1.lst https://raw.link_ip2.txt " xray_ip_whitelist="" xray_domain=" https://raw.link_domain1.lst https://raw.link_domain2.txt " xray_domain_whitelist=" https://raw.link_domain3.lst " ``` После чего при запуске *update.sh*, скрипт сам скачает этот файл, распарсит и будет использовать для маршрутизации.