[about] [index] [prev] [2022-01-16 16:14:55+03:00] [e9cb4aa824f5675c18230ece4f384a463cc70439]
Topics: [nncp]

NNCP в Yggdrasil сети

http://www.nncpgo.org/Yggdrasil.html
https://yggdrasil-network.github.io/
https://github.com/neilalexander/yggmail
NNCP теперь может выступать в качестве клиента сети Yggdrasil! Не
используя никакого стороннего софта, не настраивая сторонних демонов.
Идея, как и зачатки кода, полностью взяты из yggmail.

nncp-daemon может работать в качестве listener ноды принимающей
соединения от других участников, осуществляющей всю маршрутизацию и
вообще работу. nncp-call* могут подключаться к любой Yggdrasil ноде и
связываться с NNCP адресами. Из Yggdrasil используется только
возможность отправки/приёма пакетов: никаких сетевых интерфейсов или
вообще знаний об адресах иметь не нужно. Публичный ключ хоста,
магическим образом становится IPv6 адресом для пакетов μTP транспортного
протокола, достигая целевой ноды без вопросов туннелирования и прочего.
Что приятно тем, что никакой возни с TUN интерфейсами не нужно вообще,
где есть проблемы с не самыми свежими версиями ОС
(883b33f7085a9dfd04fca75b056d0e0b4c3fdf73).

Почему μTP? Я взял из yggmail-а. Видимо, проще на Go нет ничего другого
для реализации транспортного протокола поверх пакетного сокета.
Реализации TCP на pure Go я не видел.

    $ nncp-cfgnew -yggdrasl
    Public: c7274667c6...
    Private: a87d6f98d...

    $ cat >> $NNCPCFG <<EOF
    yggdrasil-aliases: {
      prv: a87d6f98d...
      dst: 3915039ac...
      entrypoint: "tcp://example.org:5400?key=2cd18819...
      bind: tcp://[::]:5400
    EOF

    $ nncp-call dst-node-name "yggdrasil:dst;prv;entrypoint"
    $ nncp-daemon -yggdrasil "prv;bind;;"

[leave comment]
comment 0:
From: kmeaw
Date: 2022-01-16 21:04:49Z

> для реализации транспортного протокола поверх пакетного сокета

Может быть TCP из gvisor.dev/gvisor/pkg/tcpip ?

Примеры использования можно посмотреть вот тут:
https://git.zx2c4.com/wireguard-go/tree/tun/netstack/tun.go#n101
https://git.zx2c4.com/wireguard-go/tree/tun/netstack/examples/http_client.go
comment 1:
From: Sergey Matveev
Date: 2022-01-17 18:09:55Z

*** kmeaw [2022-01-17 00:03]:
>Может быть TCP из gvisor.dev/gvisor/pkg/tcpip ?

Спасибо большое за наводку! Обязательно посмотрю можно ли им заменим μTP.
comment 2:
From: Sergey Matveev
Date: 2022-01-18 15:51:06Z

*** kmeaw [2022-01-17 00:03]:
>Может быть TCP из gvisor.dev/gvisor/pkg/tcpip ?

Не столь тривиально как μTP (что не удивительно, ведь это же типа весь
сетевой стэк), но удалось по TCP связаться поверх PacketConn интерфейса
Yggdrasil. Так что наверное перейду на него, хотя ещё и замеры
производительности надо сделать (ну чтобы оно вдруг не регрессировало
сильно).