Subject: Re: [EN] NNCP 8.1.0 release announcement

From: John Goerzen <[email-masked]>
Date: Mon, 17 Jan 2022 14:23:19 -0600

On Mon, Jan 17 2022, Sergey Matveev wrote:

> *** John Goerzen [2022-01-17 08:55]:
>>TCP would be really convenient!  It would also enable cooperation
>>between NNCP nodes that use the new integrated Yggdrasil code, and NNCP
>>nodes that have a standalone Yggdrasil node and simply listen on a port
>>that's available over Yggdrasil (as I already have been doing here).
>
> No, TCP transport over Yggdrasil packet interface is not related or
> interfere with ordinary TCP in anyway :-). But I see completely no
> problems for nncp-daemon to listen on both "interfaces" (on Yggdrasil
> and ordinary TCP), so will add that possibility too.

I understand.  I think I explained poorly.  One can run NNCP on
Yggdrasil in two ways:

1) By running the Yggdrasil software outside NNCP, and just using
Yggdrasil IPv6 addrs, which will have a TCP connection.

2) By running the embedded Yggdrasil node, which will use uTP.

It would be great if these two modes of operation were compatible.  That
is, if you run a node with the embedded code, you could connect to it
with the traditional (TCP to an IPv6 address) code.

This way, how the other end connects to Yggdrasil is transparent.  All
four types of connection would be possible:

Client with embedded Ygg -> server with embedded Ygg
Client with embedded Ygg -> server with standalone Ygg
Client with standlone Ygg -> server with embedded Ygg
Client with standlone Ygg -> server with standalone Ygg

>>If a change to TCP is imminent
>
> I will definitely add ability to listen simultaneously on TCP as
> previously and optionally on Yggdrasil. But I do not know if will
> succeed in replacing μTP with TCP -- but anyway it is completely
> hidden from the user.

Except, of course, that you can't mix and match the two approaches.  So
if you have someone that is saying "connect to me over NNCP at
yggdrasil:....", you can't just put an IPv6 address in addrs and have it
working using your system's existing Yggdrasil interface.  There may be
reasons a person would want to run Yggdrasil standalone.  For instance:

- Tighter control over connections by using a firewall

- Support for multicast peer detection

- Tighter control over what version of Yggdrasil is used

- Ability to run multiple services under a single key

And of course reasons a person may want to run the embedded Yggdrasil
instance:

- No chance of accidental exposure of ports over the public Yggdrasil IP

- A quick and effective way to bypass the firewall/NAT problem - no need
  to install a separate piece of software on the system

- No need to have a process running as root

Ideally, one should be able to move a keypair from yggdrasil.conf to
nncp.hjson (or the reverse) and keep operating as before with zero
changes to clients.

Thanks for all this!

John