Маршрутизация IP пакетов на транспортном уровне L4 OSI или проброс портов по доменному имени на вебсервере Caddy
Раздел(ы): GNU Linux - CentOS / Debian, Вебмастеру, Маршрутизаторы программные
Просмотры: 39
Комментарии: 0
В этой статье я приведу рабочий, проверенный вариант файла конфигурации Caddyfile для маршрутизации IP пакетов на 4 уровне модели OSI. Что позволит использовать один порт на сервере для нескольких служб (сервисов).
Потребность может возникнуть если у вас есть веб-сервер с сайтами на базе Caddy у которого во внешний мир открыты только 80-й и 443-й порты, а вам необходимо кроме сайтов получить доступ, например к SSH консоли сервера, но менять сам Caddy вы не намерены.
Чтобы реализовать задуманное можно перенаправлять входящие пакеты на основе доменных имен. То есть для необходимого вам сервиса (службы) нужно настроить доменное имя и указать в качестве А записи IP адрес вашего сервера.
Предварительно вам необходимо установить версию Caddy с поддержкой Layer4, например по этой инструкции — Установка бинарного файла Caddy с поддержкой Layer 4 в операционной системе Debian.
Начальные условия
У вас есть сервер на котором работает хостинг сайтов на основе веб сервера Caddy.
Caddy обрабатывает запросы на 80-м и 443-м портах.
У вас есть некая служба запущенная на этом же сервере и использующая порт 8443.
Файл конфигурации Caddyfile
Следующий файл конфигурации Caddy организует перенаправление входящих пакетов на основе доменного имени и одновременно обеспечивает работу сайтов на сервере.
{ layer4 { 999.888.999.777:443 { @service1 tls sni oc.mysite.ru route @service1 { proxy 127.0.0.1:8443 } route { proxy 127.0.0.1:443 } } } } mysite.ru { reverse_proxy 192.168.24.11 } www.mysite.ru { redir https://mysite.ru{uri} permanent } uptime.mysite.ru { reverse_proxy 192.168.24.10:3001 } test.mysite.ru { reverse_proxy 127.0.0.1:6081 } static.mysite.ru { root * /var/www/static.mysite.ru file_server }
Важные замечания:
999.888.999.777:443 — это адрес и порт внешнего интерфейса вашего сервера. При поступление IP пакетов на него и совпадении доменного имени со значением oc.mysite.ru данные будут перенаправлены на 127.0.0.1:8443. Таких условий может быть несколько.
Все остальные пакеты (в которых нет упоминания доменного имени oc.mysite.ru) будут отправлены на локальный адрес вебсервера Caddy. Не смотря на совпадение номеров портов никакого зацикливания не будет, так как использованы разные IP адреса.
Если пакеты придут на 80 порт, то верхняя часть конфигурации (Layer4) не работает и запросы упадут на веб сервер Caddy для обработки HTTP запросов.
Постскриптум
Приведенная конфигурация позволяет на одном сервере использовать один порт одновременно как для веб-сервера, так и для других приложений и сервисов (служб).
Для реализации задуманного у вас должна быть возможность управлять ресурсными записями вашего доменного имени, которое вы будете использовать у себя на сервере.
Статья не описывает всех возможностей конфигурации веб-сервера Caddy.
Возможно, что Caddy не лучшее решение для проброса портов на основе доменного имени ведь есть HAProxy и NGINX.