Я все еще не понимаю, как установить соединение SSH (порт 22) между двумя компьютерами в разных внутренних сетях. Например: я на своем компьютере с внутренним IP-адресом IIP-1, подключен к маршрутизатору RT-1. К RT-1 подключено 10 IIP. Я хочу установить SSH-соединение с IIP-3, которое подключено к маршрутизатору RT-2. К РТ-2 подключено 10 МИПов. В любое время может быть несколько соединений SSH между IIP на RT-1 и RT-2. Поскольку у меня доступен только порт 22, я не знаю, какой сеанс SSH говорит между какими IIP. Я посмотрел на пару похожих вопросов, но до сих пор неясно, как их решить. Большое спасибо, Джерри
2 ответа
Если у вас есть маршрутизатор с одним общедоступным IP-адресом на стороне глобальной сети и вы используете подсеть частных IP-адресов на стороне локальной сети, это больше, чем маршрутизатор, это NAT (технически NAPT: преобразование сетевых адресов и портов, но большинство люди просто говорят NAT) шлюз.
Когда хост пытается установить новое соединение, он отправляет пакет с эфемерным номером порта (выше 49152). Поскольку шлюз NAT обрабатывает этот исходящий пакет, он проверяет, свободен ли этот порт источника на интерфейсе WAN шлюза NAT (общедоступный IP-адрес). Если это бесплатно, это позволяет этому клиенту использовать тот номер порта; если он используется, он назначает другой пакет общедоступного номера порта и модифицирует пакет, чтобы он выглядел так, как будто он получен с этого другого номера порта. В любом случае, она создает запись в таблице, отображающую этот номер общего порта на этот частный IP-адрес и порт, поэтому она может правильно транслировать и пересылать любые дополнительные пакеты по этому соединению в любом направлении.
Для новых попыток входящего соединения на своем общедоступном IP-адресе шлюз NAT не может автоматически знать, кому пересылать попытку соединения. Таким образом, шлюз NAT по умолчанию отбрасывает пакет и, возможно, ответит пакетом сброса TCP или сообщением ICMP «Destination Unreachable: Port Unreachable». Вот почему вы должны создать правила переадресации портов (иначе говоря, отображение портов, виртуальный сервер и т.д.).
Но один порт, такой как хорошо известный порт 22 ssh
, может быть перенаправлен только на один хост. Таким образом, для подключений, инициируемых извне, только один хост может быть подключен к порту 22. Так что если у вас есть более одной машины за шлюзом NAT, и вы хотите, чтобы все они были доступны через ssh
извне, вам нужно будет выбрать другие номера портов для сопоставления с этими хостами. Например, сопоставьте общедоступный порт 22 с портом 22 на первом хосте, затем сопоставьте общедоступный порт 50022 с портом 22 на втором хосте, затем сопоставьте общедоступный порт 50122 с портом 22 на третьем хосте и т.д.
Затем, когда вам нужно подключиться, скажем, ко второму хосту, используйте ssh -p 50022 username@PublicIPAddrOfNATGateway
.
На самом деле, это, вероятно, лучше, если вы не сопоставляете публичный порт 22 с чем-либо. Порт ssh
22 является одним из наиболее атакованных портов. Использование какого-либо другого порта не делает вас более безопасным, но снижает вероятность того, что вы увидите столько атак.
Я не совсем понимаю ваш вопрос, потому что вы знаете, что есть несколько сессий SSH.
Я не вижу, где маршрутизаторы входят в это. Потому что у вас возник бы тот же вопрос, если бы был только один маршрутизатор.
Я не понимаю, почему это имеет значение для вашего вопроса, являются ли они внутренними или внешними IP-адресами ..
У вас есть несколько подключений к серверу SSH с разных компьютеров.
Я предполагаю, что каждый отличается тем, что один вошел в систему как один пользователь, один как другой пользователь.
И каждый из них отличается тем, что инициируется другим IP.
И если один компьютер может инициировать несколько подключений, то вы можете сказать, что каждое подключение отличается от инициируемого другим IP:PORT
Все частные IP-адреса (которые вы называете IIP) на R1, отличаются от IP-адресов на R2.
НО....
Давайте предположим, что это не так .. (я думаю, к чему вы клоните)
Предположим, что некоторые компьютеры на R1 имеют тот же IP-адрес, что и некоторые компьютеры на R2.
Тогда R1 и R2 должны сделать NAPT. (NAPT - это NAT, но также один ко многим). Таким образом, SSH-сервер связывается с IP-адресом R1 и IP-адресом R2. Каждое соединение находится в другом порту.
Таким образом, каждый sSH-сеанс, с точки зрения SSH-сервера, является хорошей перспективой, с которой нужно смотреть… так как он определяет все соединения с ним. Каждый сеанс ssh может быть идентифицирован по IP:PORT, где IP - это IP-адрес R1 или R2. И какой бы порт.
Вы говорите не о переадресации портов.
Если у вас есть несколько компьютеров за маршрутизатором NAPT, и они подключаются к Интернету, это не требует переадресации портов, но требует преобразования портов. Сайт просто видит IP-адрес NAPT Router. Маршрутизатор NAPT различает каждое соединение, поскольку он открывает локальные клиентские порты для связи с веб-сайтами, и любой открытый локальный клиентский порт будет связан с одним из подключенных к нему частных IP-адресов.
Как правило, вы не хотите NAPT локально, это безумие. У вас достаточно частных IP-адресов!