Я работаю в системе, в которой каждому из моих клиентов назначен отдельный Raspberry Pi, и они могут запускать на них все, что хотят (например, Игровой сервер или веб-сервер с пользовательским портом). Как бы я отменил прокси каждый? По этому вопросу я могу использовать NAT. Что это такое и как мне это настроить? Кроме того, я могу использовать его для блокировки определенных портов, например. порт 25, а логи получать и т.д?

1 ответ1

1

Как бы я отменил прокси каждый?

В общем, ты бы не стал.


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

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

  • DNAT (обычно называемый "переадресацией портов") обычно работает на транспортном уровне - он позволяет нескольким устройствам "делиться" IP-адресами, назначая каждому устройству диапазон портов TCP или UDP.

    Например, если у вас есть IP-адрес x.y.z.t , вы можете перенаправить TCP-порт 80 (x.y.z.t:80) на устройство A, порт 81 на устройство B и т.д.

  • Обратное проксирование обычно работает на уровне приложения - оно позволяет нескольким устройствам или службам "совместно использовать" одну комбинацию IP: порт, разделяя запросы на основе некоторого идентификатора, найденного в протоколе.

    Например, если у вас есть обратный прокси-сервер HTTP, работающий на x.y.z.t:80 , вы можете пересылать HTTP-запросы на разные устройства в зависимости от того, какое доменное имя было запрошено.

Преимущество обратного прокси-сервера заключается в том, что прокси-сервер позволяет вам использовать один и тот же порт IP: для нескольких доменов, но он имеет следующие требования:

  1. Прокси-программное обеспечение должно понимать данный протокол; он должен быть специально создан для этого протокола. Это означает, что вы не можете просто произвольно проксировать "все порты" и заставить его работать для любой другой службы, которую будут запускать ваши клиенты.
  2. Протокол должен фактически иметь своего рода идентификатор "хоста" или "домена" в качестве части своих сообщений. Не все протоколы имеют такие идентификаторы; на самом деле большинство не делают.
  3. Прокси переписывает адреса нижнего уровня; Ваши клиенты будут видеть все соединения как исходящие от самого прокси, если только у службы нет методов для решения этой проблемы (например, X-Forwarded-For или так называемый "протокол PROXY").

Таким образом, проксирование для нескольких устройств практически ограничено HTTP и HTTPS (которые имеют заголовок "Host"); плюс услуги на основе TLS (которые имеют SNI и ALPN); плюс может быть DNS и SMTP (в зависимости от адреса получателя); и может быть небезопасный POP3/IMAP/FTP (в зависимости от имени пользователя).

Для игровых серверов это не вариант - вам придется использовать выделенный порт (или несколько) для каждой службы на каждом устройстве. Обычно это называется "переадресация портов" или "DNAT"; это то же самое, что и функция переадресации портов в домашнем маршрутизаторе; и у него есть свой набор проблем:

  1. Он не знает о доменах DNS и работает напрямую на уровне IP-адресов. Если все ваши домены разрешают один и тот же IP-адрес, все они имеют одинаковые правила переадресации портов.

    Это означает, что каждый порт TCP или UDP на данном IP-адресе может быть перенаправлен только на одно устройство. Например, если клиент 1 получает стандартный порт SSH, скажем, pi1.example.com:22 , это означает, что pi2.example.com:22 или pi3.example.com:22 также перейдут на устройство клиента 1 - другие клиенты теперь не могут использовать этот порт для входящих соединений вообще. (В зависимости от того, какое программное обеспечение выполняет NAT, они, вероятно, также не смогут использовать его для исходящих соединений.)

  2. Существует только ~ 65 тыс. Портов TCP и ~ 65 тыс. Портов UDP (на каждый IP-адрес), и они необходимы как для входящих соединений (по одному на услугу, иногда больше), так и для исходящих соединений (в качестве порта источника; обычно по одному на соединение) , Таким образом, на практике вы не можете иметь больше, чем ... скажем, ~ 32 тыс. Правил переадресации портов.

  3. Некоторые сервисы требуют определенного порта. Например, SMTP для доставки входящей почты всегда использует TCP-порт 25; IKE использует UDP-порты 500 и 4500; игровые серверы часто требуют определенного диапазона портов. Если один из ваших клиентов зарезервирует этот конкретный диапазон, другие клиенты не смогут запустить ту же службу.


Что касается того, как его настроить - я предлагаю начать с DNAT, потому что, скорее всего, оно понадобится для обратного прокси в любом случае.

Что это такое и как мне это настроить?

Как уже упоминалось, NAT для входящих соединений (DNAT) часто называют "переадресацией портов" и настраивается непосредственно на вашем маршрутизаторе (устройстве, которое "владеет" вашим общедоступным IP-адресом), и это, безусловно, будет объяснено в руководстве по эксплуатации устройства.

(Если маршрутизатор работает только с обычным Linux или FreeBSD, то правила DNAT добавляются через iptables или pf, как и правила брандмауэра.)

Кроме того, я могу использовать его для блокировки определенных портов, например. порт 25, а логи получать и т.д?

И да и нет. Это особенности вашего брандмауэра. Любой приличный брандмауэр будет иметь их (я имею в виду, это то, что делает брандмауэр), но они будут там вместе с NAT, но не частью NAT.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .