LINUX.ORG.RU

IPv4 & IPv6 & ssh port forwarding


0

0

вопрос к специалистам по ssh и IPv6

локальная машина подключена к IPv4 и IPv6 интернетам. Есть внешняя машина которая также подключена к IPv4 и IPv6 интернетам. Для простоты скажем что внешняя машина имеет адреса 10.0.0.10 и [10::10].

узнаём IPv4/IPv6 адреса сайта http://www.kame.net

$ host www.kame.net
www.kame.net has address 203.178.141.194
www.kame.net has IPv6 address 2001:200:0:8002:203:47ff:fea5:3085

создаём каналы

$ ssh -fNL 8084:203.178.141.194:80 10::10
$ ssh -fNL 8086:[2001:200:0:8002:203:47ff:fea5:3085]:80 10.0.0.10

заметим что до IPv4-адреса 203.178.141.194 у нас канал через IPv6, а до IPv6-адреса [2001:200:0:8002:203:47ff:fea5:3085] у нас канал через IPv4.

Теперь фокус: в браузере набираем http://[::1]:8084/ и убеждаемся что подключены по IPv4 (черепаха не танцует). Теперь наберём http://127.0.0.1:8086/ и видим танцующую черепаху — значит соединены по IPv6.

Как же так, ssh-server получается не просто форвардит пакеты меняя адреса в заголовках, но и преобразовывает IPv4 в IPv6 и обратно?

★★

> ssh-server получается не просто форвардит пакеты меняя адреса в заголовках

Откуда у тебя вообще взялась эта странная идея?

> но и преобразовывает IPv4 в IPv6 и обратно?

Он передает байтовый поток, которому без разницы, является нижележащим транспортом IPv4 или IPv6.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Откуда у тебя вообще взялась эта странная идея?

у меня на одной машине бежит локальный IPv4-сервер (на 127.0.0.1). Случайно включил ssh-канал не как обычно через IPv4, а через IPv6. И оно как ни странно заработало... Хочется выяснить почему

> Он передает байтовый поток, которому без разницы, является нижележащим транспортом IPv4 или IPv6.

да нет, IMHO в данном случае он передаёт TCP пакеты (ssh вообще много чего умеет). Именно поэтому указывается только номер порта, подразумевается что он TCP. А TCP может быть либо TCP4, либо TCP6. Когда я в броузере набираю http://127.0.0.1:8086/ он отправляет запрос (и ожидает ответ) именно по IPv4. Но так как черепаха танцует -- конечный сервер получает запрос по IPv6. Значит ssh-server одно преобразовал в другое.

pupok ★★
() автор топика
Ответ на: комментарий от dimon555

> вроде как все ipv4 можно отобразить в ipv6

разве что в пределах локальной машины, т.к. «отображённые» адреса невозможно роутить по ipv6.

Adjkru ★★★★★
()

> Как же так, ssh-server получается не просто форвардит пакеты меняя адреса в заголовках, но и преобразовывает IPv4 в IPv6 и обратно?

не преобразовывает, а на входящее соединение, неважно какого типа создаёт соответствующее исходящее нужного типа.

Adjkru ★★★★★
()
Ответ на: комментарий от dimon555

> вроде как все ipv4 можно отобразить в ipv6

Тогда уж скорее наоборот -- TCP6 пакет по структуре проще TCP4-пакета, и его можно было бы засунуть в TCP4-пакет. Но тут преобразование в любом случае идёт в две стороны IPv4<->IPv6. Вопрос не в количестве уникальных IP-адресов а в формате TCP-пакета.

pupok ★★
() автор топика
Ответ на: комментарий от Adjkru

> не преобразовывает, а на входящее соединение, неважно какого типа создаёт соответствующее исходящее нужного типа.

звучит просто, и с UDP возможно именно так бы и работало. Но TCP -- это stateful протокол, и как согласовывать какие соединения установлены, какие пакеты пропущены и их надо переслать, какие пришли с опозданием -- довольно много возни.

pupok ★★
() автор топика
Ответ на: комментарий от pupok

> довольно много возни

возни нет никакой - переадресовывается не оригинальное соединение, а устанавливается новое tcp-соединение, а между оригинальным и исходящим просто форвардятся данные.

Adjkru ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.