Andrey Stolyarov

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

UPD (25.03.2026): выложена багфиксная версия 0.0.51

Опубликован очередной тарбол исходников FEDAnet, с номером версии 0.0.50. Я научил, наконец, эти fedaservы обмениваться сертификатами нод и проверять хеши, причём так, чтобы непосредственно взятием хеша могла заниматься машина, сидящая хоть за десятью NATами. Это может быть, например, домашняя машина, на которой нодмастер гоняет браузер — ну, он же где-то браузер точно гоняет :-) В принципе даже не обязательно иметь такую машину в каждой ноде, я вот, например, соответствующий инстанс запустил (через fedaproxy), у него теперь каждый может спросить, не знает ли он такую-то ноду, и каждый может ему представить свою ноду, а он её запомнит. Можно это рассматривать как автоматизированную поддержку коллекции сертификатов нод. Если свой такой не поднимать, единственный недостаток тут — что представлять свою ноду другим придётся вручную; это тоже возможно, в управляющей консоли (которая fedactl) появилась соответствующая команда. Если кратко, то реализованы три новых типа peer'ов:

  • trustncc — такой peer, к которому можно сходить с вопросом "не знаешь ли ты такую-то ноду", и если он знает, то пришлёт её ключевую инфу, подписанную его собственным ключом; идея в том, что мы ему доверяем настолько, что готовы принять от него информацию о ноде, не проверяя её хеш;
  • introducer — та самая "мощная машина", к которой пиры одной с ней ноды (это важно) могут обратиться с двумя интересными просьбами: первая — "сходи вон туда, представь там нашу ноду", а вторая — "мне тут прислали ключевую информацию незнакомой ноды, проверь её для меня plz" (в этом случае, если проверка пройдена, такой peer сохраняет у себя сертификат только что проверенной ноды, так что если кто-то к нему придёт как к trustncc, он инфу отдаст);
  • certhub — это такая машина, про которую нам известно, что она принимает (и проверяет) информацию о новых нодах; технически это значит, что, когда к нам кто-то придёт незнакомый, мы ему можем посоветовать сходить туда представить свою ноду, подразумевая, что когда он там представится, мы об этом узнаем, например, сходив туда же уже как к trustncc, и он тогда сможет с нами связаться.

В конфигурационном файле появилось три новых опции: allow_nodehash yes разрешает (вообще, так сказать, глобально) данному инстансу считать хеши, intro_issue yes разрешает инициировать процесс представления ноды в роли клиента (что обычно обходится в четыре вычисления хешей от данных, предложенных сервером — это такая защита от DoSа), и intro_accept yes разрешает инстансу принимать представления в роли сервера (для этого нужна заранее сгенерённая таблица задач и ответов a.k.a. challenge-response table, та самая, которую feda-ng генерирует по флажку -t и с которой потом можно работать с помощью программы feda-ct).

Технические подробности по ссылке выше, а также в файлах doc/serv.conf и doc/peer_types.txt. Если будут вопросы — задавайте (лучше там, но можно и здесь), постараюсь ответить.

К сожалению, конкретные соединения всё ещё приходится прописывать вручную, но теперь хотя бы новому участнику сети можно связаться с существующими нодами без ручного вмешательства их нодмастеров; ручной работы потребует только добавление новой ноды в списки. Чтобы сеть начала функционировать (в том числе расширяться) вообще без ручных действий, нужно реализовать рассылку широковещательных сообщений, через которую будут работать в том числе анонсы новых нод и изменения их местонахождения. Это как раз следующий этап; если/когда я с ними справлюсь, сеть достигнет функционирующего состояния (видимо, это будет релиз 0.1.00). Только тут есть такой момент, что, чтобы широковещательная рассылка работала, нужно то, на чём она будет работать — то, что обычно зовут бекбоном сети. Строительством этого бекбона можно уже начинать заниматься. Нам нужно, как я это себе представляю, 10-12 работающих нод, живущих на постоянных адресах. Сейчас ноды фактически только так и могут жить, но когда будет рассылка анонсов, нода сможет существовать за NAT'ом, причём если это однопользовательская нода, то даже restricted cone сойдёт. Но бекбон, через который можно будет попасть в сеть тем, кого там раньше не было, в любом случае требует нод, которые сидят на месте и не перемещаются то и дело. Вот его давайте уже попробуем построить.

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


From feriman profile Fri Mar 27 07:51:18 2026 UTC pencil

userpic

Уточнение

Видимо, имелось в виду feda-ng с ключом -t.

node-ng генерирует по флажку -f

parent From Andrey V. Stolyarov profile Fri Mar 27 10:30:36 2026 UTC pencil

userpic

Re: Уточнение

Исправил, спасибо.

parent From feriman profile Fri Mar 27 13:23:16 2026 UTC pencil

userpic

Re: Re: Уточнение

Пожалуйста. Только не node-ng, а feda-ng.

parent From Andrey V. Stolyarov profile Fri Mar 27 15:19:52 2026 UTC pencil

userpic

Re: Re: Re: Уточнение

Argh...

Спасибо :-)

