Introduction
Anyone who has worked with VPS servers knows that high-value NAT VPS (NAT小鸡) instances are budget-friendly and feature excellent network routes. However, their primary drawback is the lack of a dedicated public IP address and no complete access to default ports 80 and 443.
When attempting to deploy a secure website or service on a NAT machine, traditional SSL certificate issuance methods—such as acme.sh combined with Nginx via HTTP-01 verification—typically fail immediately with errors caused by unavailable port 80.
In this guide, we will walk through the entire process from scratch: from purchasing a VPS and registering a domain name, to utilizing the DNS verification mode in acme.sh to bypass port 80/443 restrictions and issue HTTPS certificates seamlessly!
1. Prerequisites: VPS and Domain Purchase
Before starting the configuration, we need to prepare two essential components: a NAT VPS and a top-level domain name.
1.1 VPS Purchase & Key Considerations
- Selection Advice: When buying a NAT VPS, check the port mapping rules provided by the host provider. Typically, providers allocate specific external ports for SSH access and custom services.
- OS Environment: Installing a clean instance of Debian 11/12 or Ubuntu 22.04 is recommended.
1.2 Domain Purchase & DNS Delegation
- Registrars: You can purchase affordable domain names from platforms like NameSilo, Porkbun, Cloudflare, or domestic providers like Tencent Cloud / Alibaba Cloud.
- Critical Step: To facilitate automated DNS verification via API later, it is strongly recommended to delegate your domain’s DNS resolution to Cloudflare (free of charge and offers robust API management).
2. Problem Analysis: Why Traditional HTTP Verification Fails on NAT Instances
Before diving into the setup, let’s examine the core issue:
- Traditional Method (HTTP-01): Certificate Authorities (such as Let’s Encrypt) send an HTTP request to your server, which must validate domain ownership via Port 80.
- The NAT Dilemma: Port 80 and Port 443 on a NAT VPS are usually occupied by the host node or