What is NNCP?
NNCP lets you securely send files, or request remote execution, between systems. It uses asynchronous communication, so the source and destination need never be online simultaneously. NNCP can route requests via intermediate devices – other NNCP nodes, USB sticks, tapes, radios, phones, cloud services, whatever – leading to a network that is highly resilient and flexible. NNCP makes it much easier to communicate with devices that lack Internet connectivity, or have poor Internet.
NNCP is to UUCP what ssh is to telnet; NNCP is an Encrypted, authenticated, onion-routed version of UUCP!
According to the NNCP documentation, NNCP is intended to help build up small size ad-hoc friend-to-friend (F2F) statically routed darknet delay-tolerant networks for fire-and-forget secure reliable files, file requests, Internet email and commands transmission. All packets are integrity checked, end-to-end encrypted, explicitly authenticated by known participants public keys. Onion encryption is applied to relayed packets. Each node acts both as a client and server, can use push and poll behaviour model. Also there is multicasting area support.
Over NNCP, you can run email, Usenet, web downloading services, and more. NNCP’s use cases and integrations pages will give you ideas!
A tool for small technology, privacy, and self-resilience.
See more about NNCP and download it at https://nncp.mirrors.quux.org/.
Learning about NNCP
Here are some materials for you:
- My page NNCP Concepts is a great next step in learning about NNCP.
- My blog post Rehabilitating Asynchronous Communication with NNCP: A Cross Between Tor, ssh, and UUCP gives an introduction to NNCP as well as an introduction to the concepts and problems it helps solve.
- I have a much longer blog series about NNCP, which includes examples of integrating it with Exim for email, ZFS for backups, git for syncing, Syncthing for meshing and transport, etc.
- Recovering Our Lost Free Will Online: Tools and Techniques That Are Available Now locates NNCP amid a larger universe of technologies with similar goals.
- Ideas for NNCP Projects
- Dead USB Drives Are Fine: Building a Reliable Sneakernet
- NNCP Concepts
- Getting Started with NNCP
- quux.org NNCP public relay
- quux.org Usenet NNTP and NNCP peer
- using NNCP with sudo
- Tunneling NNCP over other transports
- Using NNCP at SDF
- NNCP in Docker
- NNCP over Yggdrasil
- Installing NNCP on a Raspberry Pi: Installing Debian Backports on Raspberry Pi
- NNCP on Android
- Maintaining NNCP
- Using Filespooler over NNCP
Links to this note
In some cases, you may want to use Filespooler to send the data from one machine to many others. An example of this could be using gitsync-nncp over Filespooler where you would like to propagate the changes to many computers.
We’re going to cover two different sudo situations:
Filespooler lets you request the remote execution of programs, including stdin and environment. It can use tools such as S3, Dropbox, Syncthing, NNCP, ssh, UUCP, USB drives, CDs, etc. as transport; basically, a filesystem is the network for Filespooler. Filespooler is particularly suited to distributed and Asynchronous Communication.
Email is one of the most common examples of Asynchronous Communication people are familiar with today. It is a store-and-forward approach which is tolerant of temporary disruptions to services and supports multiple hops.
One of several single-board computers. The Raspberry Pi is an ARM computer that typically sells for less than $50. Generally is runs a derivative of Debian.
Syncthing is a serverless, peer-to-peer file synchronization tool. It is often compared to Dropbox. However, unlike Dropbox, there is no central server with Syncthing; your devices talk directly to each other to sync data. Syncthing has various effective methods for firewall traversal, including public relays for the worst case. All Syncthing traffic is fully encrypted and authenticated.
This page is intended to describe how to run Debian’s backports on a Raspberry Pi. Backports is Debian’s way of building newer packages for its stable releases. I intend this page specifically to help people run the Debian packages for NNCP and Yggdrasil, both of which are maintained by me, John Goerzen.
Usenet is sometimes said to be the world’s oldest social network. Since 1980, Usenet has been a massive, global discussion system. Participants can read and post messages (called articles) in discussion forums (called newsgroups). Unlike web forums, Usenet newgroups are available from thousands of independently-operated servers worldwide (instead of just one particular site). You can also use the client of your choice to access them.
The care and feeding of an NNCP installation.
Asynchronous communication is communication between two endpoints that doesn’t have to happen in real time or near-real-time.
Anything that uses encryption to keep content away from spying eyes.
This page gives you references to software by John Goerzen.
It seems that lately I’ve written several shell implementations of a simple queue that enforces ordered execution of jobs that may arrive out of order. After writing this for the nth time in bash, I decided it was time to do it properly. But first, a word on the why of it all.
To use NNCP on Android, we need a way to build and run it. The easiest option for that is Termux.
This page describes the basic installation and configuration of NNCP.
These sites are hosted on the complete.org server. Some are hosted with resources donated to non-profit organizations.
One frustration people sometimes have with ssh or NNCP is that they’d like to pass along a lot of metadata to the receiving end. Both ssh and nncp-exec allow you to pass along command-line parameters, but neither of them permit passing along more than that. What if you have a whole host of data to pass? Maybe a dozen things, some of them optional? It would be very nice if you could pass along the environment.
According to the NNCP documentation, NNCP is intended to help build up small size ad-hoc friend-to-friend (F2F) statically routed darknet delay-tolerant networks for fire-and-forget secure reliable files, file requests, Internet Email and commands transmission. All packets are integrity checked, end-to-end Encrypted, explicitly authenticated by known participants public keys. Onion encryption is applied to relayed packets. Each node acts both as a client and server, can use push and poll behaviour model. Also there is multicasting area support.
NNCP is a powerful tool for building Asynchronous Communication networks. It features end-to-end Encryption as well as all sorts of other features; see my NNCP Concepts page for some more ideas.
Usenet, of course, originally ran over UUCP in quite a few cases. Since NNCP is quite similar to UUCP – in fact, you can map UUCP commands to NNCP ones – it is quite possible, and not all that hard, to run Usenet over NNCP. In fact, in a number of ways, it works better than Usenet over UUCP!
You can use NNCP at SDF Public Access Unix!
gitsync-nncp is a tool for using Asynchronous Communication tools such as NNCP or Filespooler, or even (with some more work) Syncthing to synchronize git repositories.
UUCP is a system for exchanging data and requesting remote execution. It dates back to 1979, and was primarily used over modems using telephone landlines for most of its days of popularity. It is an Asynchronous Communication system, which transmits data from one machine to the next on the way to its destination. Each intermediate node may store the data before passing it on to the next.
When things are difficult – maybe there’s been a disaster, or an invasion (this page is being written in 2022 just after Russia invaded Ukraine), or maybe you’re just backpacking off the grid – there are tools that can help you keep in touch, or move your data around. This page aims to survey some of them, roughly in order from easiest to more complex.
Inspired by several others (such as Alex Schroeder’s post and Szczeżuja’s prompt), as well as a desire to get this down for my kids, I figure it’s time to write a bit about living through the PC and Internet revolution where I did: outside a tiny town in rural Kansas. And, as I’ve been back in that same area for the past 15 years, I reflect some on the challenges that continue to play out.
Old technology is any tech that’s, well… old.
This page describes some basic concepts of NNCP.
“Airgap” refers to a computer (or network) that is physically disconnected from a larger network and the Internet.
“OK,” you’re probably thinking. “John, you talk a lot about things like Gopher and personal radios, and now you want to talk about building a reliable network out of… USB drives?”
NNCP has built-in support for running over TCP, with nncp-daemon and nncp-call/caller. NNCP’s own use cases page talks about various use cases for NNCP. Some of them, such as the no link page, cover use of nncp-xfer; others, such as the one-way broadcasting page go over nncp-bundle.
I sometimes see people read about NNCP and wonder “This sounds great! But… what can I do with it?” This page aims to answer those questions.
I loaded up this title with buzzwords. The basic idea is that IM systems shouldn’t have to only use the Internet. Why not let them be carried across LoRa radios, USB sticks, local Wifi networks, and yes, the Internet? I’ll first discuss how, and then why.
This started out at a post on my blog. This edited version is intended to be kept more up-to-date.
Here are some (potentially) interesting topics you can find here:
Probably everyone is familiar with a regular VPN. The traditional use case is to connect to a corporate or home network from a remote location, and access services as if you were there.