Я все еще не понимаю, как установить соединение 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 ответа2

0

Если у вас есть маршрутизатор с одним общедоступным 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 является одним из наиболее атакованных портов. Использование какого-либо другого порта не делает вас более безопасным, но снижает вероятность того, что вы увидите столько атак.

0

Я не совсем понимаю ваш вопрос, потому что вы знаете, что есть несколько сессий 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-адресов!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .