Pull to refresh

Comments 46

Чтобы не выдумывать IP-адреса, используйте диапазоны адресов для документации и примеров: tools.ietf.org/html/rfc5737

> 3. Documentation Address Blocks
> The blocks 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2),
> and 203.0.113.0/24 (TEST-NET-3) are provided for use in
> documentation.
Да уж ладно, я думаю, что и так будет понятно и никто не обидится за придуманный и когда-то увиденный мной диапазон
Между прочим, из-за того, что многим нравится вбивать 1.1.1.1 как пример адреса, сейчас в эту сеть льются огромные потоки мусора: habrahabr.ru/links/83187/
Ну, я, по-крайней мере, предупредил что я выдумал эти числа.
Вы белый динамический с серым не перепутали?
А то проблемы с белым динамическим решаются через DynDNS и никакого NAT там нет.
Я рассказал о внешних (динамических), диапазонами которых часто владеют провайдеры и выдают их «как повезет» (например, в ADSL), поэтому они и являются динамическими. А серые часто являются как раз подсетью или подобием NAT.
При внешних динамических адресах NAT вообще ни при чем — там идет обычная маршрутизация. А серые — как раз внутренние, про них-то Вы и пишете. Не?
Шанс, что вам выдадут реальный внешний IP мал. Представьте сколько пользователь у провайдера и сколькими адресами ему придется владеть.

Кстати, у меня стоит DynDNS как раз для обхода двух NAT (внутренний мой и общий).
Вы придираетесь к словам по сути.
У нас в стране ADSL в основном у Ростелекома, там во ВСЕХ филиалах раздают белые динамические, никаких серых. Кое-где даже белые статические были до этого года.
У нас ADSL идет практически до роутера с NAT, который уже распределяет интернет. Так что это не панацея.

Апдейтнул топик.
У нас Ростелеком до сих пор раздает статику.
Текущий мой провайдер белые динамические раздает + за минимальную плату статику.
Другой провайдер тоже белый динамический, юрикам статика бесплатно.

Так что не такая уж это и редкость.
Ого, расскажите, как Вы обходите 2 NATа с помощью DynDNS? Ну или хотя бы один.
По той же схеме.

А наты сами между друг другом договариваются по каким портам передать.
Ок, чтобы не было ощущения, что я придираюсь к словам, давайте разберемся.

Во-первых, DynDNS позволяет динамически изменять NS записи при изменении IP адреса хоста. Обычно, DynDNS используется в случаях динамически выдаваемых внешних адресов из автономной системы, принадлежащей интернет-провайдеру (или вышестоящему оператору связи). Адреса в автономных системах не нуждаются в какой-либо трансляции, а маршрутизируются через протоколы динамической/статической маршрутизации (RIP, OSPF, BGP и пр.).

Во-вторых, NAT используется, обычно, для трансляции внутренних адресов во внешний.

Таким образом, если у Вас работает DynDNS, то и адрес провайдер вам выдает динамический внешний. Если вы подключаетесь через свой роутер, то NATом является именно он и транслирует ваши локальные адреса через внешний IP адрес наружу. У провайдера в этом случае никакой потребности в NATе нет.

В итоге, DynDNS привязывает некоторое имя хоста к вашему динамическому адресу и без привязки по портам бросает все пакеты на него т.е. они не NATируясь приходят на WAN интерфейс вашего роутера. Роутер, в свою очередь, транслирует внешний интерфейс через свой NAT в вашу локальную сеть и хранит локальную таблицу трансляции.

При схеме с двумя NATами (роутер и провайдер) последний выдает WAN интерфейсу вашего роутера внутренний (серый) ip-адрес и в этом случае DynDNS вам не поможет.
Извиняюсь. Забыл, что настраивал переадресацию портов.
На ADSL как правило раздают белые динамические т.е. пользователь1-сервер-пользователь2. Никаких NAT.
У нас по всему городу (а то и стране) натыканы ADSL, которые идут далее в NAT, который уже и раздает домам интернет.
Ну знаете, при всём уважении, целыми домами на ADSL садились лет этак 6 назад, когда ADSL стоило подключить по 10тыр. Даже на дальнем востоке и на севере сейчас такое редко встретишь.
На востоке это нормально. Просто Я не стал уточнять про ADSL2+
=)
А я понял, речь про ADSL модемы и Ethernet роутеры с непроброшенными портами.
Adobe Cirrus (stratus) видимо использует подобную технологию для пирингового соединения.
Интересно было почитать, как это работает внутри.
Это называется UDP Hole Punching (wiki)
Я вот недавно открыл для себя LogMeIn Hamachi — позволяет установить VPN соединение между любыми машинами буквально в пару кликов.
Автор молодец, но стоило поподробнее написать про различные виды NAT (хотя бы расширить P.S.).
Существуют Full Cone NAT, Address-Restricted Сone NAT, Port-Restricted Сone NAT и Symmetric NAT.
P2P возможен на первых трёх.
Почитать можно тут.
Статья написана поверхностно, по-дилетантски и вообще ужасно.
Автор, похоже, сам не разбирается в теме, а уже пытается кого-то чему-то учить.
Он не видит разницы между динамическим IP-адресом и серым адресом, выходящим в инет через NAT.
Внятного объяснения, что такое NAT, зачем он нужен, и как он в действительности работает, в статье нет. Видимо это от того, что и понимания этого у автора нет.