From Отец Игорь profile Fri Mar 27 07:17:55 2026 UTC pencil

Не собирается на FreeBSD

Доброго дня, Андрей Викторович!

Решил я ноду поднять на своей ВПС-ке, которая у меня на FreeBSD оформлена. Взял крайний архив с исходниками fedanet 0.51, прочитал README, где очень оптимистично и лаконично указано что коли есть make и gcc - то всё будет отлично. Ну и ещё конечно указано что делать в случае если не linux у меня.

Короче: OS - FreeBSD 14.4 amd64 gcc - отсутствует, есть llvm/clang ( cc -v: FreeBSD clang version 19.1.7 ) make - MAKE_VERSION = 20251111

Итого, при подаче заветной команды make - выдаётся ошибка. Прошу помочь адаптировать под фрю, это в любом случае в плюс будет, ибо система эта Богоугодна и пользователи её здравы :)

В src/Makefile я заменил gcc на cc, вот в итоге вывод:

userx@s811010:~/fedanet-0.0.51 $ make
cd src && make
make[1]: /usr/home/userx/fedanet-0.0.51/src/Makefile:108: warning: Invalid character " " in variable name "wildcard *.c"
make[1]: /usr/home/userx/fedanet-0.0.51/src/Makefile:114: Invalid line "ifneq (clean, $(MAKECMDGOALS))", expanded to "ifneq "
        in make[1] in directory "/usr/home/userx/fedanet-0.0.51/src"
make[1]: /usr/home/userx/fedanet-0.0.51/src/Makefile:116: Invalid line "endif"
        in make[1] in directory "/usr/home/userx/fedanet-0.0.51/src"
make[1]: Fatal errors encountered -- cannot continue
make[1]: stopped making "all" in /usr/home/userx/fedanet-0.0.51/src
*** Error code 1

Stop.
make: stopped making "default" in /usr/home/userx/fedanet-0.0.51

parent From Andrey V. Stolyarov profile Fri Mar 27 09:19:26 2026 UTC pencil

userpic

Re: Не собирается на FreeBSD

1) используйте gmake (GNU make). "Адаптировать" makefiles под posix make невозможно, их придётся полностью переписывать.

2) за написание слова "бог" с заглавной буквы один раз предупреждаю, потом в бан навсегда.

parent From Отец Игорь profile Fri Mar 27 10:39:06 2026 UTC pencil

Re: Re: Не собирается на FreeBSD

Жоский вы всё таки тип, Андрей Викторович :)

Используя gmake прошло дальше, но тоже подохло. Судя по логу какая-то опция для дебага/диагностики, но я не шибко силён в этом, поэтому сам починить не знаю как.

userx@s811010:~/fedanet-0.0.51 $ gmake
cd src && gmake
gmake[1]: Entering directory '/usr/home/userx/fedanet-0.0.51/src'
echo '#define FEDA_VERSION "'`head -1 Version`'"' > _version.h
echo '#define FEDA_VERSIONID '`tail -1 Version` >> _version.h
cc -fdiagnostics-color=never -fno-diagnostics-show-caret -MM  addrport.c comcryp2.c comcrypt.c feda-ct.c feda-if.c feda-ng.c fedactl.c fedakeys.c fedapref.c fedaserv.c fileutil.c fk_data.c fk_diags.c fk_help.c fk_known.c fk_mastr.c fk_mesg.c fk_point.c fsrv_cfd.c fsrv_cfg.c fsrv_con.c fsrv_crt.c fsrv_dia.c fsrv_dst.c fsrv_pad.c fsrv_pir.c fsrv_pxy.c fsrv_rep.c fsrv_rx.c fsrv_sig.c fsrv_tun.c fsrv_txq.c hexdata.c inadrcol.c ip6struc.c keyutils.c kfiles.c kfschems.c knowndb.c mastrkey.c message.c natcheck.c nmobfusc.c pointcfg.c servlog.c servtwml.c strargv.c textrec.c textrecx.c treebyte.c twmalloc.c twmalmsg.c txtr_out.c xmonocyp.c xyespwr.c > deps.mk
cc: error: unknown argument: '-fno-diagnostics-show-caret'
cc -fdiagnostics-color=never -fno-diagnostics-show-caret -O0 -Wall -g -I../lib -c feda-ng.c -o feda-ng.o
cc: error: unknown argument: '-fno-diagnostics-show-caret'
gmake[1]: *** [Makefile:49: feda-ng.o] Error 1
gmake[1]: Leaving directory '/usr/home/userx/fedanet-0.0.51/src'
gmake: *** [Makefile:3: default] Error 2

parent From Andrey V. Stolyarov profile Fri Mar 27 11:51:07 2026 UTC pencil

userpic

Re: Re: Re: Не собирается на FreeBSD

> cc: error: unknown argument: '-fno-diagnostics-show-caret'

