Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

Кажется, мне удалось-таки допилить исходники FEDA (включая сервер) до состояния, когда их всё-таки можно показать публике. Не, ну там, конечно, внутри по прежнему жуть с ружьём, но совсем откровенные заплатки я вроде заборол. Так что если у кого есть больше одной машины на реальных IP-адресах, можете попробовать поднять свою систему серверов для проверки типа NAT. Можно, естественно, кооперироваться. Сервер ресурсов жрёт чуть больше чем ничего, всё, что ему нужно — это один несчастный UDP-порт.

Ещё появилась хотя бы одна полезная (прямо сейчас) функция у всей этой криптографической инфраструктуры: можно пойнтовым ключом подписать произвольный файл и потом эту подпись проверить. В планах стоит ещё шифровка/дешифровка, но пока не реализовано. Баги там, скорее всего, многозубые и в количестве, код жутко сырой, но лучше, чем ничего.

В общем, вот новость на сайте FEDAnet, вот тут качать архив.

Спасибо всем, кто поддержал проект!


From Parthen (unverified) Fri Jun 27 10:07:08 2025 UTC pencil

Таки поднял

[parthen@parthen-pc src]$ ./natcheck -v parthen.site
normal messages enabled
info messages enabled
will contact 150.241.102.39:65242
my local socket address: 0.0.0.0:44526
they see us as 82.208.127.210:9990
suggested to expect: sibling server 31.169.125.106:65242
total: 1 sibling servers
timed out
got the server's reply but no others, second stage is needed
got 1 replies, all peers see us at the same address
----------------------
Looks like RESTRICTED CONE type of NAT; not too bad.
Check the file NAT_TYPES for explanation

Как-то я упустил, что за second stage?

parent From Andrey V. Stolyarov profile Fri Jun 27 10:28:08 2025 UTC pencil

userpic

Re: Таки поднял

> что за second stage?

Там всё выглядит так: сначала natcheck посылает серверу пять штук "заглушек" (stubs), чтобы сервер мог исполнить принцип "не посылать в ответ больше, чем было в запросе"; после этого серверу отправляется дэйтаграмма "хочу проверить свой NAT". Сервер в ответ на это отправляет дэйтаграмму, в которой указано, во-первых, как выглядит с его точки зрения адрес того, кто к нему пришёл, а во-вторых, сколько у него есть peer'ов и где они (адрес/порт каждого). Кроме того, сервер посылает своим peer'ам дэйтаграммы с просьбой кинуть дэйтаграмму такому-то (собственно тому, кто пришёл). Получив эти просьбы, peer'ы кидают на указанный адрес свои "заглушки" (это того же типа дэйтаграмма, которая используется natcheck'ом в самом начале).

На своём конце natcheck сидит и ждёт (по умолчанию 5 секунд), что ему придёт. Ну или если пришло всё, чего можно было ожидать, то вываливается раньше, но это бывает только при Full Cone. Собственно, при Full Cone он получает и ответ сервера, и заглушки от peer'ов, и на основании этого радостно констатирует, что это Full Cone, и успокаивается.

Если ему пришёл только ответ от сервера, но заглушки от peer'ов не пришли, он понимает, что с Full Cone тут не сложилось, но чего он пока что не может утверждать с уверенностью — restricted это или symmetric. Вот тут, собственно, и проводится second stage: natcheck тупо посылает echo request'ы тем peer'ам, которые ему любезно подсказал сервер в своём ответе. В ответ на echo request приходит echo reply, содержащий информацию о том, как мы выглядим с точки зрения того, кто нам отвечает, т.е. какие он видит пары адрес/порт. Если они совпадают между собой и с тем, что сервер сказал — значит, это Restricted Cone. Если не совпадают — ну, нам не повезло совсем, это долбаный symmetric.

parent From Parthen (unverified) Fri Jun 27 10:33:29 2025 UTC pencil

Re: Re: Таки поднял

Ну, вроде понятно.

P.S. Сервера я оставил запущенными, кто хочет попробовать - welcome

parent From feriman (unverified) Sat Jun 28 08:14:10 2025 UTC pencil

Re: Re: Re: Таки поднял

~/src/fedanet-0.0.10 $ src/natcheck -v parthen.site
normal messages enabled
info messages enabled
will contact 150.241.102.39:65242
my local socket address: 0.0.0.0:47550
timed out
timed out waiting for the server's reply

parent From Andrey V. Stolyarov profile Sat Jun 28 10:10:01 2025 UTC pencil

userpic

Re: Таки поднял

Странно, у меня работает — только что проверил

parent From Parthen (unverified) Sat Jun 28 15:26:06 2025 UTC pencil

Re: Re: Таки поднял

Сервак в Нидерландах, может из-за этого

parent From feriman (unverified) Sat Jun 28 21:35:04 2025 UTC pencil

Re: Re: Re: Таки поднял

Вряд ли, ибо на веб сайт заходится без проблем.

From Anonymous (unverified) Thu Jun 26 23:12:09 2025 UTC pencil

Поднял свои сервера для проверки NAT

Поднял свои сервера для проверки NAT (на 2 машинах). Проверил в natcheck - работает.

Скомпилировал на домашней машине, а на сервера пробросил статические бинарники. Почему-то при выполнении deploy на каждом сервере вначале писало следующее:

WARNING: couldn't save point(s) as known (ZP cert outdated)

при котором, насколько я помню, создавались не все файлы и последующие import не работали. После того, как я какое-то время ждал и повторял процедуру (отчищая создаваемые файлы) команда отрабатывала спокойно (как на домашней машине) и в дальнейшем все работало.

В 2 часа ночи я как-то поленился лезть в исходники и узнавать что эта строка значит. Не знаю связано ли с этим то, что время (seconds since the Epoch) на моих серверах и домашнем компьютере отличается на несколько минут.

P.S. Линуксом пользуюсь лишь 4 года, а сервера себе взял лишь пару месяцев назад, поэтому досконального понимания того, что я делаю, у меня нет.

parent From Andrey V. Stolyarov profile Fri Jun 27 08:55:17 2025 UTC pencil

userpic

Re: Поднял свои сервера для проверки NAT

ZP cert outdated означает буквально, что у вас там локально в базе ($HOME/.fedanet/keys/...) есть сертификат для zero point той же ноды, который новее (по его тайммарку), нежели тот, который вы пытаетесь сохранить. С текущим временем оно, насколько я помню, ничего не сравнивает, только разные сертификаты между собой. Но вот обновление (перегенерация) сертификата для zero point влечёт, что вполне естественно, недействительность всех сертификатов, подписанных подписью этого вашего zero point — того, который старый.

Ну, во всяком случае так должно быть :-) За отсутствие багов в этом коде я никак не поручусь.

From Anonymous (unverified) Thu Jun 26 21:22:10 2025 UTC pencil

Возможно опечатка в NC_SERVERS

NC_SERVERS, 183 строка: > usere specify ports

parent From Andrey V. Stolyarov profile Fri Jun 27 08:56:32 2025 UTC pencil

userpic

Re: Возможно опечатка в NC_SERVERS

Есть такое, спасибо.

From Parthen (unverified) Wed Jun 25 19:08:43 2025 UTC pencil

Поздравляю!

И вдогонку:

NC_SERVERS, 179 строка:

>theserver in any other way

parent From Andrey V. Stolyarov profile Wed Jun 25 19:24:07 2025 UTC pencil


pencil

пояснение


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

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2025