Before building a PPTP tunnel, you need to master networking fundamentals such as IP routing, NAT, and firewalls, plus Linux experience with systemd and package managers. In this episode you set up two Linux VMs, install pptpd and pptp-linux, and verify that the GRE module is available in the kernel.

Welcome to the Learn PPTP series! This series takes you deep into PPTP (Point-to-Point Tunneling Protocol) — from its architecture, configuration, and security weaknesses to its legacy context — so you are ready to troubleshoot old environments and decide when it is time to move to a modern VPN.
PPTP is a protocol more than two decades old that Microsoft, NIST, and the security community now consider insecure. Yet a huge number of enterprise networks still run it. Understanding how it works is just as important as understanding how to turn it off, because legacy devices are not going to disappear overnight.
Episode 0 is the roadmap: you will confirm your foundational skills, set up two Linux VMs, install the pptpd server and pptp-linux client, and run your first verification. Once this episode is done, you can follow the rest of the series comfortably.
PPTP is a tunneling protocol that works on top of IP. You must understand IP addresses, subnet masks, gateways, and routing tables. When the tunnel is active, two networks are involved at once: the original physical network and the virtual PPTP network that uses addresses from the remoteip pool.
Get used to reading the routing table to confirm the direction of traffic:
ip route show
ip addr showThe output of ip route show shows the default gateway, while ip addr show lists the IP addresses of all interfaces. You will use both constantly when verifying the tunnel in episode 7.
PPTP has two paths that must be open on the firewall: TCP 1723 for the control channel and GRE protocol 47 for the data channel. You should be comfortable with at least iptables or nftables, because the most common mistake is opening TCP 1723 while forgetting to open GRE.
NAT matters too. A PPTP server behind a NAT router requires special configuration, because GRE does not play well with NAT. We will cover this topic fully in episode 16.
You will work with the pptpd service, managed by systemd. Make sure basic commands such as systemctl start, systemctl enable, and journalctl feel familiar. On the package manager side, this series uses Debian/Ubuntu-based distributions, so apt is the main tool.
PPP (Point-to-Point Protocol) is the foundation of PPTP. Understand that a PPTP tunnel is really a PPP session wrapped in GRE. Concepts you must master: the authentication phase, LCP (Link Control Protocol) options, and NCP (Network Control Protocol). Full details are in episode 4.
You need two Linux VMs on the same network:
pptpd, acting as the VPN server.pptp-linux, acting as the client.In addition, keep one device with the built-in Windows PPTP client as an alternative test target. Note: Microsoft has already removed PPTP support from the latest Windows 11, so for modern environments you can use a Linux or macOS client instead.
Before installing anything, make sure the kernel supports GRE (Generic Routing Encapsulation), which the PPTP data channel uses:
sudo modprobe ip_gre
lsmod | grep greIf lsmod | grep gre shows a line containing ip_gre, GRE support is available. If not, your kernel needs an additional module — this is rare on modern distributions, but worth checking first.
On both VMs, update the package index and install the required packages:
sudo apt update
sudo apt install -y pptpd ppp
sudo apt install -y pptp-linuxOn the server, pptpd brings the PoPToP daemon plus pppd as the PPP engine. On the client, pptp-linux provides the pptp binary and the pptpsetup helper for managing connections.
To make things easy to recognize, assign static IP addresses to both VMs. For example: the server uses 192.168.1.10 and the client uses 192.168.1.20, both on the same subnet.
ping -c 3 192.168.1.10Test connectivity with ping -c 3 192.168.1.10 before moving on. If packets reach each other, your network foundation is ready.
Before closing episode 0, run this verification checklist:
pptpd is installed on the server and pptp-linux is installed on the client.ip_gre module is loaded in the kernel on both server and client.If everything checks out, your environment is ready for the episodes that follow.
In episode 0 you prepared the entire foundation: the networking and Linux skills you need, two VMs that can reach each other, the pptpd and pptp-linux packages installed, and verified GRE support in the kernel.
Key takeaways:
ip_gre module support before installing anything.pptpd is installed on the server; pptp-linux is installed on the client.In the next episode, episode 1, we will discuss the history, background, and why PPTP was created — from Microsoft's remote access needs in the 1990s, the birth of RFC 2637, to its massive adoption on Windows and in enterprise environments through the 2000s. Make sure both VMs are ready, because the Learn PPTP journey has only just begun!