low energy blog

Проброс сервиса в интернет из сети без белого IP адреса

Apr 03, 2024

Иногда требуется проборосить http-сервис, котроый выполняется в локальной сети без белого IP адреса, на внешний сервер. Можно городить VPN, а можно использовать Yggdrasil.

Yggdrasil — это новая экспериментальная компактная схема маршрутизации, разработанная для ячеистых сетей. Так написано на их сайте. Для нас важна пара фич, которые поставляются из коробки, а именно: e2e шифрование и адаптивная маршрутизация.

Какую схему можем применить:

  1. Устанавливаем yggdrasil на внешнем сервере, подключаем его к паре ближайших публичных узлов;
  2. Устанавливаем yggdrasil на сервисе внутри локальной сети и, также, подключем его к ближайшим публичным узлам;
  3. Убеждаемся, что маршрутизация между нашими серверами есть (можно просто попинговать адреса, которые отображаются командой yggdrasilctl getSelf);
  4. Сервис во внутренней сети настраиваем, что он слушал ещё и yggdrasil-адрес;
  5. А на внешнем сервере просто используем nginx и включаем реверс-прокси вида:
    location / {
     proxy_pass http://[IP-Yggdrasil];
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
    }
    
  6. Всё.

Время отклика будет немного выше, чем если бы мы соединялись напрямую из локальной сети к серверу, но, используя Игдрасиль, мы улучшаем доступность сервиса, если какой-то VPN протокол начнут блокировать провайдеры. К тому же, нельзя будет отследить соединение из локальной сети к нашему внешнему серверу.

Добавлять несколько публичных пиров тоже рекомендую, потому что пиры, порой, отключаются или работают нестабильно. Двух-трёх будет достаточно.