Register
In order to get started, you need to create several objects in the NX3 registry: https://git.brettb.xyz/nx3/registry.
The registry is a git repository. You create objects by forking the main repository, making your changes, and then submitting a pull request for review.
Editing the git repository requires a Linux/Mac computer due to the characters used in file names. Windows Subsystem for Linux *may* work but is not officially supported.
When filling out objects in the registry, refer to the schema to speed up your review process.
When submitting your pull request, you must squash your changes into a single commit.
The registry includes a couple of scripts in order to help check your request:
fmt-my-stuff <FOO>-MNT: Automatically fixes minor formatting errorscheck-my-stuff <FOO>-MNT: Validates your objects against the registry schema
*Do not use the gitea web interface to edit files, doing so will create a large number of commits and prevents the running of registry scripts.*
Registry Example
This example assumes that your name is <FOO>, and are part of an organization called <ORG-FOO>. *Organization objects are not required if you are registering as an individual*. Please make sure you replace these with appropriate values.
We will create several objects as a part of this example:
- maintainer objects
- person objects, which describe people or organizations and can provide contact information
- and resource objects (AS Number, IP Subnet, DNS Zone, etc.)
Create a Maintainer Object
Create a mntner object in data/mntner/ named <FOO>-MNT. It will be used to edit all objects that are under your responsibility.
- Use
<FOO>-MNTasmnt-by
Example data/mntner/FOO-MNT:
mntner: FOO-MNT
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
source: NX3
Create Person Objects
Create a person object in data/person/ for yourself (not your organization).
- Use something like
<FOO>-NX3as yournic-hdl, ensuring it ends with-NX3 - Ther
personfield is a little more freeform, you can use your nickname or real name here. - Provide an email
- You can also provide other forms of contact
- Don't forget to set
mnt-byto<FOO>-MNT
Example data/person/FOO-NX3
person: John Doe
e-mail: john.doe@example.com
nic-hdl: FOO-NX3
mnt-by: FOO-MNT
source: NX3
Create Organisation Objects
Organizations are not required if you are joining NX3 as an individual
See how to create an organisation
If you intend to register resources for an organisation, you must also create an organisation object.
Example data/organisation/ORG-FOO
organisation: ORG-FOO
org-name: Foo Organisation
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
source: NX3
Creating Resource Objects
Throughout the rest of these examples, you should use:
admin-c: <FOO>-NX3andtech-c: <FOO>-NX3on your resources.admin-c: <FOO>-NX3,tech-c: <FOO>-NX3, andorg: <ORG-FOO>on your organisation resources.mnt-by: <FOO>-MNTon all objects.
Register an AS Number
To register an AS number, create an as-name object in data/aut-num/.
Your AS number can be arbitrarily chosen in the NX3 ASN space.
The online NX3 Registry includes a page for finding free ASN. For a list of currently assigned AS numbers browse the registry data, and the explorer.
Example: data/aut-num/AS4266033999
aut-num: AS4266033999
as-name: AS-FOO-NX3
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
source: NX3
Register a Network Prefix
IPv6
To register an IPv6 prefix, you create an inet6num object. NX3 uses the ULA range. A single /48 allocation is typical, and will likely provide more than enough room for all devices you wish to connect.
Using a fully random prefix is recommended; finding a conflict with other networks and needing to renumber your own network is no fun. If you wish to generate some ULA prefixes:
Example: data/inet6num/fd35:4992:6a6d::_48
inet6num: fd35:4992:6a6d:0000:0000:0000:0000:0000 - fd35:4992:6a6d:ffff:ffff:ffff:ffff:ffff
cidr: fd35:4992:6a6d::/48
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
status: ASSIGNED
source: NX3
IPv4
If you also want to register an IPv4 network prefix, simply create an inetnum object. You may choose your network prefix in one of the currently open netblocks. You can get a list of unassigned subnets on the following site. Please mind the recommended allocation sizes.
If there are no free subnets of the size you want, you may split a larger block as required.
Please check the registry to make sure no-one else has allocated the same prefix. Please ensure that the parent block has an 'open' policy.
Think before you allocate.
If you need a /24 or larger, be prepared to justify your network needs.
Example: data/inetnum/172.24.150.0_27
inetnum: 172.24.150.0 - 172.24.150.31
cidr: 172.24.150.0/27
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
status: ASSIGNED
source: NX3
Create Route Objects
If you plan to announce your prefixes in the NX3 network, you will need to create a route6 object for ipv6 prefixes, and a route object for ipv4 prefixes. This information is used for ROA checks. If you skip this step, your network will likely get filtered by most major peers. Checking ROA will also prevent (accidental) hijacking of other people's prefixes.
Example: data/route6/fd35:4992:6a6d::_48
route6: fd35:4992:6a6d::/48
origin: AS4266033999
max-length: 48
mnt-by: FOO-MNT
source: NX3
Example: data/route/172.24.150.0_27
route: 172.24.150.0/27
origin: AS4266033999
max-length: 27
mnt-by: FOO-MNT
source: NX3
DNS and Domain Registration
(Optional)
The updating of the NX3 zone is currently a manual process. A pull request with a DNS update will not be accepted until the zone has been updated.
To register a domain name, create a dns object in the data/dns directory. Domain names and nserver attributes must be lowercase.
Example: data/dns/foo.nx3
domain: foo.nx3
admin-c: FOO-NX3
tech-c: FOO-NX3
mnt-by: FOO-MNT
nserver: ns1.foo.nx3 172.24.150.1
nserver: ns1.foo.nx3 fd35:4992:6a6d:53::1
nserver: ns2.foo.nx3 172.24.150.2
nserver: ns2.foo.nx3 fd35:4992:6a6d:53::2
source: NX3
Get Some Peers
In NX3, there is no distinction between peering and transit. In most cases, everybody serves as an upstream provider to all of their peers. If you have very slow connectivity to the internet, you may want to avoid providing transit between peers. For the sake of sane routing, please attempt to peer with people on the same continent to avoid inefficient routing. You can also look into Bird communities if you are using Bird.
Establish Connectivity
Establish Tunnels
Unless your peers are directly on the same network, you must establish tunnels. Choose anything you like: WireGuard, OpenVPN, GRE, GRE + IPSec, etc.
You may wish to check out the documentation for WireGuard for a quick start.
Run a Routing Daemon
You'll need a routing daemon that speaks BGP with your peers. The network often runs Bird or FRR, but you may use anything.
You can find documentation on setting up Bird here.