Я считаю, что вы смешиваете условия.
Распределение нагрузки обычно означает, что вы подключаетесь к одному хосту ( example.com
) и позволяете балансировщику нагрузки распределять все подключения к одному или нескольким внутренним хостам, обычно без контроля пользователя, к какому фактическому хосту вы подключаетесь. Это легко сделать для SSH различными способами.
Некоторые протоколы, такие как HTTP с Host
заголовком, могут дать балансировщику нагрузки больше информации, чтобы решить, на какие серверы бэкэнда должно быть направлено соединение (например, example.com
маршрутизируется на a
и b
, в то время как example.org
маршрутизируется на c
и d
).
У SSH нет такого поля, и, следовательно, это невозможно сделать с помощью балансировщика нагрузки и только одного IP-адреса. Это делает LB непригодным для этой задачи.
Как правило, это решается путем использования хоста в качестве хоста прокси / шлюза / перехода SSH и инструктирует ваших клиентов SSH использовать его как таковой. Если вы используете OpenSSH, поместите следующее в ваших клиентов~/.ssh/config
Host *.internal.lan ProxyCommand ssh -q -A -x proxy.example.com -W %h:%p
Теперь, если вы подключитесь к именам, указанным в Host
строке, ваш SSH-клиент сначала подключится proxy.example.com
(который должен указывать на ваш общедоступный IP-адрес) и будет использовать его в качестве шлюза для перенаправления на фактический компьютер (используйте переадресацию порта NAT на порт 22). вашего фактического прокси-сервера, если применимо). Обратите внимание, что proxy.example.com
должно быть в состоянии решить *.internal.lan
. Для этого либо установите DNS-сервер, либо используйте внутренний, предлагаемый вашим маршрутизатором.
После этого из внешней сети, к которой вы подключаетесь, чтобы nas.internal.lan
получить доступ к вашему NAS (или и raspi.internal.lan
т. Д.), И изнутри вашей локальной сети, которую вы просто используете nas
или raspi
(таким образом, соединение является прямым, а не через шлюз).
Другой способ, учитывая тот факт, что вы используете NAT:
Создайте переадресацию портов в вашем маршрутизаторе NAT, например, как
Port 2210 -> internal host1, port 22 Port 2211 -> internal host2, port 22
и затем поместите в своих клиентов следующее ~/.ssh/config
:
Host host1.example.com Port 2210 Host host2.example.com Port 2211
и убедитесь, что host1/2.example.com
оба указывают на ваш внешний IP-адрес.
Затем вы можете просто подключиться через SSH к, host1.example.com
и OpenSSH подключится к порту 2210, который перенаправляется на ваш внутренний хост1 шлюзом NAT.
Оба метода работают в вашем сценарии.