This is meant to be supplementary post to the dn42 wiki articles on how to get started and provide a more high level overview on the required resources:
Why join dn42?
If you are interested in experimenting with internet technologies such as BGP or DNS at a lower level, you can do just that in dn42.
Requirements
You should have:
- a server that is running with a reasonable uptime (ideally 24/7 with a stable internet connection)
- the ability to create network tunnels to other servers
- preexisting knowledge and the motivation to learn about and set up: IP forwarding, BGP, IGP, …
How do I register my resources?
Before you can get your first BGP peers, you need to create a pull request to the dn42 registry. For that, create the following objects:
- mntner
- person
- aut-num
- inet6num / (inetnum)
- route6 / (route)
Optionally, you can also register a domain by creating a dns object. Refer to the wiki for more information: https://dn42.cc/wiki/howto/getting-started/#dns-and-domain-registration
Note: it is possible to run a single stack IPv6 network in dn42! There are more IPv6 routes than IPv4 announced currently.
For more examples on how registry objects can look, refer to the wiki https://dn42.cc/wiki/howto/getting-started/#fill-in-the-registry and existing registry objects. Also, see the registry schema.
Not all properties listed here are required for the objects, but I recommend including them anyways.
mntner
Registry path: data/mntner
The name of the mntner MUST be all uppercase and end in -MNT. Example: FOO-MNT
mntner: Name of your mntner
mnt-by: Name of the mntner maintaining this mntner object (this is yourself usually)
admin-c: Name of the person who is the administrator contact
tech-c: Name of the person who is the technical contact
auth: An authentication for verifying your changes, you can use for example PGP (pgp-fingerprint <fingerprint>) or ssh (ssh-type <key>)
source: DN42
person
Registry path: data/person
The name of the person object / nic-hdl MUST be all uppercase and end in -DN42. Example: FOO-DN42
person: Name of the person (doesn't have to be the same as the file name)
nic-hdl: Name of the person (object)
mnt-py: Name of the mntner
e-mail: The email address you are reachable under
source: DN42
Note: for more contact options use the contact field and the following syntax: <medium>:<handle>
, for example for XMPP:
contact: xmpp:<jid>
aut-num
Registry path: data/auth-num
Note: You should allocate your AS in the 4242420000-4242423999 range, the name of the file and content of the aut-num field should be in the format of AS<number>
.
aut-num: Your AS number
as-name: The name of the AS (doesn't have to be the same as the file name)
mnt-by: Name of the mntner
admin-c: Name of the person who is the administrator contact
tech-c: Name of the person who is the technical contact
source: DN42
inet6num
Registry path: data/inet6num
The name of this file should is in the format of <IP address>_<block size>
.
inet6num: <First address of the IP block> - <Last address of the IP block>
cidr: The IP block in CIDR notation
mnt-by: The name of the mntner
admin-c: Name of the person who is the administrator contact
tech-c: Name of the person who is the technical contact
netname: The name of the IP block (doesn't have to be the same as the file name)
status: ASSIGNED
source: DN42
route6
Registry path: data/route6
The name of this file is in the format of <IP address>_<block_size>
route6: The IP block in CIDR notation
origin: The AS number this route is originating from
max-length: IP block size
mnt-by: The mntner of this object
admin-c: Name of the person who is the administrator contact
tech-c: Name of the person who is the technical contact
source: DN42
It is RECOMMENDED that IPv6 prefixes conform to RFC4193.
dn42regsrv can be used to generate a random ASN, IPv6 and IPv4: https://explorer.dn42.dev/free
The syntax for inetnum / route objects is very similar to inet6num / route6, but as stated previously: it is possible to run an IPv6 only dn42 network.
Creating a pull request to the registry
There are multiple scripts in the registry to help with creating the final commit:
./fmt-my-stuff <your mntner>
- formats your objects./check-my-stuff <your mntner>
- validate that your conform to the registry schema./check-pol origin/master <your mntner>
- validate that your objects don’t violate the policy./squash-my-commits
- squashes your commits into one./sign-my-commit
- signs your commit using either your provided ssh or pgp key
The pull request should contain a single, signed commit.
The commit can be signed using for example:
- git (requires git >= 2.34.0 for ssh):
git commit --amend --no-edit -S
- the script (ssh):
./sign-my-commit --ssh --key /path/to/private/key --push <Your-MNT>
- the script (pgp):
./sign-my-commit --pgp --push <Your-MNT>
Getting your first peers
After your pull request is merged, you can get your first peers. I recommend using the peer finder to find people near your server or peer with lemon and my network :)
For further information on tunnels, BGP routing daemons etc. check the wiki:
- https://dn42.cc/wiki/howto/tunnel/ - the most commonly used tunnel in dn42 is WireGuard
- https://dn42.cc/wiki/howto/routing-daemons/ - I recommend bird 2 for beginners
Also check out #dn42 on the hackint.org IRC for further help.