[О блоге] [наверх] [пред] [2022-01-16 16:14:55+03:00] [e9cb4aa824f5675c18230ece4f384a463cc70439]
Темы: [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;;"

    [оставить комментарий]
    комментарий 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
    
    комментарий 1:
    From: Sergey Matveev
    Date: 2022-01-17 18:09:55Z
    
    *** kmeaw [2022-01-17 00:03]:
    >Может быть TCP из gvisor.dev/gvisor/pkg/tcpip ?
    
    Спасибо большое за наводку! Обязательно посмотрю можно ли им заменим μTP.
    
    комментарий 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. Так что наверное перейду на него, хотя ещё и замеры
    производительности надо сделать (ну чтобы оно вдруг не регрессировало
    сильно).