Как направить трафик из разных поддоменов на разные внутренние 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
Было бы хорошо, если бы я мог указать, какие протоколы разрешены в каких поддоменах, и явно маршрутизировать каждый протокол и порт на внутренние машины.
Для некоторых протоколов это просто невозможно с переадресацией портов, если вы не запустите их на нестандартных портах (так что сам маршрутизатор находится на порту 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 должен сделать свое дело.