Есть ли способ перенаправить трафик на другой порт в случае, если служба, прослушивающая исходный порт, не отвечает?

267
Shigbeard_

Это довольно специфический вопрос, но я не смог найти ответ на него. Я использую набор служб в контейнере LXC в Ubuntu 16.04 LTS, в частности игровые серверы. Однако известно, что этот сервис не работает, как и его оболочка. Поэтому, чтобы поддерживать время безотказной работы и баланс нагрузки, когда сервисы зависают или не отвечают, мне нужно иметь возможность перенаправлять трафик UDP и TCP в зависимости от того, реагирует сервис или сервисы или нет.

Чтобы лучше объяснить сценарий, у меня есть контейнер LXC, открытый общедоступному IP, с другим контейнером LXC, вложенным с iptables, перенаправляющим трафик через порт 21025 во вложенный контейнер. Внутри этого контейнера, если сервисы, которые принимают трафик (называемый ServiceWrapperи ServiceMain), не отвечают, трафик должен идти к другому сервису на другом порту, который мы будем вызывать ServiceFallback. В противном случае трафик отправляется в соответствии с ожиданиями ServiceWrapper, который затем отправляет трафик ServiceMain.

Моя текущая попытка реализовать этот вид маршрутизации было использовать HAProxy для LoadBalance между ServiceWrapperи ServiceFallback, тем не менее, на первый взгляд кажется, HAProxy не обнаруживает или разрешить перенаправление дополнительных портов на основе того, как она балансировочных ServiceWrapperи ServiceFallback. Видите ли, ServiceMainпринимает трафик UDP на другой порт для облегчения запросов сервера, таких как версия, имя хоста и т. Д. И т. Д. Насколько я могу судить, HAProxy не будет маршрутизировать или обнаруживать трафик UDP.

Я в отчаянии, чтобы заставить это работать. Я знаю, что это возможно, потому что точная настройка, которую я пытаюсь выполнить, сработала для одного из моих прямых конкурентов, однако они, похоже, неохотно делятся со мной даже пакетами, которые они использовали для этого (разумно, но да).

1
Я чувствую, что тебе нужен NGINX Garr Godfrey 6 лет назад 0

1 ответ на вопрос

0
Garr Godfrey

NGINX должен делать все, что вам нужно. Он поддерживает маршрутизацию UDP и имеет как пассивные, так и активные проверки работоспособности, так что вы можете настроить способ определения, работает ли основная служба или нет. Его можно настроить так, чтобы он возвращался к службе резервного копирования только в случае сбоя проверки работоспособности.

Перезаписывает ли NGINX исходный IP-адрес? И если да, то отправляет ли он трафик туда, откуда он исходил, когда получает ответ? Это была еще одна проблема, с которой я столкнулся позже при использовании HAproxy: пакеты, поступающие в ServiceWrapper, будут считываться как поступающие с внутреннего IP-адреса, из-за которого HAproxy заканчивается, а не фактического исходного IP-адреса. Shigbeard_ 6 лет назад 0
Как правило, да, он будет выглядеть как внутренний IP-адрес, но будет перенаправлен обратно клиенту. Однако я не использовал UDP-прокси, так как кажется, что он должен иметь исходный IP-адрес. Для http трафика он поместил бы оригинал в заголовок. Garr Godfrey 6 лет назад 0