How I Configured Caddy as a Reverse Proxy for My Home Lab and Solved the HTTPS Redirect Bug

Setting up Caddy as a reverse proxy for my home lab

I’ve been juggling a Plex server, Nextcloud, and a little Go API all on the same Ubuntu 24.04 box. The goal was simple: a tidy public URL for each service, automatic HTTPS, and as little upkeep as possible. Caddy 2.7 fit the bill perfectly—its ACME integration is a one‑liner, and it ships with HTTP/2 out of the box.

1. Install Caddy

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
  sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] \
  https://dl.cloudsmith.io/public/caddy/stable/deb/debian any main" | \
  sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

Caddy boots as a systemd service automatically. Just double‑check that it’s listening on the web ports:

[Read More]

systemd‑resolved’s DNS Cache Stale After a Router Update: My One‑Command Fix

I was staring at a blinking screen of a freshly flashed router when I realized the whole LAN had lost its DNS mojo. I could ping 192.168.1.1 fine, but curl example.com slammed back with “Could not resolve host”. No amount of dig or nslookup helped until I dug into systemd‑resolved.

Why systemd‑resolved Holds on to Old DNS

systemd‑resolved is the default resolver on most recent distros. It keeps a cache of answers to cut down on DNS traffic and speed things up. The cache is keyed by the DNS server that answered and the TTL that server advertised. When a router’s firmware changes, its DHCP server may hand out a new DNS IP or a new list of servers. systemd‑resolved will keep the old server in memory until it gets a fresh lease or the cache expires. If the new server is unreachable, all lookups die.

[Read More]

Taming systemd-resolved: My Journey to Reliable DNS Resolution at Home

Introduction to systemd-resolved

I’ve always been curious about how my Linux system resolves domain names. Recently, I’ve been dealing with some DNS resolution issues at home, which led me to dig into systemd-resolved. As it turns out, many Linux distributions, including Ubuntu and Fedora, use systemd-resolved as their DNS resolver by default. In this article, I’ll share my experience with getting reliable DNS resolution at home using systemd-resolved.

Understanding systemd-resolved

systemd-resolved is part of the systemd suite and provides a DNS resolver service. It’s designed to be a caching, validating, and recursive DNS resolver - which means it can cache DNS responses, validate DNSSEC records, and perform recursive DNS lookups. To check if systemd-resolved is running on your system, you can use the following command:

[Read More]

Taming the systemd-resolved Cache to Fix DNS Lookup Failures on My Home Network

Introduction to systemd-resolved

I’ve been dealing with DNS lookup failures on my home network, and I’ve found that the systemd-resolved cache can be a major culprit. I’ve seen this go wrong when the cache becomes outdated or corrupted, leading to frustrating DNS lookup failures. In this article, I’ll share my experience with taming the systemd-resolved cache to fix these issues.

Understanding the systemd-resolved Cache

The real trick is to understand how the systemd-resolved cache works. It’s designed to improve DNS lookup performance by storing recent queries and their results. However, this cache can become outdated or corrupted, leading to DNS lookup failures. To get a better understanding of the cache, let’s take a look at the systemd-resolved configuration file, usually located at /etc/systemd/resolved.conf. You can view the file using the following command:

[Read More]

Taming systemd-resolved: How I Stopped It From Overriding My resolv.conf Settings

Introduction to systemd-resolved

I’ve seen this go wrong when working with Linux systems - systemd-resolved taking over your DNS settings without warning. As a Linux user, you’re likely familiar with the resolv.conf file, which contains the DNS resolver configuration for your system. However, with the introduction of systemd-resolved, things have changed. systemd-resolved is a systemd service that provides DNS resolution and caching, and it can sometimes override the settings in your resolv.conf file. In this article, we’ll explore how to tame systemd-resolved and prevent it from overriding your resolv.conf settings.

[Read More]

Troubleshooting Podman Container Networking Issues with ss and nftables

Introduction to Podman Container Networking

I’ve been working with Podman for a while now, and I’ve found that networking issues can be a real pain point. When containers can’t communicate with each other or the host machine, it’s frustrating and can cause downtime. In this article, I’ll show you how to use the ss and nftables commands to troubleshoot Podman container networking issues.

Understanding Podman Networking

Before we dive into troubleshooting, it’s essential to understand how Podman handles networking. By default, Podman uses a bridge network, which allows containers to communicate with each other and the host machine. You can verify this by running podman network ls, which lists all available networks.

[Read More]

Resolving DNS Troubles at Home: A systemd-resolved and dnsmasq Setup Gone Wrong

Introduction to DNS Troubles

I’ve been running my homelab for years, and one thing that still gets me is DNS troubles. Last year, I decided to set up systemd-resolved and dnsmasq to manage my home network’s DNS. The idea was to use systemd-resolved as the primary resolver and dnsmasq as a caching layer to improve performance. Sounds simple, but it didn’t quite work out that way.

Setting Up systemd-resolved

To start, I enabled systemd-resolved on my Ubuntu-based server. This involved editing the /etc/systemd/resolved.conf file to set the DNS servers and domains. I opted for Cloudflare’s DNS servers - they’re known for being fast and secure.

[Read More]

Troubleshooting Podman Container Networking Issues with rootless Containers and FirewallD

Introduction to Podman Container Networking

I’ve been experimenting with containers for a while now, and Podman has become my go-to tool for managing rootless containers. However, when it comes to networking, things can get complicated quickly. I’ve seen this go wrong when the container’s network stack is isolated from the host’s network stack, making it difficult to troubleshoot issues. In this article, I’ll share my experience with troubleshooting Podman container networking issues, focusing on rootless containers and FirewallD.

[Read More]

DNS and DNS Servers for Linux

Managing the Domain Name System Efficiently

The Domain Name System (DNS) is a fundamental component of the internet. It translates human-readable domain names like example.com into IP addresses such as 93.184.216.34, allowing users to connect to websites and services without memorizing numerical addresses. For Linux users, understanding DNS and managing DNS servers is essential for troubleshooting, configuring networks, and ensuring smooth internet connectivity.

What is DNS?

DNS functions as the internet’s phonebook. When you type a domain name into a browser, DNS resolves it into the corresponding IP address so your computer can establish a connection. This resolution process involves several DNS components:

[Read More]

tcpdump

The Ultimate Packet Analysis Tool for Network Professionals

In the world of networking, understanding how data flows across a network is critical for troubleshooting, security, and performance optimization. One of the most powerful tools at a network professional’s disposal is tcpdump. This command-line packet analyzer allows users to capture, filter, and dissect network traffic in real time, offering unmatched insights into what is happening on the wire.

Learn more about tcpdump on its official website, where you can find documentation, examples, and updates.

[Read More]