Before touching WireGuard, you need to master the basics of networking, Linux administration, and public key cryptography concepts. In this episode you set up two Linux VMs, install the WireGuard tools, and verify that your kernel is ready to load the wireguard module.

Welcome to the Learn WireGuard series! This series will take you from mastering WireGuard — a modern VPN protocol built on cryptokey routing and the Noise Protocol Framework — from the foundations of the concepts all the way to production readiness. There are 23 episodes in total, arranged across six phases.
WireGuard is different from the older generation of VPNs. It is not a collection of bolted-together mechanisms; it is a protocol designed from scratch: a small codebase, modern key cryptography, and every routing decision based on public keys. To understand it in depth, you need a footing in three areas: networking, Linux administration, and basic cryptography.
Episode 0 is your roadmap. We will make sure you have the basic skills, set up two Linux VMs, install the WireGuard tools, and verify that the kernel is ready to load the wireguard module. Once this episode is done, the rest of the series can be followed comfortably.
WireGuard is a layer 3 protocol. You should be comfortable with IP addressing, subnetting, and routing. Understand how to read prefixes such as /24 and /32, because AllowedIPs in episode 6 is built entirely on these concepts. You also need to understand NAT, since almost every deployment involves devices behind a home router or the cloud.
Every practice in this series runs on Linux. You should be familiar with systemd, network interface configuration, and the basic CLI:
ip link show
ip addr show
ip route show
systemctl status ssh
journalctl -u sshThe ip link show and ip addr show commands will become your companions throughout the series, because WireGuard creates a new virtual interface named wg0 that is registered through the kernel.
WireGuard does not use usernames and passwords. The identity of a node is its public key. You should understand the difference between symmetric and asymmetric keys, what Diffie-Hellman is, and the concept of authenticated encryption:
Don't worry if you are not deeply familiar yet — episode 13 will dissect WireGuard's cryptography in full. For now, it is enough to understand that a public key on your system acts like an identity address on the WireGuard network.
You need two Linux machines to experience a real two-way connection. They can be two VMs on your laptop, two VMs in the cloud, or one VM and your physical laptop. Make sure both can ping each other over the normal network before you start. The names we will use throughout the series: server (the first VM) and client (the second VM).
Since Linux 5.6, the wireguard module has been part of the kernel. Verify your kernel version and the module:
uname -r
modinfo wireguardIf modinfo wireguard returns module information, you do not need to install any extra driver. For older kernels, distributions provide wireguard-dkms, which compiles the module automatically — we cover that in episode 3.
Install the tools with apt. For kernel 5.6 and later, the wireguard package is enough because the module is already built in:
sudo apt update
sudo apt install wireguard
wg --versionThe wg --version command shows the tools version along with the kernel version. Run the same installation on both VMs. You may also prepare one VM with NixOS, Arch, or Fedora, but the examples in this series use Debian/Ubuntu.
In addition to wg and wg-quick, also prepare qrencode (for QR codes in episode 16), iperf3 (for benchmarking in episode 15), and jq for parsing output. Install them now so you are not interrupted halfway through the series:
sudo apt install qrencode iperf3 jqBefore moving on to episode 1, verify that a WireGuard interface can actually be created. No full configuration is needed — just make sure the kernel creates the wg0 interface:
sudo ip link add dev wg0 type wireguard
sudo ip link show wg0
sudo ip link del dev wg0If those three commands run without errors, your environment is ready. The wg0 interface that was briefly created is removed again by the last command.
Here is a recap of the prerequisites you have prepared in episode 0:
ip link, ip addr, and ip route.wg, wg-quick, qrencode, iperf3, and jq.If anything is missing, stop and complete it before continuing. A strong foundation will make the next 22 episodes feel much lighter.
In episode 0 you have laid the groundwork for the entire series: understanding the networking, Linux, and cryptography skills required, preparing two VMs, installing the WireGuard tools, and verifying that the kernel is ready to load the wireguard module.
Key takeaways:
modinfo wireguard confirms the kernel module is available.wg for configuration and wg-quick for bringing the interface up.wg0.In episode 1 we will cover the history, background, and why WireGuard — from the complexity of OpenVPN and IPsec, the birth of WireGuard by Jason A. Donenfeld in 2016, to its inclusion in the Linux kernel 5.6 in 2020. Make sure your environment is ready, because the Learn WireGuard journey is just beginning!