Setting up a VPN specifically to enable secure Remote Desktop access is a common requirement for site administrators, developers, and business users. While PPTP is an older protocol with known security limitations, it remains simple to deploy and compatible with most client devices. This guide walks through a practical, technical, step-by-step implementation of a PPTP VPN server on a Linux host (typically Ubuntu/Debian) and client configuration for Windows/macOS/Linux, plus networking, firewall, and Remote Desktop (RDP) considerations. The goal is to get remote desktop sessions through a dedicated IP over PPTP with clear operational and security notes.
Overview and security considerations
Before diving into configuration, understand the trade-offs. PPTP uses GRE (protocol 47) and a control channel on TCP port 1723. Its MS-CHAPv2 authentication has known vulnerabilities; attackers with sufficient resources can crack captured handshakes. For production environments requiring strong confidentiality and integrity, consider OpenVPN or WireGuard. However, if you must use PPTP due to legacy client constraints, mitigate risks by:
- Using strong, unique passwords and per-user credentials.
- Restricting VPN access by source IP where possible (firewall rules).
- Limiting exposed services on the VPN server and enforcing least privilege.
- Monitoring VPN logs and enabling account lockouts on repeated failures.
- Running PPTP on a host that also enforces host-level security hardening.
Prerequisites
Ensure you have:
- A public-facing server or router with a dedicated public IP that can accept TCP 1723 and GRE (protocol 47) traffic.
- Root or sudo access on the VPN host (Linux preferred for this guide).
- Firewall/router ability to configure NAT and port forwarding if the VPN host is behind another device.
- Remote Desktop host(s) on the internal network reachable from the VPN server.
Step 1 — Install PPTP server software
On Debian/Ubuntu platforms, install the PPTP daemon package. The primary package is pptpd. Use the system package manager: apt-get install pptpd. The daemon implements the PPTP control channel and delegates PPP link management to pppd.
Important configuration files
The key files you will edit are:
- /etc/pptpd.conf — PPTP daemon options (localip/remoteip, listen address).
- /etc/ppp/pptpd-options — PPP options (authentication, DNS, MTU/MRU, encryption flags).
- /etc/ppp/chap-secrets — User credentials for MS-CHAPv2 authentication.
Step 2 — Configure pptpd.conf
Open /etc/pptpd.conf and set the server and client IP pools. Example: localip 10.0.0.1 and remoteip 10.0.0.100-10.0.0.200. The localip is the VPN server’s internal endpoint for PPP; remoteip gives clients addresses in a private pool. If the VPN server must bridge to an existing LAN, you can assign addresses in that subnet, but bridging adds complexity.
Also check the option to bind to a specific local interface or the default. Save and restart pptpd after editing.
Step 3 — Harden PPP options
Edit /etc/ppp/pptpd-options. Key options to include:
- refuse-pap — disables PAP authentication.
- require-mschap-v2 — enforces MS-CHAPv2.
- ms-dns <primary DNS> and ms-dns <secondary DNS> — pushes DNS to clients.
- mtu 1400 mru 1400 — reduce MTU/MRU to improve reliability when traversing tunnels and avoid fragmentation. Adjust values if your path MTU differs.
- name "PPTPServer" — optional peer name.
Example entries: require-mschap-v2, refuse-pap, ms-dns 8.8.8.8, ms-dns 8.8.4.4, mtu 1400, mru 1400.
Step 4 — Add user credentials
Edit /etc/ppp/chap-secrets to add accounts. The file format is: <username> <server> <password> <IP address or range>. For example: john pptpd S3cur3P@ssw0rd 10.0.0.101. Use unique passwords per user and consider generating them with a secure password manager. Avoid plaintext distribution — use secure channels to provision credentials.
Step 5 — Enable IP forwarding and NAT
To allow VPN clients to reach internal hosts (such as an RDP server) and the internet, enable IP forwarding on the VPN host. For Linux:
- Echo 1 to /proc/sys/net/ipv4/ip_forward or set net.ipv4.ip_forward=1 in /etc/sysctl.conf and run sysctl -p.
If the VPN host is acting as a gateway between the Internet and internal network, set up NAT (masquerade) using iptables. Example rules:
- iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE (replace eth0 with public interface).
- iptables -A FORWARD -i eth0 -o ppp+ -m state –state RELATED,ESTABLISHED -j ACCEPT.
- iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT.
Persist iptables rules using your preferred method (iptables-save/restore, nftables translation, or system-specific firewall config).
Step 6 — Open necessary ports and GRE
PPTP requires TCP port 1723 and GRE (IP protocol 47). On cloud platforms or hardware firewalls ensure both are permitted to reach the PPTP host. On the local firewall, allow inbound TCP/1723 to the host and ensure the kernel accepts GRE. Example UFW rules (if using UFW): allow 1723/tcp and allow proto gre. Verify GRE support by checking iptables/raw/connection tracking modules if encountering connection issues.
Step 7 — Start the service and debug
Restart pptpd (systemctl restart pptpd). Monitor logs for negotiation details. On Debian/Ubuntu, check /var/log/syslog or use journalctl -u pptpd. Useful log lines show CHAP authentication attempts, PPP IP assignments, and link up/down events. If clients can connect but have no network access, re-check IP forwarding, NAT, and iptables forwarding rules. If authentication fails, validate entries in /etc/ppp/chap-secrets and confirm the server is requiring MS-CHAPv2 as configured.
Client configuration: Windows
On Windows, create a new VPN connection using the built-in VPN client:
- Open Network Settings → Add a VPN connection.
- VPN provider: Windows (built-in). Connection name: e.g., PPTP-VPN.
- Server name or address: public IP or hostname of your PPTP server.
- VPN type: Point to Point Tunneling Protocol (PPTP).
- Type of sign-in info: Username and password.
After creating the connection, edit the adapter properties: Networking tab → Internet Protocol Version 4 (TCP/IPv4) properties → Advanced → uncheck “Use default gateway on remote network” if you only want RDP traffic to go over the VPN and not all Internet traffic (split tunneling). Under Security, ensure the encryption settings allow MS-CHAPv2 and that obsolete options are disabled.
Client configuration: macOS and Linux
macOS built-in VPN client supports PPTP in older versions; newer macOS versions removed PPTP due to security concerns. For Linux, NetworkManager plugins can create PPTP connections (network-manager-pptp). Configure username/password and ensure MSCHAPv2 is selected. Set the remote gateway and DNS options to receive server-provided DNS if required.
RDP considerations and host configuration
Remote Desktop typically uses TCP/3389. When a client connects via the PPTP VPN, they will receive a VPN IP and can directly RDP to the internal host using its LAN IP. If you prefer to route RDP through the VPN host itself (port forwarding), use firewall/NAT rules to forward a specific public port to internal host: iptables -t nat -A PREROUTING -p tcp –dport 3390 -j DNAT –to-destination 10.1.2.3:3389 and then allow forwarding. However, placing RDP behind the VPN so the port is not exposed publicly is more secure.
Troubleshooting tips
- If the PPTP client connects but has no Internet access, verify net.ipv4.ip_forward is enabled and NAT rules applied.
- If the client shows “No network access” on Windows, check the PPP logs and confirm MS-CHAPv2 authentication succeeded.
- GRE-related issues commonly indicate upstream firewall or cloud provider not allowing protocol 47; confirm provider supports GRE tunnels.
- Use tcpdump on the VPN host to capture TCP 1723 and GRE traffic for analysis (note: must be run as root and analyze packets carefully).
- Consider increasing PPPd debugging verbosity in /etc/ppp/pptpd-options (e.g., debug) to capture detailed negotiation traces.
Operational and maintenance notes
Maintain a patching and monitoring schedule for the VPN host. Rotate user credentials periodically and remove stale accounts from /etc/ppp/chap-secrets. Use centralized logging and alerts for repeated failed authentications that might indicate brute force attempts. Consider enabling two-factor authentication at the application layer (for example, require an additional auth token for RDP access or use RDP gateways that support multi-factor authentication).
When to choose alternatives
If compliance, data protection, or modern cryptographic assurances are required, choose an alternative VPN technology. OpenVPN and WireGuard provide stronger encryption and modern cipher suites, while IPsec is widely supported by enterprise hardware. Use PPTP only when legacy compatibility is the determining factor and accepted after assessing risks.
Conclusion
Deploying a PPTP VPN to enable Remote Desktop access can be quick and broadly compatible, but it requires careful configuration of PPP options, IP forwarding, NAT, and firewall rules. Pay attention to authentication choices, GRE and TCP/1723 reachability, MTU tuning, and RDP routing to achieve reliable connections. Regular maintenance, monitoring, and applying compensating controls will help mitigate some of PPTP’s inherent security weaknesses.
For more guides on VPN deployment and dedicated IP configuration, visit Dedicated-IP-VPN at https://dedicated-ip-vpn.com/.