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