From 363d42166a404dc1f36101c15f233b013f98106f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20P=C4=99dzich?= Date: Fri, 30 Aug 2024 16:24:42 +0200 Subject: [PATCH] Make various minor edits and changes to the LBT talk's script --- public/nslookup-lan.png | Bin 0 -> 20077 bytes public/nslookup-wan.png | Bin 0 -> 21986 bytes src/content/blog/going-global-with-localhost.md | 16 ++++++++-------- 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 public/nslookup-lan.png create mode 100644 public/nslookup-wan.png diff --git a/public/nslookup-lan.png b/public/nslookup-lan.png new file mode 100644 index 0000000000000000000000000000000000000000..1af71d6e69b7d4a3c9ccc4a48f0f55d5e98d897e GIT binary patch literal 20077 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

8pnY2hT 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 FV1g>>mWu!Y literal 0 HcmV?d00001 diff --git a/src/content/blog/going-global-with-localhost.md b/src/content/blog/going-global-with-localhost.md index dd6b60a..642bfe4 100644 --- a/src/content/blog/going-global-with-localhost.md +++ b/src/content/blog/going-global-with-localhost.md @@ -163,19 +163,19 @@ Of course, we can also use port forwarding for services using other transport pr Technically speaking, we've done everything to ensure the home server is reachable from external networks... but what if told you that, quite ironically, trying to access it from within the local network might not work? -Imagine I have my daily driver with a local IP set to `10.0.20.5`, my server's local IP is `10.0.10.2`, and I want to visit `https://maciejpedzi.ch` on the former. DNS lookup for that domain name will return my router's public IP address, let's say `79.191.35.174`. +Imagine I have my daily driver with a local IP set to `192.168.0.2`, my server's local IP is `192.168.0.3`, and I want to visit. There's a port forwarding rule on the router set to redirect all incoming TCP connections on port 443 to the same port on the server's address. DNS lookup for that domain name will return my router's public IP address, let's say `12.34.56.78`. My daily driver will send a packet to the router, because it's trying to reach out to an IP that's clearly outside the local network. But then the router will realise that the destination points to its own public IP address and that it's got a port forwarding rule specified for port 443. Therefore the router will change the destination address to the server's local IP address and send the packet there. -However, the source address specified in that packet is still set to the daily driver's local IP. So when my server sends a response packet to the router, it will have `10.0.20.5` set as the destination. Once the router receives that response packet, it will realise that the recipient is in the same local network as the sender. +However, the source address specified in that packet is still set to the daily driver's local IP. So when my server sends a response packet to the router, it will have `192.168.0.2` set as the destination. Once the router receives that response packet, it will realise that the recipient is in the same local network as the sender. Here comes the problem - the daily driver is expecting a response packet from the router's public IP, but then all of a sudden it gets a packet from the server's local IP. That packet will get dropped, since the daily driver is not expecting one from the latter, but the former. -There are two approaches that can be taken to resolve this issue. One involves configuring the router to allow what's known as _NAT hairpining_. If enabled, the router will make sure to take all the packets sent to its local IP address and replace not only the target address with the home server's local IP, but also the sender's IP with the router's own local IP. In that scenario, once the router receives a response packet from the server, it will make sure to send it back to the sender, which will see a response coming from the router's public IP and thus accept the packet. +There are two approaches that can be taken to resolve this issue. One involves configuring the router to allow what's known as _NAT hairpinning_. If enabled, the router will make sure to take all the packets sent to its local IP address and replace not only the target address with the home server's local IP, but also the sender's IP with the router's own local IP. In that scenario, once the router receives a response packet from the server, it will make sure to send it back to the sender, which will see a response coming from the router's public IP and thus accept the packet. The other solution involves a _split-horizon DNS_ (AKA _split DNS_, _split-view DNS_, _split-brain DNS_) setup, which requires a local DNS server with records for my apex domain and a wildcard subdomain that point to the server's local IP. That way my daily driver will be expecting a response from `10.0.10.2`, and once that packet reaches the router, it won't perform any sort of port forwarding, since the destination is set to an address within the local network. So once a response packet finds its way back to the daily driver, it will get accepted as it's anticipated to be delivered. -Although both solutions are rather straightforward to set up on my MikroTik router, I've decided to adopt the _split DNS_ approach, because it allows my services to see the true local IPs from which I access various services, but also because I've generally seen it get recommended over _NAT hairpining_ on various forum threads (possibly for the reasons I've just stated myself). +Although both solutions are rather straightforward to set up on my MikroTik router, I've decided to adopt the _split DNS_ approach, because it allows my services to see the true local IPs from which I access various services, but also because I've generally seen it get recommended over _NAT hairpining_ on various forum threads (most likely for the reasons I've just stated myself). ## Pros of self-hosting @@ -267,11 +267,11 @@ My boredom was dead on the spot, because the curious yet mischievious George in Anyway, past me concluded that the perfect choice for a photo to send would be a Dick pic, but not just any ordinary Dick. We're talking the 46th vice president of the USA, Dick Cheney. Why exactly him? I guess he was the first Dick to come to my mind at that moment. -I had a really narrow time frame to work with, but that's when my vast experience in doing homework right before the deadline hits came in clutch to allow me to reverse-engineer the photo submission mechanism and produce the following script to send a Dick pic just as long as the server was up. +I had a really narrow time frame to work with, but that's when my vast experience in doing homework right before the deadline came in clutch and allowed me to reverse-engineer the photo submission mechanism and produce the following script to send a Dick pic just as long as the server was up. ```js -const { readFileSync } = require('fs'); -const { setTimeout } = require('timers/promises'); +import { readFileSync } from 'fs'; +import { setTimeout } from 'timers/promises'; const dickPic = 'data:image/png;base64,' + Buffer.from(readFileSync('dick.png')).toString('base64'); @@ -320,7 +320,7 @@ Of course, I'm not implying that Wes wouldn't implement any of the aforementione But the moment you expose a means of communicating with your device, you can be certain that someone **will** _at the very least_ attempt to abuse it. It doesn't matter if it's a random guy from Eastern Europe bored out of his mind or a state-sponsored hacker group looking to recruit more zombies into their botnet. -I reckon that the following fragment of a rap song by [Dual Core](https://dualcoremusic.bandcamp.com) titled [_All The Things_](https://dualcoremusic.bandcamp.com/track/all-the-things) sums up the story and its moral best: +I reckon that the following fragment of a rap song by [Dual Core](https://dualcoremusic.bandcamp.com) titled [_All The Things_](https://dualcoremusic.bandcamp.com/track/all-the-things) perfectly sums up the story and its: > Regardless of the hardware, service, or encoding > Connect it to the internet