this post was submitted on 24 Jun 2024
676 points (97.9% liked)

Programmer Humor

32479 readers
278 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 5 points 4 months ago (1 children)

Not really, though. It was never designed as a security boundary. You can "open" a UDP port by sending UDP packets to another host, and then that host can send UDP packets to you, for instance. Usually the IP addresses of the two hosts are exchanged through a third party, and that's how STUN/TURN works in essence. Without this, you'd need to port forward every UDP connection manually, both incoming and outgoing.

NAT only protects you when you have hosts that only communicate along preset routes, but then a normal firewall will also work fine. It's not like having a public IP means any traffic will actually go through, every modern consumer router has a standard deny all firewall. At best, it sort of hides what devices are sending the traffic.

Meanwhile, NAT has flaws breaking traffic (causing NAT slipstreaming risks, like I linked elsewhere). It also has companies like Nintendo instruct you to forward every single port to their device if you have connectivity issues. If that forward is not towards a MAC address, and your PC gets the IP your Nintendo Switch used to have, you've just disabled your firewall to play Animal Crossing.

If you want to, you can do NAT on IPv6. Every operating system supports it, even if it's a stupid idea.

[–] [email protected] 1 points 4 months ago* (last edited 4 months ago) (1 children)

I still have to initiate the outgoing UDP. Are you talking about the specific case where any software running on my host can initiate it without me requesting?

Edit: apparently NAT is full of security bugs

[–] [email protected] 3 points 4 months ago (1 children)

In the instance of UDP handshakes yes, you need local software to initiate the connection on one of your devices somewhere (I highly doubt that your home router verifies the origin of those packets, so a hacked printer or IoT crap can open ports to your desktop no problem). Other problems are harder to solve.

NAT is great at what it does, but it does not guarantee security. It blocks straightforward attacks, but brings in tons of edge cases and complexity that sophisticated attacks can abuse. At the same time, the same security can be achieved using IPv6 and a firewall without all the complexity.

It's a neat workaround that means you don't need to mess with subnetting and routing tables when you do stuff like run virtual machines and when your ISP doesn't offer IPv6. It was designed so larger businesses with 10 machines could access the internet without spending a lot of money on a /30, not to replace firewalls, and it still works well for what it's designed to do.

[–] [email protected] 1 points 4 months ago

Understood. CG-NAT has been so annoying, I would love for IPv6 to completely replace v4 ASAP