Назад | Перейти на главную страницу

разделение трафика TCP на нескольких получателей на бэкэнде?

предположим, что у меня есть доменное имя kevin.com, и у меня есть несколько серверов, которые находятся за nginx. Балансировка нагрузки HTTP-трафика с nginx проста, но могу ли я разделить трафик, полученный на конкретный порт на сервере nginx, и направить этот трафик на разные серверы в бэкэнде? Например, если у меня есть a.kevin.com, b.kevin.com и c.kevin.com, которые разрешают один общедоступный IP-адрес и все прослушивают порт 2022, и я хочу иметь возможность подключаться к экземплярам ssh работает на 3 разных серверах в бэкэнде, можно ли это сделать с помощью nginx? Могу я ssh на a.kevin.com:2022 и перенаправить его на машину 10.0.0.1 на порт 22, b.kevin.com:2022 -> 10.0.0.2:22 и c.kevin.com:2022 -> 10.0.0.3:22? Я предполагаю, что nginx должен иметь возможность каким-то образом анализировать имя хоста, к которому было подключено внешнее соединение. Спасибо.

Сервер не может узнать, какое имя хоста вам нужно; это не часть протокола ssh.

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

В устаревшем мире IPv4 обычным решением этой проблемы является хост-бастион, сервер, который имеет как глобальный адрес IPv4, так и частный адрес IPv4 в вашей сети. Сначала вы подключаетесь по ssh к этому хосту, а затем по ssh к хосту, которого вы действительно хотите достичь. OpenSSH ssh команда даже имеет параметр командной строки -J что немного упрощает этот процесс.

Чтобы сделать это с переадресацией портов IPv4, вам нужно будет переадресовать отдельный порт для каждого отдельного сервера.