Ну да, это gcc specific. Задаётся в Makefile в переменной CC. А поскольку вы не на линуксе, надо ещё вырубить linux specific call, а то feda-ng не соберётся (хотя она вам на VPS'ке и не нужна на самом деле, не использовать же VPS для майнинга ключей; но проще заставить её тоже собраться, чем бороться ещё и с этой ошибкой). Вот только я, по ходу, упустил в текущей версии параметр CONF, и хоть бы кто из BSDшников мне на это указал, гм. Так что придётся прямо в CFLAGS добавлять. Итого:

    gmake CC=clang CFLAGS="-O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0"

> Жоский вы всё таки тип

На том стоим.

parent From Отец Игорь profile Fri Mar 27 11:55:51 2026 UTC pencil

Re: Re: Re: Re: Не собирается на FreeBSD

Благодарю за тех.поддержку!

Прошло существенно дальше, но споткнулось снова:

clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c feda-ct.c -o feda-ct.o
clang  feda-ct.o keyutils.o xyespwr.o twmalloc.o ../lib/yespower/libyespower.a -o feda-ct
clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c natcheck.c -o natcheck.o
clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c comcrypt.c -o comcrypt.o
clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c addrport.c -o addrport.o
clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c nmobfusc.c -o nmobfusc.o
clang natcheck.o message.o comcrypt.o keyutils.o addrport.o nmobfusc.o twmalloc.o ../lib/monocypher/libmonocypher.a -o natcheck
clang -O0 -Wall -g -I../lib -DFEDA_NG_SCHED=0 -c feda-if.c -o feda-if.o
feda-if.c:10:10: fatal error: 'linux/if.h' file not found
   10 | #include 
      |          ^~~~~~~~~~~~
1 error generated.
gmake[1]: *** [Makefile:49: feda-if.o] Error 1
gmake[1]: Leaving directory '/usr/home/userx/fedanet-0.0.51/src'
gmake: *** [Makefile:3: default] Error 2
userx@s811010:~/fedanet-0.0.51 $

parent From Andrey V. Stolyarov profile Fri Mar 27 12:09:53 2026 UTC pencil

userpic

Re: Не собирается на FreeBSD

Ага, ну вот с этим я уже не знаю что делать. Что характерно, кто-то ведь fedaserv гоняет на BSD, и вроде пинги к ним ходили нормально, но как feda-if сделать переносимой, никто мне не сказал.

Теоретически можно её просто убрать из Makefile и всё, что связано с созданием tun-интерфейса, делать вручную. Или даже не делать — если, например, на VPSке гонять только ноду (и возможно прокси), а IPv6-е адреса иметь только на пойнтах. Если пойнты будут линуксовые, то Ok. А если там тоже BSD, то от проблемы мы никуда не денемся.

В общем, подождём, пока нам BSDшники что-нибудь умного скажут.

UPD: Впрочем, fedaserv тоже не соберётся, там тоже хидеры из <linux/*> включаются. И ведь вот точно совершенно знаю, что fedaserv как-то под BSD собирали. Ну нету у меня BSD :-( Не на чем попробовать, а в таких условиях что-то в исходниках менять занятие неблагодарное.

parent From Отец Игорь profile Fri Mar 27 12:14:59 2026 UTC pencil

Re: Re: Не собирается на FreeBSD

Андрей Викторович, дать вам доступ на ВПС - не вариант? Чтобы у вас зверёк под рукой для теста был.

parent From Andrey V. Stolyarov profile Fri Mar 27 12:53:06 2026 UTC pencil

userpic

Re: Не собирается на FreeBSD

Вполне себе вариант. Сможете со мной связаться через форму? Я отвечу email'ом. Ну, типа, не здесь же credentials кидать.

From makaki4 profile Wed Mar 25 15:01:29 2026 UTC pencil

fedakeys -c mypoint lock ./somefile

Когда в планах, чтобы заработало? Как я понимаю, трафик пока что ходит в незашифрованном виде. Хочу, чтоб было иначе, и будет, но не знаю, это сильно далёко еще?

parent From Andrey V. Stolyarov profile Wed Mar 25 18:37:32 2026 UTC pencil

userpic

Re: fedakeys -c mypoint lock ./somefile

> Когда в планах, чтобы заработало?

Честно говоря, я про эти недоделки слегка забыл. Фиг знает, а что, правда надо? :-) Всякие pgp/gpg умеют это всё.

> Как я понимаю, трафик пока что ходит в незашифрованном виде.

Где, в FEDAnet? Ну, он там вообще не так чтоб сильно ходит, но когда ходит — то очень даже в зашифрованном. Прям, я бы сказал, зашифрованнее некуда. Ну то есть если у вас пинги проходят между двумя разными машинами по FEDAnet'овским адресам, то образовавшийся канал связи, возможно, не сильно эффективен по оверхеду и может сильно страдать, если где-то по дороге теряется даже совсем немножко пакетов, но что там всё зашифровано — это, как говорится, что есть — того не отнять.

Всего открытого трафика в FEDAnet — обмен временными (живущими до перезапуска fedaserv'а) публичными ключами. Как обменялись ими — всё, дальше уже ничего открытого. Ну, кроме nonce'ов, но эти в силу своей природы открытые, тут никуда не денешься особо.


pencil

пояснение


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

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

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

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