Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specification of DNS #10

Open
renatomassaro opened this issue Jul 11, 2017 · 0 comments
Open

Specification of DNS #10

renatomassaro opened this issue Jul 11, 2017 · 0 comments

Comments

@renatomassaro
Copy link
Member

I always wanted to add DNS and domain name to the game, but I've been postponing these features as they weren't "essential", in any way, to the base game. As it turns out, a very simple DNS implementation is required for the base version. Let me explain why:

  • Our game design is geographically distributed, and this is one of the pillars for balance. It avoids overly concentrated areas/servers, like we've seen in Legacy.

  • As such, HE1 and HE2 NPCs like Banks, Police Dept, BTC Market, City Hall, Chamber of Commerce etc. are distributed across several physical regions, based on (player) population density.

Let's use Banks as an example. Player A, located in Europe, may access his bank using IP X. Player B, located in Australia, may access his bank using IP Y. Both banks are the same, but those are different terminals/ATMs.

Suppose player A accesses ip Y (located in Australia), but instead wants to use her local bank. She'd have to memorize IP X (or lookup on Finances app, which would lead to memorization). That's where DNS shines: just access bank.com and you have direct access to your local bank IP. I could also access bank.com/branch/australia/sydney-1 instead, to have direct access to IP Y.

World's Simplest Introduction to DNS

DNS maps a domain name to an IP address. That's it. But obviously, that's not it.

DNS Unicast

Unicast DNS maps exactly one domain to one IP. Always.

DNS Anycast

Anycast DNS allows multiple IP addresses to answer for the same domain. The benefit it brings is that the nearest server will answer first, much faster than others.

DNS in the game

First and most importantly, players don't need to know anything about DNS. That's totally transparent to them.

DNS have one major reason to exist: it's hard to memorize IPs. It's much easier to type google.com than 172.217.29.206. For HE1/2, there's another reason: resolving to the local NPC, automatically.

The bank example nails it:

  • bank.com will always resolve to the nearest ATM to the connection's Exit Node (which is not necessarily the Player's location). That's Anycast.
  • bank.com/branch/brazil/sao-carlos-1 will always resolve to branch brazil/sao-carlos-1. That's Unicast.

In real life, the two examples above would be answered by the same DNS server, as the path (/branch/...) doesn't matter for DNS resolution. Helix, however, consider the full path, which makes implementation a lot easier.

Under the hood, our servers calculate the nearest bank.com server to the Player's location using GIS algorithms.

Other examples:

  • wop.com/local resolves to nearest WOP station, while wop.com resolves to global WOP database.
  • new-york.us or sao-paulo.br resolves to the relevant city WHOIS (with information about Police Dept, News, City Hall, Chamber of Commerce etc).

Custom domain names

We'll have domain name support, so players can register their own domain. myclan.com or username.com. All player- and clan-powered DNS/domains are Unicast.

But... not now. We'll consider implementing custom domain names only after the game has been marked as Stable/1.0 (2018+).

Reverse DNS & browser behavior

We'll have an in-game system similar to reverse DNS (rDNS). It's mostly used on Browsers.

When player accesses an IP in the browser, if there is a reverse DNS, the relevant Unicast domain will be showed alongside the IP. It's informative, so the player knows there's an easier way to access this site.
When browsing a website with its domain, the browser will always show the corresponding IP as well.

Logs

At least initially, logs will only store IP addresses. In the future, storing both IP and domain, like a.b.c.d (bank.com/branch/fr/paris-1), seems a nice improvement.

Protocol

In real life, we use the HTTP(S) protocol to browse the Web. For HE2, I'd like to have in-game websites using a fake protocol like he2(s):// or hex(s)://, for two reasons:

  1. It avoids confusion; it makes crystal clear that the website is not real
  2. It enables us to serve real sites within the game. The next step is playing HE1 inside HE2. (Obviously this still have to be widely discussed and planned. Lots of potential security problems).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant