Переадресация вызова с разных поддоменов на разные внутренние машины

Как маршрутизировать трафик из разных поддоменов на разные внутренние IP-адреса?

Я настроил маршрутизатор Debian с одним общедоступным IP-адресом и доменным именем, указывающим на этот IP-адрес. Я бы хотел, чтобы разные субдомены охватывали разные внутренние машины.

Я говорю о трафике HTTP, SSH и FTP, и на маршрутизаторе установлены Shorewall и dnsmasq.

Например, URL: ftp.example.com. Я хотел бы указать одну машину с внутренним IP-адресом 192.168.1.10, а затем dev.example.com. Мне бы хотелось получить другой внутренний IP-адрес. скажем 192.168.1.200

Было бы хорошо, если бы я мог указать, какие протоколы разрешены для каких поддоменов, и явно направить каждый протокол и порт на внутренние машины.

2 ответа

Решение

Для некоторых протоколов это просто невозможно только с переадресацией портов, если вы не запускаете их на нестандартных портах (поэтому сам маршрутизатор находится на порте 22 для SSH, внутренняя машина 1 появляется на порту 23 на общедоступном IP, внутренняя машина и т. Д. порт 24 и т. д.) или иметь более одного публичного адреса.

HTTP - это можно сделать с помощью обратного прокси. Запустите что-то вроде nginx и получите весь трафик, изначально поступающий на порт 80, и используйте функцию прокси для отправки запросов на соответствующий компьютер в соответствии с запрошенным (суб) доменом. Другие веб-серверы также имеют аналогичные прокси-функции (например, Apache, хотя запуск чего-то меньшего, например, nginx, более эффективен, если вам нужна только прокси-функция).

HTTPS - если все подключающиеся клиенты поддерживают SNI, вы можете использовать тот же метод, что и для HTTP выше. К сожалению, ни одна версия Internet Explorer, работающая под Windows XP, не поддерживает SNI, поэтому в зависимости от клиентской базы это может быть проблемой. Уязвимые браузеры сообщат своим пользователям об ошибках сертификата. Другой способ обойти SNI, а не полагаться на него, - получить один сертификат, действительный для всех необходимых вам имен (т. Е. Сертификат с несколькими именами, если в теории очень разные имена, или сертификат с подстановочными знаками, если все они являются поддоменами одного), но как правило, они дороже, чем сертификаты с одним именем.

SSH - напрямую не возможно. Хотя вы можете просто SSH в маршрутизатор, а затем SSH дальше в сеть оттуда. Даже переадресация портов и тому подобное работает через несколько прыжков, как это, если вы правильно произвели заклинания. Если вы работаете по SSH, помните, что SFTP или SCP более чем являются жизнеспособной альтернативой FTP во многих случаях и дают преимущества, которых нет у FTP.

FTP - я не запускаю FTP-сервер уже довольно давно, поэтому я здесь не эксперт. Могут быть варианты обратного прокси, но я сомневаюсь в этом, исходя из моих знаний о том, как работает протокол. Здесь можно выбрать один FTP-сервис и разрешить ему доступ к различным компьютерам в сети через сетевые ресурсы (это может быть непрактично в зависимости от ваших требований к аутентификации, но для многих вещей должно быть достаточно). Вы также можете рассмотреть возможность использования SCP или SFTP (через SSH), который является более эффективным и более безопасным, чем FTP.

Вы хотите использовать обратный прокси для этого. Mod_proxy Apache должен сделать свое дело.

Другие вопросы по тегам