{ "config": { "base_url": "https://disconsented.com", "mode": "build", "title": null, "description": null, "languages": {}, "default_language": "en", "generate_feed": false, "feed_filename": "atom.xml", "taxonomies": [ { "name": "categories", "slug": "categories", "paginate_by": null, "paginate_path": null, "render": true, "feed": true }, { "name": "year", "slug": "year", "paginate_by": null, "paginate_path": null, "render": true, "feed": true } ], "author": null, "build_search_index": true, "extra": { "avatar": "avatar.png", "navbar": [ { "text": "Blog", "url": "/" }, { "text": "Projects", "url": "/pages/projects" } ], "social_media": [ { "name": "GitHub", "url": "https://github.com/disconsented" } ] }, "markdown": { "highlight_code": true, "highlight_theme": "base16-ocean-dark", "highlight_themes_css": [], "render_emoji": false, "external_links_target_blank": false, "external_links_no_follow": false, "external_links_no_referrer": false, "smart_punctuation": false, "extra_syntaxes_and_themes": [], "lazy_async_image": false }, "search": { "index_format": "elasticlunr_javascript" } }, "current_path": "/year/", "current_url": "https://disconsented.com/year/", "image": { "url": "https://disconsented.com/processed_images/avatar.2b7ee108609eb81a.png", "static_path": "static/processed_images/avatar.2b7ee108609eb81a.png", "width": 38, "height": 28, "orig_width": 1135, "orig_height": 822 }, "lang": "en", "taxonomy": { "name": "year", "slug": "year", "paginate_by": null, "paginate_path": null, "render": true, "feed": true }, "terms": [ { "name": "2015", "slug": "2015", "path": "/year/2015/", "permalink": "https://disconsented.com/year/2015/", "pages": [ { "relative_path": "why-i-decided-to-stick-with-18-for-minecraft.md", "colocated_path": null, "content": "

This is a legacy article from the old version of this site, it is included for posterity.

\n

Some people had noticed that after working on ANSSRPG for over a year\nand five months (30/04/2014 was the creation date of the repository)\nthat I had finally released it however with one quirk; it was released\nfor 1.8 only and a few people have asked why/for a 1.7.10 version.

\n\n

I want to make it clear that I only wish to maintain and work on one\nversion myself (although I am open to someone else maintaining a 1.7.10\nversion) this was for a few reasons, the biggest being that I have\nbecome a professional software developer and modding is as much of a\nhobby as something of a passion (still being a full time student\ndoesn't help) so I don't have as much time as before to work on it.\nThere are other reasons, the most prominent being that a few mods that I\nhave had my eye on for compatibility issues like Tinkers Construct have\nbeen undergoing major changes to the code base and I do not wish to work\nagainst it until it is stable again.

\n

Lastly, the modding community stagnates around Minecraft versions and I\nloathe that. If I can push it along ever so slightly I am perfectly\nhappy to do so (even at the cost of people's perceptions and enjoyment).

\n

"I do not think there is any thrill that can go through the human heart\nlike that felt by the inventor as he sees some creation of the brain\nunfolding to success....Such emotions make a man forget food, sleep,\nfriends, love, everything." - Nikola Tesla

\n", "permalink": "https://disconsented.com/why-i-decided-to-stick-with-18-for-minecraft/", "slug": "why-i-decided-to-stick-with-18-for-minecraft", "ancestors": [ "_index.md" ], "title": "M.2, NVMe, Optane and You", "description": null, "updated": "2015-10-08T22:50:56+12:00", "date": "2015-10-08T22:50:56+12:00", "year": 2015, "month": 10, "day": 8, "taxonomies": { "year": [ "2015" ] }, "authors": [], "extra": {}, "path": "/why-i-decided-to-stick-with-18-for-minecraft/", "components": [ "why-i-decided-to-stick-with-18-for-minecraft" ], "summary": "

This is a legacy article from the old version of this site, it is included for posterity.

\n

Some people had noticed that after working on ANSSRPG for over a year\nand five months (30/04/2014 was the creation date of the repository)\nthat I had finally released it however with one quirk; it was released\nfor 1.8 only and a few people have asked why/for a 1.7.10 version.

\n", "toc": [], "word_count": 283, "reading_time": 2, "assets": [], "draft": false, "lang": "en", "lower": null, "higher": null, "translations": [], "backlinks": [] } ], "page_count": 1 }, { "name": "2017", "slug": "2017", "path": "/year/2017/", "permalink": "https://disconsented.com/year/2017/", "pages": [ { "relative_path": "m2-nvme-optane-and-you.md", "colocated_path": null, "content": "

This is a legacy article from the old version of this site, it is included for posterity.

\n

There's a lot of confusion out in the wilds about SSD's and their\nvarious technologies so I am going to provide a reference of what\neverything is.

\n\n

To start with we have a handful of relevant terms:

\n\n

We will start with M.2 since it's the most misunderstood. People tend\nto think it means the interface or protocol (PCIe or NVMe respectively).\nIn reality, the important thing to understand is that it is simply a\nform factor and has little impact on the real world (boot times, load\ntimes) performance of the drive. This is best compared to the 2.5" and\nPCIe form factors (not to be confused with the PCIe interface).

\n

M.2 has the ability to use SATA, PCIe, or USB 3.0 interfaces, but for\nour purposes we're only concerned with PCIe and SATA.

\n

AHCI is the legacy (read: old) protocol developed by Intel for\ninterfacing mechanical hard drives(controllers) with the rest of the\nsystem.

\n

NVMe is the replacement for AHCI; the important thing here is that it\nhas been designed to be used specifically with SSD's and as a result can\nallow them to better utilize the bandwidth provided via the PCIe bus.

\n

SATA is the interface that most SSD's use to transfer information\nbetween the SSD and the rest of the computer. Although technically not\nlegacy, it has been superseded by PCIe.

\n

PCIe is another relatively old interface. The important distinction\nbetween this and SATA is that PCIe is not just for storage devices due\nto it having massively more bandwidth. A single PCIe 3.0 lane provides\n7.88Gb/s of bandwidth which scales up to 126Gb/s with 16 lanes. This is\nwhat enables modern SSD's raw bandwidth.

\n

This is great and all but what does it mean for the average user?

\n

Practically nothing, the problem is that the performance difference just\ndoesn't matter for consumers.

\n

As shown by Techreport's Samsung 960 EVO\nreview,\nthere is no noticeable difference in boot times or application\n(including game) load times when compared to the older SATA based SSDs.\nPCIe/NVMe SSD's are just not worth the price premium, so when\nshopping for an SSD look for what is the best value drive ($/GB).

\n

3D Xpoint (also known as\nOptane) is a collaborative\neffort between Intel and Micron to attempt to bridge the gap between\nDRAM and classic NAND storage. This provides many of the performance\nbenefits, to a lesser extent, of DRAM (specifically in low latencies and\nhigher bandwidth) but with the bonus of it being Non-Volatile. In\nEnglish, this means when the drive is unpowered it will keep what's\nstored on it. Ultimately besides this being a fledgling technology this\nhas the same practical problem as PCIe SSD's. It's not worth what it\ncosts and is only really a consideration for workstations and servers.

\n", "permalink": "https://disconsented.com/m2-nvme-optane-and-you/", "slug": "m2-nvme-optane-and-you", "ancestors": [ "_index.md" ], "title": "M.2, NVMe, Optane and You", "description": null, "updated": "2017-05-19T10:50:56+12:00", "date": "2017-05-19T10:50:56+12:00", "year": 2017, "month": 5, "day": 19, "taxonomies": { "year": [ "2017" ] }, "authors": [], "extra": {}, "path": "/m2-nvme-optane-and-you/", "components": [ "m2-nvme-optane-and-you" ], "summary": "

This is a legacy article from the old version of this site, it is included for posterity.

\n

There's a lot of confusion out in the wilds about SSD's and their\nvarious technologies so I am going to provide a reference of what\neverything is.

\n", "toc": [], "word_count": 549, "reading_time": 3, "assets": [], "draft": false, "lang": "en", "lower": null, "higher": null, "translations": [], "backlinks": [] }, { "relative_path": "hot-to-use-pcpartpicker.md", "colocated_path": null, "content": "

This is a legacy article from the old version of this site, it is included for posterity.

\n\n

PcPartPicker is a wonderful site that allows\npeople to easily put together a build and get aggregated (collected)\ndata on parts pricing, however there are a few important features that\nare not explained. I hope to walk you through them here. Firstly we're\nat the index page, nothing particularly useful except for the 'VIEW\nYOUR System Build' button in the top left hand corner. This is how we\nstart a new build.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp01.png\n:::

\n

Your page should look something like that, if it doesn't press the big\nblue 'Start A New Part List' in the upper left hand corner of the\nscreen. (From top to bottom) there are two important things to point\nout: The 'Choose a X' buttons and 'Add Custom Part'. Custom parts\nare handy for when you want to include something outside of what\npcpartpicker contains (an old graphics card for example).

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp02.png\n:::

\n

You should be met with a pop up box, pretty self explanatory. If you\nhave a URL to a part\n(https://www.amazon.com/Gigabyte-GC-WB867D-I-Bluetooth-Frequency-Compatible/dp/B019JH89YI\nfor example) you can add it in and press 'Create Part'.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp03.png\n:::

\n

Press 'Add To Part List'.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp04.png\n:::

\n

Now its been added in, easy. Pcpartpicker isn't perfect however,\nsometimes we need to specify the details ourselves. Press 'Add A Custom\nPart' again then press 'Add Custom Part'.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp05.png\n:::

\n

From here we can fill in the details we want as well as select a\ncategory.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp06.png\n:::

\n

Now we go back and add a motherboard. Notice on the left the filters and\non the right the 'Add From Filter' button, together these are\n'Parametric Filters'. Parametric Filters allows Pcpartpicker to semi\nintelligently choose parts based on what you select (as well as\nconsidering compatibility), then it will select the lowest priced part.\nThis is one of the sites most powerful features, you can also select\nindividual parts using the checkbox to the left of their name.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp07.png\n:::

\n

Here we select the 'LGA1151' socket, DDR4 RAM and 4 RAM Slots.

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp08.png\n:::

\n

Rinse and repeat, pcpartpicker won't let you add in parts that are\nincompatible with each other normally. For the sake of time I have\nfilled out the parts. It's important to note the price at the bottom,\nbecause we were smart and used parametrics the list will update to\nreflect current pricing, combos and will even update to different\nregions!

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp09.png\n:::

\n

There are a few features to note here (from left to right): The\nPermalink which is a direct link to your parts list so that you can\nshare it with other people (important if you want help!), the system\nwattage estimation and the 'Save As' button (for when you're using an\naccount).

\n

::: thumbnail\n/images/posts/how-to-use-pcpartpickercom/pcpp10.png\n:::

\n

That's about all there is too it, happy part picking!

\n", "permalink": "https://disconsented.com/hot-to-use-pcpartpicker/", "slug": "hot-to-use-pcpartpicker", "ancestors": [ "_index.md" ], "title": "How To Use PcPartPicker.com", "description": null, "updated": "2017-01-04T19:58:56+13:00", "date": "2017-01-04T19:58:56+13:00", "year": 2017, "month": 1, "day": 4, "taxonomies": { "year": [ "2017" ] }, "authors": [], "extra": {}, "path": "/hot-to-use-pcpartpicker/", "components": [ "hot-to-use-pcpartpicker" ], "summary": "

This is a legacy article from the old version of this site, it is included for posterity.

\n", "toc": [], "word_count": 564, "reading_time": 3, "assets": [], "draft": false, "lang": "en", "lower": null, "higher": null, "translations": [], "backlinks": [] } ], "page_count": 2 }, { "name": "2023", "slug": "2023", "path": "/year/2023/", "permalink": "https://disconsented.com/year/2023/", "pages": [ { "relative_path": "basics-of-networking.md", "colocated_path": null, "content": "

PrefaceπŸ”—

\n

Frequently across varying game hosting communities I see folks trying to start hosting servers for their friends but typically running into the same sets of roadblocks, blindly following poorly written guides & videos.

\n

Instead of getting grumpy, trying to explain the process for the Nth time, I've decided to (shockingly) write out a guide to hopefully help folks, help themselves.

\n\n

Given my years of experience inside varying Minecraft Server communities (shout out to Syscraft), running my Infrastructure as a Service (PixelPond.io) & my experience in Residential Access Networks, I figured it was time to impart a bit of wisdom.

\n

The goal of this guide is to explain enough for folks to get started, with a focus on teaching a set of tools (both software and logical) to diagnose their home networks.

\n

What this guide, isn't, is a complete guide to port forwarding with X ISP or Y CPE (typically a router). Due diligence on the part of the reader is expected, this is fork feeding, not spoon-feeding.

\n

What is N.A.T?πŸ”—

\n

N.A.T. or Network Address Translation (like most acronyms) is quite a literally named. In a nutshell, it's the idea that a network device can take a request and then translate it to another address.

\n

The way it works is by modifying the Source I.P. and Destination I.P. segments of the packet and forwarding it along the network.

\n

Typically, the C.P.E. figure out how & where to translate the incoming address by looking at the Destination. It will then modify that to point towards another device and forward that along.

\n

Say you get a packet that looks like:

\n\n\n
Source AddressSource PortDestination AddressDestination Port
123.123.123.1232556510.0.0.125565
\n

Your CPE may then have a NAT table that looks like:

\n\n\n\n
Source AddressSource PortDestination AddressDestination Port
0.0.0.025565192.168.1.2025565
10.0.0.180192.168.1.208080
\n

In this case, it has two rules:

\n
    \n
  1. Will translate any traffic (more on this later) to a local (LAN) server.
  2. \n
  3. Will translate traffic from one source, to a local server with a different port.
  4. \n
\n

From there, it can modify the packet to:

\n\n\n
Source AddressSource PortDestination AddressDestination Port
10.10.10.1025565192.168.1.2025565
\n

So, it's rewritten the Destination Address and forwarded the packet on its mary way. It was able to do so because it had been told what to do via the NAT table.

\n

In practice, this is the mechanism that lets people access services behind a C.P.E. (Router) in IPv4 networks. IPv6 doesn't use the concept of NAT because each device has its own (public) address.

\n

However, this mechanism doesn't always work for varying reasons. We'll touch on the two most common ones here, β€œHairpin N.A.T.” and C.G.N.A.T.

\n

Hairpin NAT, alternatively, why you don't test from your port forward from your LANπŸ”—

\n

Hairpin NAT is the idea of communicating to a local host behind the same NAT device (CPE). E.g., connecting to a local server by using the WAN address of the CPE.

\n

Why did I include this? Well, I've noticed that folks who are new to dealing with home networks tend to think that using your CPE's WAN address is a good way to test your port forward.

\n

In reality, attempting to test this way achieves nothing beyond verifying that your Hairpin NAT works. It's convenient in some cases, but ultimately a red herring.

\n

CGNAT, the other big scary NATπŸ”—

\n

CGNAT, or Carrier Grade NAT, is a way for ISPs to save money on paying for an IP address for each customer. It works much the same way as regular NAT, but instead of it operating on your CPE, it operates on a network appliance somewhere in your provider's network. Unfournatley, you have no direct influence over how it operates. Consequently, you cannot port forward when your ISP is using CGNAT.

\n

It is trivial to establish if you're stuck behind CGNAT, you'll see that your CPEs WAN address is different to what services will report your WAN address as.

\n

I.e., say your CPE has an WAN address of 10.0.0.25 & a service like icanhazip says your address is 123.123.123.123 you're stuck behind CGNAT.

\n

Fret not, you can work around this via β€œTunneling” although, we won't dive into this topic here.

\n

What is Quad 0πŸ”—

\n

Remember that weird address from the NAT table before, 0.0.0.0? It's a special address in many special rules depending on the context, but here it has one relevant meaning. Anything, why do we care? Because it's the only address we should ever bind a server to.

\n

Address BindingπŸ”—

\n

Have you ever noticed how some servers let you specify an address?

\n
\n

E.g. server-ip=

\n
\n

When you specify a value, you're telling the application to only listen to that address. Typically, you'll want this when you have a machine with multiple addresses and several services with the same ports. For example: 10.0.0.2:25565 & 10.0.0.3:25565.

\n

Private/LAN AddressπŸ”—

\n

Previously, we discussed how NAT works and its role in connecting your server to the internet. As every device on the network needs an address to be reachable, and there are not enough IP(v4) addresses for each machine to have a unique one. The IETF set aside various address spaces for private use.

\n

This overlap, combined with NAT is largely how the problem of IPv4 address exhaustion was tackled. It is important to understand how this works for understanding how your traffic is directed.

\n

Public/WAN AddressπŸ”—

\n

Essentially, the globally unique address by which you can be reached. This will be the address of your CPE for IPv4 networks and how your network can be found on the internet.

\n

IPv4 & IPv6πŸ”—

\n

The Internet Protocol (IP) is essentially the layer that lets you route traffic between the interconnected networks of the internet, largely in v4 and v6 layers. A brief description, but it covers the broad strokes.

\n

Programmatically, IPv4 and IPv6 are made up of 32 bits and 128 bits, respectively. The adoption of IPv6 is largely driven by the IPv4 address exhaustion problem, consequently, this is why NAT has seen widespread adoption. Every bit you add, doubles the range of numbers that you can represent. IPv4 can represent roughly 4 million addresses (with special ranges not for general use), IPv6 can represent 340 undecillion addresses. These are enough addresses that practically every device on the internet can have its own unique address, in residential settings, instead of a single IPv4 address you'll typically have an IPv6 prefix.

\n

ISPs have been historically slow to adopt IPv6 through a lack of demand and the equipment cost behind it. However, support for IPv6 has grown to the point where it is not unusual to see it being offered to residential customers.

\n

Furthermore, because of the support for IPv6 in major services, ISPs are supporting it as a way of reducing load on their CGNAT equipment, consequently saving significant cost on equipment.

\n

MAC Binding (I.E. how does the router know where to direct traffic)πŸ”—

\n

Network interfaces don't have an IP address directly associated with them, instead, each interface has its own unique hardware address that needs to be mapped against an IP address to be routable. This is done with the Address Resolution Protocol, network equipment will keep a collection of these mappings to know how to route traffic to interfaces across the network.

\n

TCP Dump & WiresharkπŸ”—

\n

Just to raise awareness of these tools, TCP Dump & Wireshark are packet capture tools that can be used to capture, analyse network traffic, consequently they're excellent tools for diagnosing issues.

\n

However, these tools are complex enough that I won't be able to do them justice.

\n

Firewall LogsπŸ”—

\n

Not a specific tool but rather a concept, most firewall solutions (whether they're on a CPE or a server) have an option of logging events. This is a great step for sanity checking whether traffic is hitting a particular device, as an example.

\n

Addendum 1 β€” Fail to Bind (Address already in use)πŸ”—

\n
Typically, this is one of the following :\n\nAddress port pair is already in use, to resolve this, pick another unique combination or stop whatever is using that one.\nUsing a port from the reserved range, user space applications must use a port >1024.\nNo adapters with the specified address, for multiple routable addresses, assign them to the interface, otherwise bind to Quad0.
\n", "permalink": "https://disconsented.com/basics-of-networking/", "slug": "basics-of-networking", "ancestors": [ "_index.md" ], "title": "All The Things They Don't Tell You About Port Forwarding.", "description": "A guide to understanding port forward for the diligent learner.", "updated": "2023-12-26T16:35:00+13:00", "date": "2023-12-26T16:35:00+13:00", "year": 2023, "month": 12, "day": 26, "taxonomies": { "year": [ "2023" ], "categories": [ "Networking" ] }, "authors": [], "extra": { "toc": true }, "path": "/basics-of-networking/", "components": [ "basics-of-networking" ], "summary": "

PrefaceπŸ”—

\n

Frequently across varying game hosting communities I see folks trying to start hosting servers for their friends but typically running into the same sets of roadblocks, blindly following poorly written guides & videos.

\n

Instead of getting grumpy, trying to explain the process for the Nth time, I've decided to (shockingly) write out a guide to hopefully help folks, help themselves.

\n", "toc": [ { "level": 2, "id": "preface", "permalink": "https://disconsented.com/basics-of-networking/#preface", "title": "Preface", "children": [] }, { "level": 2, "id": "what-is-n-a-t", "permalink": "https://disconsented.com/basics-of-networking/#what-is-n-a-t", "title": "What is N.A.T?", "children": [] }, { "level": 2, "id": "hairpin-nat-alternatively-why-you-don-t-test-from-your-port-forward-from-your-lan", "permalink": "https://disconsented.com/basics-of-networking/#hairpin-nat-alternatively-why-you-don-t-test-from-your-port-forward-from-your-lan", "title": "Hairpin NAT, alternatively, why you don't test from your port forward from your LAN", "children": [] }, { "level": 2, "id": "cgnat-the-other-big-scary-nat", "permalink": "https://disconsented.com/basics-of-networking/#cgnat-the-other-big-scary-nat", "title": "CGNAT, the other big scary NAT", "children": [] }, { "level": 2, "id": "what-is-quad-0", "permalink": "https://disconsented.com/basics-of-networking/#what-is-quad-0", "title": "What is Quad 0", "children": [] }, { "level": 2, "id": "address-binding", "permalink": "https://disconsented.com/basics-of-networking/#address-binding", "title": "Address Binding", "children": [] }, { "level": 2, "id": "private-lan-address", "permalink": "https://disconsented.com/basics-of-networking/#private-lan-address", "title": "Private/LAN Address", "children": [] }, { "level": 2, "id": "public-wan-address", "permalink": "https://disconsented.com/basics-of-networking/#public-wan-address", "title": "Public/WAN Address", "children": [] }, { "level": 2, "id": "ipv4-ipv6", "permalink": "https://disconsented.com/basics-of-networking/#ipv4-ipv6", "title": "IPv4 & IPv6", "children": [] }, { "level": 2, "id": "mac-binding-i-e-how-does-the-router-know-where-to-direct-traffic", "permalink": "https://disconsented.com/basics-of-networking/#mac-binding-i-e-how-does-the-router-know-where-to-direct-traffic", "title": "MAC Binding (I.E. how does the router know where to direct traffic)", "children": [] }, { "level": 2, "id": "tcp-dump-wireshark", "permalink": "https://disconsented.com/basics-of-networking/#tcp-dump-wireshark", "title": "TCP Dump & Wireshark", "children": [] }, { "level": 2, "id": "firewall-logs", "permalink": "https://disconsented.com/basics-of-networking/#firewall-logs", "title": "Firewall Logs", "children": [ { "level": 3, "id": "addendum-1-fail-to-bind-address-already-in-use", "permalink": "https://disconsented.com/basics-of-networking/#addendum-1-fail-to-bind-address-already-in-use", "title": "Addendum 1 β€” Fail to Bind (Address already in use)", "children": [] } ] } ], "word_count": 1389, "reading_time": 7, "assets": [], "draft": false, "lang": "en", "lower": null, "higher": null, "translations": [], "backlinks": [] } ], "page_count": 1 } ] }