Introduction
Deploying an L2TP/IPsec VPN inside a VMware ESXi environment is a common requirement for businesses that need secure remote access with straightforward client compatibility. This guide walks through a practical, step‑by‑step configuration to host an L2TP VPN server as a virtual machine on ESXi, covering networking design, VM sizing, operating system choices, detailed service configuration (strongSwan + xl2tpd on Linux), firewall/NAT rules, and operational tips for reliability and performance.
High-level Architecture and Design Decisions
Before you begin, decide on a few architecture choices that will affect the implementation:
- VPN software: For Linux, the recommended stack is strongSwan (IPsec) + xl2tpd (L2TP). This combination supports PSK and certificate authentication and is well supported by major clients (Windows, macOS, iOS, Android).
- Network topology: Typical layouts use a dedicated edge VM with two vNICs—one on the external/public port group and one on a private/internal port group for LAN access. Alternatively, a single vNIC with correct routing and NAT works for simpler deployments.
- Authentication method: Use certificates for increased security in production. Pre-shared keys (PSK) are simpler for quick setups but less secure.
- HA and scale: For resilience, plan for multiple VPN VMs behind a load balancer or use a firewall appliance (like pfSense) in front as a reverse NAT/load distribution point.
Prerequisites on VMware ESXi
Complete these tasks on the ESXi host before creating the VPN VM:
- Create or identify a datastore for the VM files and ISO images.
- Configure a vSwitch and port groups: at least one public port group (with external connectivity) and optionally one internal port group for LAN routing.
- Reserve required resources: 1–2 vCPUs and 1–2 GB RAM are sufficient for small teams; increase CPU/RAM for higher concurrency.
- If using VLANs, ensure the physical switch and vSwitch port group allow the required VLAN IDs.
Step 1 — Create the VM and Install the OS
Choose a lightweight, current server OS. This guide assumes Ubuntu Server (22.04+), but Debian works equally well.
- Create a new VM: VM Compatibility as supported by your ESXi version, Guest OS set to Linux → Ubuntu.
- Allocate disks, CPU, and RAM: e.g., 2 vCPU, 2 GB RAM, 20 GB disk.
- Add two network adapters if you plan to segregate public and internal traffic; otherwise one adapter is OK.
- Attach the Ubuntu ISO and boot to install. Install OpenSSH server during the OS installation for remote management.
- Install VMware Tools (open-vm-tools) for proper VM performance and time sync.
Step 2 — Basic Linux Networking and System Prep
After the OS is installed and you have SSH access:
- Set a static public IP on the external NIC (or reserve a static DHCP lease).
- Enable packet forwarding:
- Install required packages:
Temporarily:
sysctl -w net.ipv4.ip_forward=1
Permanently: edit /etc/sysctl.conf and ensure net.ipv4.ip_forward=1 is present, then run sysctl -p.
sudo apt update && sudo apt install -y strongswan xl2tpd ppp iptables iproute2
Step 3 — Configure IPsec (strongSwan)
strongSwan handles the IPsec transport for L2TP. The essential files are /etc/ipsec.conf and /etc/ipsec.secrets.
Example /etc/ipsec.conf (PSK example for clarity):
conn L2TP-PSK
authby=psk
pfs=no
auto=add
keyingtries=3
rekey=no
ike=aes256-sha1-modp1024
esp=aes256-sha1
keyexchange=ikev1
left=%any
leftid=@vpn.example.com
leftcert=serverCert.pem # if using certs
leftsendcert=always
leftfirewall=yes
leftsubnet=0.0.0.0/0
right=%any
rightprotoport=17/1701
Place PSK in /etc/ipsec.secrets:
@vpn.example.com : PSK “YourStrongPSKHere”
Notes:
- Use strong algorithms and avoid obsolete ciphers. For production, prefer IKEv2 with certificates.
- If using certificates, generate server and CA certs and configure leftcert and CA accordingly.
Step 4 — Configure xl2tpd and PPP
xl2tpd proxies L2TP sessions into PPP. Key files are /etc/xl2tpd/xl2tpd.conf and /etc/ppp/chap-secrets.
Example /etc/xl2tpd/xl2tpd.conf:
[global]
ipsec saref = yes
[lns default]ip range = 10.10.10.10-10.10.10.50
local ip = 10.10.10.1
require authentication = yes
name = L2TPVPN
ppp debug = no
pppoptfile = /etc/ppp/options.xl2tpd
Create /etc/ppp/options.xl2tpd with typical PPP options:
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
mtu 1400
mru 1400
lock
proxyarp
nodefaultroute
Add user accounts to /etc/ppp/chap-secrets (format: username server password ip):
testuser l2tpd strongpassword *
Adjust MTU/MRU to avoid fragmentation over IPsec; 1400 is a common safe value.
Step 5 — Configure Firewall and NAT
Open and forward required ports on ESXi edge and the VM’s OS firewall:
- UDP 500 (IKE)
- UDP 4500 (NAT-T)
- UDP 1701 (L2TP)
On the VPN VM, configure iptables rules for forwarding and NAT. Example basic rules:
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.10.10.0/24 -j ACCEPT
iptables -A FORWARD -d 10.10.10.0/24 -j ACCEPT
Ensure safety by allowing only required traffic. Persist rules with iptables-persistent or systemd scripts.
Step 6 — Start and Test Services
Enable and start strongSwan and xl2tpd:
sudo systemctl enable strongswan xl2tpd
sudo systemctl start strongswan xl2tpd
Check logs for errors:
sudo journalctl -u strongswan -f
On the client side (Windows example): create a new VPN connection, choose L2TP/IPsec with pre-shared key, set username/password, and connect. If you see connection failures, tail logs (strongSwan and xl2tpd) and inspect packet captures with tcpdump on the VM to verify UDP ports and NAT traversal.
Troubleshooting Tips
Common issues and diagnostic steps:
- Ports blocked: Verify UDP 500/4500/1701 open on upstream firewall and ESXi port group.
- PSK mismatch: Ensure client and server PSKs match exactly (no trailing spaces).
- MTU problems: If connections establish but traffic is flaky, lower MTU/MRU on PPP or enable MSS clamping on iptables: iptables -t mangle -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
- IP forwarding disabled: Confirm net.ipv4.ip_forward=1 and that iptables FORWARD policy/chain allow traffic.
- Logs: strongSwan logs show IKE negotiation; xl2tpd logs show L2TP session events; /var/log/syslog includes PPP messages.
- NAT traversal: Clients behind NAT require UDP 4500—verify NAT-T is working and that ESP traffic is not needed (IPsec NAT-T encapsulates ESP in UDP 4500).
Operational Considerations and Best Practices
To run a robust L2TP VPN on ESXi in production:
- Use certificates for authentication instead of PSK to prevent credential sharing and improve security.
- Automate backups and configuration management—store IPsec/xl2tpd configs in version control and use configuration management tools (Ansible, Puppet).
- Monitoring: monitor CPU, memory, and network interfaces on the VM. Track connection counts and authentication failures.
- Scaling: for high concurrency, scale vertically (more vCPUs) or horizontally (multiple VPN VMs behind an HA load balancer). Consider using IPsec-aware load balancers that support UDP 500/4500 and load balancing with session persistence.
- Security hardening: disable unnecessary services on the VM, keep software updated, and limit SSH access via firewall or VPN-only management network.
- Snapshots and rolling updates: use ESXi snapshots for quick rollback during upgrades, but avoid long‑term snapshot usage due to performance and storage growth.
Performance Tuning
For better throughput:
- Enable multi-threading and assign multiple vCPUs; IPsec crypto benefits from more CPU for heavy encryption loads.
- Enable hardware offload on the physical NICs if available (but test as some offload features can interfere with packet processing in VMs).
- Use larger MTU on physical network and tune TCP MSS to avoid fragmentation.
- Consider AES-NI capable CPUs and enable AES-GCM ciphers for better performance when supported by clients.
Security Notes
L2TP/IPsec provides good compatibility but is older than modern alternatives like WireGuard or IKEv2 with EAP certificates. For new deployments where client support permits, evaluate:
- WireGuard for simplicity and performance.
- strongSwan IKEv2 with EAP/MSCHAPv2 or certificate authentication for stronger security with native client support.
However, L2TP/IPsec remains useful where legacy client compatibility is required (older Windows/macOS/iOS versions).
Conclusion and Quick Checklist
Use this checklist to verify your deployment:
- ESXi VM created with appropriate vCPU, memory, disk, and vNIC configuration
- OS installed, open‑vm‑tools configured
- IP forwarding enabled and kernel tuned
- strongSwan and xl2tpd installed and configured
- PPP and user authentication configured
- Firewall and NAT rules applied on VM and ESXi edge
- Ports UDP 500, 4500, 1701 reachable from clients
- Logging and monitoring enabled for production operations
With these steps, you’ll have a functional, maintainable L2TP/IPsec VPN running on VMware ESXi that supports standard clients and offers a stable remote access solution.
For additional resources, templates, and troubleshooting scripts, visit Dedicated‑IP‑VPN at https://dedicated-ip-vpn.com/.