Subject: Re: [nncp-devel] Маршрут через несколько узлов

From: Sergey Matveev <[email-masked]>
Date: Tue, 3 Mar 2020 22:02:34 +0300

Приветствую!

*** Шелепов Михаил [2020-03-03 20:04]:
>Возможен ли впринципе маршрут через несколько узлов?
>Возможно это как то "хитро" в конфиге настраивается?

Должно без проблем работать. Вот проверил с чистого листа. Создаём
четыре ноды, чтобы при отправке с node1 на node4, пакет прошёл через
node2 и node3:

    % nncp-cfgnew -version
    NNCP version 5.3.3 built with go1.14
    % mkdir -p node{1,2,3,4}/spool
    % for n (node{1,2,3,4}) nncp-cfgnew > $n/cfg
    % for n (node{1,2,3,4}) { echo $n ; grep -A 5 "    self:" $n/cfg }
    node1
        self: {
          id: DHZBCXBWNP52DLYWKIV6Z5PWMXUUZ4XLUNFORQF6WDBXHIAJP3VQ
          exchpub: CPNHRIYUMQKLKO5HV4GI2PYSW25TLNQGH3J7KIYBOC7QZN42TNDA
          signpub: G4LS73YJRWP2XYNJFGRJQWUTFKXVJYNZX4ZQS56NPKRRG5NJ7BIQ
          noisepub: HBQW4SQKHGEDOULHUCPJKBC7SLVZCH2VK5JRFERFM6W7QJZGXYUQ
    node2
        self: {
          id: UU5K3KQS6ZMS5WRH7OSCIDK4R7W3G34OLQ3XKL7J7YFXOJEU4H3Q
          exchpub: CYOPRHXB554ABALACFWCKXZKCSG64F52KJF52HDUZMU7DJKOGUIA
          signpub: QU3GHGIQ3UFXAGNWWD7FGI7KEHUEBGOSI7DBEXXIYQ7VFHSQL2QQ
          noisepub: J2HJPI4IPRSPV4NGS4BO6EOSLL4MQQOUUKDSFAG4JBM6EZGRJNJA
    node3
        self: {
          id: XOH2WGVI4JFBU2KUQ4G5PGJAIGOXMWEXGQKHKZSXKIAZBYMEU7LA
          exchpub: F4CENEZBMW2ZAZE67RN32FJI2URQC3AO67YIIMRJ3K7XBUOXTFNQ
          signpub: XZVRRK2CHN3XWHOXR5POMJ2ONGETB2CFEA6PU7BWRSOPXLTGDDIQ
          noisepub: AKYY3UF6WFYZIUW72YLV6JFHRX6LGBZTYUUCMUUPPISQ65T53JEA
    node4
        self: {
          id: ME7L2KHK5YAL4TBSTTBXEQWFRKQOM4NROS6NQEQCW57YFI6FSEPQ
          exchpub: BHB5VTR4MM6K2YYC5H55MYLU4CYMDB3NL3UUMSEDQOWVZNMHJZLQ
          signpub: VZG3FOI2KMCRZ4NNBGPKB6RKGVP6KXZXXS3DFHPLBJON2RVIEC4A
          noisepub: 2BE2CVAPL7GNRD4MRWBY6TCTOSZ7NLKUF5GEI6JXEQEUOOK26NOA

в конфиге каждой добавляем знания о других. node4 не нужно (не
обязательно) знать о node2, как и node2 о node4:

    % for n (node{1,2,3,4}) { echo $n ; grep "^    \w\+: {" $n/cfg }
    node1
        self: {
        node2: {
        node3: {
        node4: {
    node2
        self: {
        node1: {
        node3: {
    node3
        self: {
        node1: {
        node2: {
        node4: {
    node4
        self: {
        node1: {
        node3: {

Отправляем nncp-exec исполняемый файл на node4. Директорию shared
используем для обмена через nncp-xfer для простоты:

    % export NNCPCFG=$(pwd)/node1/cfg NNCPSPOOL=$(pwd)/node1/spool
    % nncp-file -via node2,node3 =nncp-exec node4:
    2020-03-03T18:24:56Z Tx nncp-exec 3.4 MiB/3.4 MiB 100% (127 MiB/sec)
    2020-03-03T18:24:56Z File /usr/local/bin/nncp-exec (3.4 MiB) transfer to node4:nncp-exec: sent
    % nncp-stat
    node2
            nice:   B | Rx:        0 B,   0 pkts | Tx:    3.4 MiB,   1 pkts
    node3
    node4
    self
    % mkdir shared
    % nncp-xfer -mkdir shared
    2020-03-03T18:35:56Z Tx 7XCULYXUVRKEAOTL..LJ6Y7JETNNHLOQXQ 3.4 MiB/3.4 MiB 100% (1.7 GiB/sec)
    2020-03-03T18:35:56Z Packet transfer, sent to node node2 (3.4 MiB)

Принимаем пакет, будучи node2, обрабатываем, видим что это transitional,
отправляем дальше:

    % export NNCPCFG=$(pwd)/node2/cfg NNCPSPOOL=$(pwd)/node2/spool
    % nncp-xfer shared
    2020-03-03T18:36:23Z Rx shared/UU5K3KQS6..LJ6Y7JETNNHLOQXQ 3.4 MiB/3.4 MiB 100% (384 MiB/sec)
    2020-03-03T18:36:23Z Packet transfer, received from node node1 (3.4 MiB)
    % nncp-toss
    2020-03-03T18:36:29Z Tx trns XOH2WGVI4JFBU2KU..KZSXKIAZBYMEU7LA 3.4 MiB/3.4 MiB 100% (474 MiB/sec)
    2020-03-03T18:36:29Z Transitional packet to node3 (3.4 MiB) (nice 224): sent
    2020-03-03T18:36:29Z Got transitional packet from node1 to node3 (3.4 MiB)
    % nncp-xfer -mkdir shared
    2020-03-03T18:36:35Z Tx XBFMAVJ4V2NKITUR..JST2YEAZVNGWKKYQ 3.4 MiB/3.4 MiB 100% (2.4 GiB/sec)
    2020-03-03T18:36:35Z Packet transfer, sent to node node3 (3.4 MiB)

аналогично на node3:

    % export NNCPCFG=$(pwd)/node3/cfg NNCPSPOOL=$(pwd)/node3/spool
    % nncp-xfer shared
    2020-03-03T18:36:47Z Rx shared/XOH2WGVI4..JST2YEAZVNGWKKYQ 3.4 MiB/3.4 MiB 100% (383 MiB/sec)
    2020-03-03T18:36:47Z Packet transfer, received from node node2 (3.4 MiB)
    % nncp-toss
    2020-03-03T18:39:00Z Tx trns ME7L2KHK5YAL4TBS..QEQCW57YFI6FSEPQ 3.4 MiB/3.4 MiB 100% (410 MiB/sec)
    2020-03-03T18:39:00Z Transitional packet to node4 (3.4 MiB) (nice 224): sent
    2020-03-03T18:39:00Z Got transitional packet from node1 to node4 (3.4 MiB)
    % nncp-xfer -mkdir shared
    2020-03-03T18:39:32Z Tx 52H7AL4WZE76TDGY..XDQ5B6ZVL4DEPCQA 3.4 MiB/3.4 MiB 100% (2.3 GiB/sec)
    2020-03-03T18:39:32Z Packet transfer, sent to node node4 (3.4 MiB)

на node4 добавляю incoming: /tmp в node1 секцию и принимаю файл:

    % export NNCPCFG=$(pwd)/node4/cfg
    % nncp-xfer shared
    2020-03-03T18:39:46Z Rx shared/ME7L2KHK5..XDQ5B6ZVL4DEPCQA 3.4 MiB/3.4 MiB 100% (381 MiB/sec)
    2020-03-03T18:39:46Z Packet transfer, received from node node3 (3.4 MiB)
    % nncp-toss
    2020-03-03T18:40:33Z Rx file 52H7AL4WZE76TDGY..XDQ5B6ZVL4DEPCQA 3.4 MiB/3.4 MiB 100% (788 MiB/sec)
    2020-03-03T18:40:33Z Got file nncp-exec (3.4 MiB) from node1
    % sha1 nncp-exec =nncp-exec
    SHA1 (nncp-exec) = 58c78223617829bb1fb99c0cfd3f2c9a66a39f30
    SHA1 (/usr/local/bin/nncp-exec) = 58c78223617829bb1fb99c0cfd3f2c9a66a39f30

Чтобы не указывать каждый раз -via, можно прописать в секции для node4
вот такое:

    via: ["node2", "node3"]

и отправлять без указания -via: nncp-file =nncp-exec node4:

Но при обработке транзитных пакетов, при которой создаются исходящие к
другим нодам, via опция в конфиге не учитывается, если что.

-- 
Sergey Matveev (http://www.stargrave.org/)
OpenPGP: CF60 E89A 5923 1E76 E263  6422 AE1A 8109 E498 57EF