Скрипты Lua
Скрипты Lua позволяют гибко расширять Xray, реализовывать собственные функции и взаимодействовать с ядром.
Начало работы
Сначала прочитайте Среда выполнения и загрузка скриптов, чтобы узнать о поддержке Lua, загрузке модулей и правилах поиска файлов скриптов.
Руководства по написанию
Выберите руководство для нужной функции, начните с минимального примера и постепенно создайте собственный скрипт:
| Руководство | Назначение | Содержание |
|---|---|---|
| Скрипты маршрутизации | Собственные правила маршрутизации | Выбор исходящего подключения, балансировка нагрузки и маршрутизация по IP после явного разрешения домена |
| Скрипты DNS | Собственная обработка DNS-запросов | Выбор вышестоящего сервера, резервные запросы и фильтрация результатов |
Текущие скрипты маршрутизации и DNS используют экземпляры из пула. При написании скриптов учитывайте жизненный цикл пула, чтобы понимать, когда выполняется инициализация верхнего уровня и как сохраняется состояние.
Справочник
Hook
Hook — это функция Lua, которую ядро вызывает в определённый момент. Точка входа скрипта определяет доступные Hook и соглашения об их вызове; одной точке входа могут соответствовать несколько Hook. Какие именно Hook нужно реализовать, указано в описании соответствующей точки входа.
Сейчас поддерживаются следующие точки входа и Hook. Параметры, возвращаемые значения и поведение при ошибках описаны на справочных страницах каждого Hook:
| Точка входа скрипта | Hook |
|---|---|
routing.script | HandleRoute |
dns.script | HandleDNSQuery |
Типы данных
Помимо встроенных типов Lua, Xray Lua использует net.IP, срезы Go и error. Их представление и способы работы с ними в Lua описаны в разделе Типы данных.
API модулей
Выберите API модуля по назначению:
| Модуль | Назначение |
|---|---|
| xray.router | Маршрутизация по правилам |
| xray.dns | Разрешение доменных имён |
| xray.geodata | Сопоставление и фильтрация доменов и IP |
| xray.log | Запись журналов |