How do I learn practical Linux networking for my home network?

I know unix scripting (shell, python, etc), and have some grasp of the theoretical underpinnings of TCP/IP (I have read Kurose, James F.; Ross, Keith W. - Computer networking : a top-down approach). But I have almost no skills in managing my own home network (things like route in macOS, iptables in Linux). How should I start learning about practical network administration?

Things I am interested in being able to do:

  • Route traffic based on the destination IP, or the application issuing the request
  • Create LAN-like internal networks between machines connected by the internet, via, e.g., Wireguard
  • Prioritize the speed of various devices connected to my home router
  • Limit speed of specific ports
  • Create a guest Wi-Fi network, with limited speed and rudimentary analytics
  • Create a local Wi-Fi network that is not connected to the internet
  • Create chained VPNs (machine A to machine B then to machine C)
    • Use the Wireguard VPN on a server without messing up its SSH clients

The OSes I use are Ubuntu, and macOS.

PS: If this question is not on-topic here, I'd appreciate some tips on the forums to ask it on.


Lots of these things can already be found in the OpenWrt wiki. I think it's easier to build your knowledge from tutorials and piecing the links between those together, rather than go reading up on things like e.g. ip etc.

The wiki covers basic WireGuard setup.

Not sure if this is feasible per-device, but you might be able to do some kind of rate limiting based on IP or by using a separate subnet, like with a guest WLAN e.g..

Look into SQM.

This is covered in the wiki as well (guest networks, analytics tools are e.g. available through nlbwmon, isolating a WLAN from the internet is just as easy as firewalling it).