Ещё из текста и иллюстраций автора следует, что если клиентский компьютер пытается подключиться к FTP-серверу на TCP-порт 21, то сетевое соединение якобы инициируется с TCP-порта 21 клиентского хоста. А если клиентский компьютер пытается подключиться к ICQ-серверу на TCP-порт 5191, то сетевое соединение якобы инициируется с TCP-порта 5191 клиентского хоста. По этой логике, видимо, и подключении к веб серверам по протоколу HTTP на TCP-порт 80 устанавливается с TCP-порта 80 клиентского хоста. Ну ведь это же бред!
В действительности TCP-порт клиентского хоста при этом выбирается случайный из верхнего диапазона TCP-портов и вовсе не совпадает с TCP-портом, на котором работает данный сервис на сервере, к которому подключаются.

Автор, запусти netstat и подключись по HTTP/FTP или любому другому протоколу к любому серверу, и посмотри в этот момент, с каких портов и на какие устанавливаются TCP-подключения. Элементарно же проверить, прежде чем писать такую чушь.
Я один из разработчиков Shareman подобиев.
Я пишу Торрент клиенты.
Я в самом начале написал, что объяснения поверхностные, для понимания базовых принципов. Я часто слежу за тем, какие вопросы задают на форумах и т.п.

Я мог приложить исходники, но я пишу, в большинстве, на дельфи (DLL или EXE).
Могу приложить исходники в следующей статье для написания p2p протокола игры, что, на данный момент, я реализовал.
> Я один из разработчиков Shareman подобиев. Я пишу Торрент клиенты.

Это вы к чему написали? Это якобы как-то указывает на вашу квалификацию в предметной области?
Ну такие заявления вообще не показатель. Мы уже повидали тут подобные заявления от «разработчиков игр» и «разработчиков своей уникальной операционной системы».

> я пишу, в большинстве, на дельфи (DLL или EXE).

А тут к чему были указания DLL и EXE? Это как-то связано именно с Delphi? Или вы мне намёками решили объяснить, что пишете исключительно под Windows?
Я вам написал, что я знаю что пишу.
Вы так удобно придираетесь к строчке, пропуская остальные.

В том, что я написал про Шареман и следующее — да, я говорил о квалификации. Но далее я написал, что объяснения поверхностные, или вам так хочется видеть то, что вы хотите для троллинга?

Про дельфи я написал, поскольку мог приложить исходники, но этот троллинг языка, который тут присутствует, а многие его не знают — незачем.

Смотрите этот комментарий.
Кстати, я не гнался за звездочкой, я просто искал куда поместить и, если честно, не хотел сюда помещать.
Причем тут сетевые технологии?
Большинство UDP соединений и TCP соединений в программах создаются через данные хаки, постоянно поддерживая подключение.
Так, говорите, в протоколе UDP, как и в TCP, устанавливается соединение?
Очень интересно. Напишите об этом поподробнее.
Я буду сильно разжевывать. Некоторые мои объяснения могут не сойтись с реальностью, но это делается для того, чтобы было понятно как и что работает, поскольку на практике данных знаний хватит.

Вы видели этот текст?
Ну, кстати, насколько я понимаю, в нат-схемах оно де-факто создается — наты поддерживают порт до таймаута. Хотя это, конечно, не соединение на уровне протокола, но все равно соединение.

Хотя, мне кажется, автор не совсем понимает сути…
Он написал всё подробно. Подключение поддерживается с средним сервером, поэтому маппинг портов сохраняется несколько секунд после очередного пакета.
Если я не ошибаюсь, в примере описан как раз активный фтп (открывающий порт на прослушку), а не пассивный.
Вообще описание задачи «соединение компьютер-компьютер через интернет с динамическими IP» сформулировано не совсем корректно. Описывается публикация в интернет сервера, находящегося в локальном сегменте сети — например, за роутером. При этом внешний айпишник у роутера может быть статическим. И наоборот — напрямую (без NAT) подключенный к интернету компьютер может иметь динамический айпи-адрес.
Я так понимаю, вы про nat traversal / nat penetration рассказываете? Если это так, то не очень хорошо получилось :(.

Пользователь 1 делает соединение на этот внешний IP:Port (43.12.102.15:61782) и попадает на внутренний порт 5191.


Агащасдвараза. NAT для TCP запоминает не только «кто и куда», но и внутренние параметры протокола TCP, в частности — sequence number и текущее состояние. Установить TCP соединение на внешний IP и порт только потому, что у NAT для этого порта есть правило не получится, так как будет другой sequence number. Отсылают UDP пакет, так как для UDP в общем случае нет понятия «подключение» и NAT запоминает только IP и порты.
Вот сейчас сижу и думаю. Толи я дурак, толи двери стеклянные.

В моем понимании работы NAT:
1) Получить пакет с запросом с адреса 192.168.0.23
2) Сверится с таблицей маршрутизации, запомнить кто и что спрашивал.
3) Отдать запрос своему gateway
4) а. Ответа от gateway нет — сообщим адресу 192.168.0.23, что ответа нет
4) б. Ответ получен — отдаем ответ тому адресу, кто содавал запрос (читаем заголовок пакета, ага)

Какие нафиг открытые порты?
NAT не лезет смотреть кто и что спрашивал. Ему это не зачем.
Он просто смотрит куда вы спросили и открывает у себя порт для установки связи.
Как вы, наверное, знаете, на одном порту не может висеть несколько сервисов одновременно. Именно поэтому NAT требуется открывать новые порты для каждого соединения, которые, чаще всего не соответствуют стандартному номеру изнутри.
А не проще ли присвоить каждому компу по бесплатному домену, обновляя их dynamic-dns какой-нибудь башетулзой?
Sign up to leave a comment.

Articles