= Access a parallel Internet with OpenNIC

So that computers can find one another on the world wide web, the Internet uses a combination of numbers that serve as a sort of home address for each online computer, and a human-friendly but highly structured "hostname" (such as `example.com`) assigned to each website.
Because users primarily interact with the Internet through website _names_, though, it can be said that the Internet works only because we've all agreed to a standardized naming scheme.
Similarly, the Internet could work _differently_, should enough people decide to use a difference naming scheme.
Should that happen, a group of users could form a parallel Internet, one that exists using the same physical infrastructure (the cables and satellites and other modes of transport that gets data from one place to another) but that uses a different means of correlating hostnames to numbered addresses.
In fact, this already exists, and this article shows you how you can access it.

== Name servers

The term "Internet" is actually a portmanteau of the terms _interconnected_ and _networks_, because that's exactly what it is.
Like neighbourhoods in a city, or cities in a country, or countries on a continent, or continents on a planet, the Internet spans the globe by transmitting data from one home or office network to data centres and server rooms or other home or office networks.
It's a gargantuan task, but not exactly one without precedent.
After all, phone companies had connected the world, and before that telegraph and postal services did the same.

In a phone or mail system, there's a list, whether it's formal or informal, that relates human names to physical addresses.
This used to be delivered to houses in the form of telephone books, a directory of every phone owner within that phone book's city.
Post offices operate differently: they usually rely on the person sending a letter to know the name and address of the intended recipient, but post codes and city names are used to route the letter to the correct post office.
Either way, the need for a standard organization scheme is necessary.

For computers, the https://tools.ietf.org/html/rfc791[IP protocol] describes how addresses on the Internet must be formatted.
The https://tools.ietf.org/html/rfc1035[DNS protocol] describes how human-friendly names may be assigned to and resolved from IP addresses.
Whether you're using IPv4 or IPv6, the idea is the same: when a node (which could be a computer or a gateway leading to another network) joins a network, it is assigned an IP address.
At your option, you may register a domain name with https://www.icann.org/resources/pages/register-domain-name-2017-06-20-en[ICANN], a non-profit organization that helps coordinate website names on the Internet, and register the name as a pointer to an IP address.
There is no requirement that you "own" the IP address.
Anyone can point any domain name to any IP address.
The only restrictions are that only one person can own any one domain name at a time, and the domain name must follow the recognized DNS naming scheme.

Records of a domain name and its associated IP address are entered into a domain name server.
When you navigate to a website in your browser, it quickly consults the DNS network to find what IP address is associated with whatever URL you've entered (or clicked on from a search engine).

== A different DNS

To avoid arguments over who owns what domain name, most domain name registrars charge a fee for domain registration.
The fee is usually nominal, and sometime it's even $0 (for instance, `freenom.com` offers gratis `.tk`, `.ml`, `.gq`, and `.cf` domains on a first come, first serve basis).

For a very long time, there were only a few "top-level" domains, including `.org`, `.edu`, `.com`, and so on.
Now there are a lot more, including `.club`, `.biz`, `.name`, `.international`, and so on.
Letter combinations being what they are, however, there are lots of potential top-level domains that aren't valid, like `.null`.
If you try to navigate to a website ending in, for instance, `.null`, then you won't get very far.
It's not available for registration, it's not a valid entry for a domain name server, and so it just doesn't exist.

The http://opennic.org[Open NIC Project] has established an alternate DNS network to resolve domain names to IP addresses, but that includes names not being used by the current Internet.
Available top-level domains include:

* .geek
* .indy
* .bbs
* .gopher
* .o
* .libre
* .oss
* .dyn
* .null

You can register a domain within these (and more) top-level domains, and register them on the OpenNIC DNS system so that they map to an IP address of your choosing.

In other words, a website may exist in the OpenNIC network, but remain inaccessible to anyone not using OpenNIC name servers.
This isn't by any means a security measure or even a means of obfuscation, it's just a conscious choice to take a detour on the _super information highway_.

== Using an OpenNIC DNS server

To access OpenNIC sites, you must configure your computer to use OpenNIC DNS servers.
Luckily, this isn't a binary choice.
By using an OpenNIC DNS server, you get access to both OpenNIC and the standard web.

To configure your Linux computer to use an OpenNIC DNS server, you can use the https://opensource.com/article/20/7/nmcli[nmcli] command, an terminal interface to Network Manager.
Before starting the configuration, visit http://opennic.org[opennic.org] and look for your nearest OpenNIC DNS server.
As with standard DNS and https://opensource.com/article/17/9/what-edge-computing[edge computing], the closer the server is to you geographically, the less delay you'll experience when your browser queries it.

1. First, get a list of connections:

[source,bash]
----
$ sudo nmcli connection
NAME                TYPE             DEVICE 
Wired connection 1  802-3-ethernet   eth0 
MyPersonalWifi      802-11-wireless  wlan0
ovpn-phx2-tcp       vpn              --
----

Your connections are sure to differ from this example, but focus on the first column.
This provides the human-readable name of your connections.
In this example, I'm going to configure my ethernet connection, but the process is the same for a wireless connection.

2. Now that you know the name of the connection you need to modify, use `nmcli` to update the `ipv4.dns` property of that connection:

[source,bash]
----
$ sudo nmcli con modify \
"Wired connection 1" \
ipv4.dns "134.195.4.2"
----

In this example, 134.195.4.2 is my closest server.

3. Prevent Network Manager from auto-updating `/etc/resolv.conf` with what your router is set to use:

[source,bash]
----
$ sudo nmcli con modify \
"Wired connection 1" \
ipv4.ignore-auto-dns yes
----

4. Bring your network connection down, and then up again, to instantiate the new settings:

[source,bash]
----
$ sudo nmcli con down \
"Wired connection 1"
$ sudo nmcli con up \
"Wired connection 1"
----

That's it.
You're now using the OpenNIC DNS servers.

=== DNS at your router

You can set your entire network to use OpenNIC by making this change to your router.
In that case, you don't have to configure your computer's connection, because the router will provide the correct DNS server automatically.
I can't demonstrate this in an article because router interfaces differ depending on the manufacturer.
Furthermore, some Internet Service Providers (ISP) don't allow you to modify your name server settings, so this isn't always an option.

== Testing OpenNIC

To explore the "other" Internet you've just unlocked, try navigating to `grep.geek` in your browser.
If you enter literally `http://grep.geek`, then your browser takes you to a search engine for OpenNIC.
If you enter literally `grep.geek`, then your browser interferes, taking you to your default search engine (such as http://searx.me[SearX] or https://opensource.com/article/20/2/open-source-search-engine[YacY]), with an offer at the top of the window to navigate to the page you requested in the first place.

image: did-you-mean.jpg

Either way, you end up at `grep.geek` and can now search the OpenNIC version of the web.

== Great wide open

The Internet is meant to be a place of exploration, discovery, and equal access.
OpenNIC helps ensure all of these things, using existing infrastructure and technology.
It's an opt-in Internet alternative.
If these ideas appeal to you, give it a try!
