![Обратный прокси-сервер NGINX ssh для нескольких хостов](https://rvso.com/image/1605165/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9%20%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20NGINX%20ssh%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D1%85%D0%BE%D1%81%D1%82%D0%BE%D0%B2.png)
Используя NGINX, у меня есть несколько обратных прокси, которые работают с обычным http(s) для различных веб-сайтов. У меня есть только один публичный IP-адрес, но за ним несколько виртуальных хостов. Эта часть работает так, как и должна.
Я хочу подключиться по ssh ко всем хостам за nginx, сейчас их всего три, но в будущем их будет больше.
Поскольку версия nginx выше 1.9.1, я думаю, это была версия, которая позволяла потоки, я начал настраивать ее для ssh, позже я захочу добавить в этот микс базы данных и, возможно, почту, но сейчас приоритетнее ssh.
Итак, для начала я добавил ssh_available и ssh_enabled в каталог nginx.
/etc/nginx/nginx.conf я добавил следующее:
stream {
include /etc/nginx/ssh_enabled/*;
}
/etc/nginx/ssh_available/domain.com.rproxy.conf У меня есть следующее:
upstream ssh {
server 192.168.1.61:22;
}
server {
listen 22;
proxy_pass ssh;
}
Я использовал обычный метод добавления символических ссылок в ssh_enabled на файлы conf в ssh_available.
Это позволяет мне подключаться по ssh только к одному хосту, который находится за моим обратным прокси-сервером nginx, но только к одному хосту.
При данной текущей конфигурации SSH-соединение всегда устанавливается на одном и том же хосте, независимо от того, использую ли я публичный IP-адрес, поддомен или полное доменное имя.
Как можно превратить это во что-то более портативное, чтобы оно могло работать с несколькими именами хостов/доменов, а не только с одним IP-адресом/доменом?
Мне нужно подключиться по SSH, используя домен, к серверу, на котором он размещен.
решение1
Я придумал обходной путь. Это означает больше открытых портов, чем мне бы хотелось, поскольку на сегодняшний день ssh не принимает домены. Существует решение на основе IPV6, но в данный момент оно мне не подходит.
Так что портов больше.
Вот мое решение. Перенаправьте небольшой диапазон портов на nginx, достаточно портов для каждого сервера. Вы можете выбрать практически любой диапазон портов или сделать выбор самостоятельно, но чтобы сделать этот пример максимально простым, диапазон проще.
Я изменил файл конфигурации, который создал в /etc/nginx/ssh_available/
upstream 59 {
server 192.168.1.59:22;
}
server {
listen 22059;
proxy_pass 59;
}
upstream 61 {
server 192.168.1.61:22;
}
server {
listen 22061;
proxy_pass 61;
}
upstream 62 {
server 192.168.1.62:22;
}
server {
listen 22062;
proxy_pass 62;
}
upstream 63 {
server 192.168.1.63:22;
}
server {
listen 22063;
proxy_pass 63;
}
Конечно, при этом вы ограничены количеством доступных адресов IPV4 в вашей сети. IPV6 был бы лучшим вариантом, но у меня его пока нет.
Обратите внимание, если вы используете этот пример как есть, вы рекламируете часть своей сетевой инфраструктуры, предоставляя внутренний IP в качестве номера порта любому, кто захочет его узнать. Вам следует тщательно выбирать порты, которые вы открываете, и соответствующим образом настраивать конфигурацию.
Конечно нет, это, по моему мнению, не очень хороший ответ, но это рабочий ответ, поэтому я публикую его, но не принимаю его как решение. У вас может быть лучший метод для IPV4, чем тот, который придумал я, и я абсолютно приветствую ваши ответы.