Pull to refresh

Comments 15

То есть если все такие умные закроют рабочие порты i2p-роутера, чтобы повысить свою приватность — вся сеть ляжет? :)

Суперноды домикрософтного Skype.

У флудфилов порты всегда открыты. Сеть ляжет если не будет флудфилов, но на данный момент их в сети достаточно.

Важно держать в уме, что роутер - это часто некая сущность с видимым IP-адресом, однако анонимность сети строится не на сокрытии адресов, а на факторе неизвестности месторасположения того или иного скрытого ресурса (неизвестно с какого роутера сидит пользователь и на каком расположен сервер). Следовательно, искусственно скрывать адреса роутеров смысла не имеет.

Эта статья в первую очередь о механике работы пир-ту-пир сети у абонентов без выделенного IP-адреса, а "использование не по назначению" - это либо баловство, либо экстримальный случай.

В UDP существует понятие «hole punch» (пробитие окна), которое означает кратковременное резервирование порта на NAT-сервере, который закрепляется за абонентом. Вся информация, приходящая на этот порт, будет передана конкретному абоненту.

Вроде резервируется порт с привязкой к IP-адресу, на который абонент отправил пакет. Разве нет?

UDP не имеет флагов контроля, входящий и исходящий трафик UDP между собой фактически не связан. Если привязать окно (hole punch) к IP-адресу на другом конце, а не на адрес локального пользователя, находящегося во внутренней сети NAT-сервера, то встает два вопроса:

  1. Какая разница удаленному получателю с какого адреса он получает пакеты?

  2. Каким образом абонент за натом будет получать адресуемые ему пакеты, если окно привязано не к нему, а к "кому-то" на другом конце земного шара?

Поправьте меня, если я заблуждаюсь.

На Cisco запись в таблице NAT состоит из 4 пар ip:port - inside local, outside local, inside global, outside global. Поэтому когда хост из внутренней сети (inside local) шлёт udp пакет наружу (inside global), при трансляции source NAT в outside local попадает оттранслированный адрес, в outside global копируется inside global.

Обратный пакет, пришедший на интерфейс outside, проверяется по таблице трансляций. Если там не будет записи, он дропнется.

Спасибо за дополнительное разъяснение.

Общую проблематику пробития NAT лучше всего смотреть по STUN (RFC3489). Определённое там понятие symmetric NAT показывает самый тяжёлый случай, когда, в терминах Cisco, outside local address определяется отдельно для каждого outside global address - предсказать этот outside local невозможно. Если у двух участников одновременно symmetric, поднять напрямую через два NAT нереально - требуется промежуточный прокси.

Большинство домашних раутеров, однако, реализуют cone подход. В этом случае outside local общий на всех, с кем общаются с одного inside local (а по возможности ещё и порт совпадает с внутренним). Это даёт возможность задать другому пиру тот адрес, что подсказала прокси.

Большинство домашних раутеров, однако, реализуют cone подход.
А какой подход реализует большинство провайдерских роутеров?

А что вы имеете в виду под провайдерскими раутерами? Core и distribution вообще NAT не реализуют (ну, >99.9% случаев). Access уровень - тут зависит от применения и толщины раутера. Если это как у домосети, которая на один белый IP садит сотню клиентов (у каждого из которых ещё обычно свой домашний раутер) - то я скорее предполагаю symmetric, потому что меньше шансов на конфликты доступа.

Если честно — я даже малейшего представления не имею — что за роутеры у провайдеров. Я про то, что сейчас почти все провайдеры попрятали клиентов за свой NAT. Получился двойной NAT — один дома, а второй у провайдера. Так вот если дома подход «cone» позволяет делать дырку в NATе при помощи UDP, то, как я понял, эта возможность сводится на нет вторым NATом провайдера — если он «symmetric». Поэтому и задал такой вопрос — что у провайдеров «cone» или «symmetric»?

Правильно ли я понимаю, что для связи конечных узлов, требуется чтобы у них было окно к одному и тому же проводнику? И как в таком случае это достигается? Или предполагается что один из трёх проводников, доступных для каждого узла будет общим для них?

У каждого из абонентов свой проводник, общий им не нужен. Более того, проводник используется только для приема внешних обращений, для исходящих он не нужен.

Взгляните на таблицу-пример ниже. Узел А при обращении к Проводнику Б не нуждается в своем проводнике, так как обратиться наружу без выделенного IP-адреса он и так может. Обращаясь к проводнику Б, узел А сообщает свой hole punch. Проводник Б передает IP-адрес и порт узла А на узел Б. Когда узел Б обращается на этот адрес (который является окном узла А), он образует свое окно - окно узла Б. Ответ узлу А приходит через окно узла Б. Таким образом мы имеем два окна - по одному у каждого из участников. При этом практически использовался только один проводник - проводник принимающей стороны.

Узел А     Проводник А     Проводник Б     Узел Б
  ----------------------------->   ---------->
  <-------------------------------------------
  ------------------------------------------->  
Sign up to leave a comment.

Articles