從零到公網:本地電腦部署服務并實現公網訪問(IPv4/IPv6/DDNS 全攻略)
適用場景:本地 API 服務、大模型推理服務、NAS、遠程桌面等需要公網訪問的場景
關鍵詞:公網 IP、端口映射、內網穿透、IPv6、Cloudflare DDNS
一、背景
很多開發者在本地電腦上部署了服務(例如大模型 API),希望能讓外網直接訪問。但現實中,運營商 NAT、雙層路由、動態 IP 等問題讓公網訪問變得復雜。
本文將結合實際案例,詳細講解如何判斷自己的網絡環境,并給出 IPv4 端口映射、內網穿透、IPv6 直連、Cloudflare DDNS 等多種解決方案。
二、判斷是否有公網 IPv4
1. 查詢當前出口 IP
在命令行執行:
curl myip.ipip.net
示例輸出:
當前 IP: 112.123.15.45來自于: 中國 安徽 合肥 聯通
這就是你當前的公網出口 IP。
2. 查看路由器 WAN 口 IP
- 登錄路由器后臺(常見地址
192.168.0.1
/192.168.1.1
) - 查看 WAN 口 IP
- 對比 WAN 口 IP 與公網查詢結果:
- 一致 → 你有公網 IP
- 不一致 → 你在運營商 NAT 后面(CGNAT)
3. 判斷是否是私有地址
常見私有網段:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
100.64.0.0/10
(運營商級 NAT)
如果 WAN 口 IP 在這些網段內,就不是公網 IP。
三、IPv4 公網訪問方案
方案 1:有公網 IP(推薦)
- 在路由器做 端口映射(Port Forwarding)
將公網端口(如 8000)映射到本機內網 IP(如 192.168.0.100:8000) - Windows 防火墻放行該端口
- 外網訪問:
http://公網IP:8000
方案 2:雙層 NAT(光貓 + 路由器)
- 光貓 WAN 口是公網 IP → 光貓端口映射到路由器,再由路由器映射到本機
- 光貓 WAN 口是內網 IP(如 100.x.x.x) → 運營商 NAT,無法直接映射
方案 3:運營商 NAT(無公網 IP)
- 聯系運營商申請“公網 IPv4”或“去 NAT 服務”
- 或使用 內網穿透:
- frp(需公網 VPS)
- cpolar(國內服務)
- 花生殼(帶域名)
- ngrok(國外)
四、IPv6:突破 NAT 限制的利器
IPv6 地址資源充足,運營商一般會直接分配公網 IPv6,不需要 NAT。
1. 檢測 IPv6
訪問 test-ipv6.com,得分 10/10 表示可用。
Windows 查看:
ipconfig
找到 2408:
/ 2a0:
開頭的 IPv6 地址。
2. 開啟 IPv6
- 光貓:開啟 IPv4/IPv6 雙棧
- 路由器:開啟 IPv6(DHCPv6-PD)
- 本機:確保網絡適配器啟用 IPv6
3. 外網訪問
直接用:
http://[你的IPv6地址]:端口
注意 IPv6 地址要用方括號。
五、用 Cloudflare DDNS 固定 IPv6 域名
如果 IPv6 地址會變,可以用 Cloudflare API 自動更新 AAAA 記錄。
1. 獲取必要信息
- Zone ID(域名唯一標識)
- API Token(DNS 編輯權限)
- 目標子域名(如
api.example.com
)
2. 添加 AAAA 記錄
在 Cloudflare DNS 頁面添加 AAAA 記錄,IPv6 地址先隨便填一個。
3. Python DDNS 腳本
import requests, subprocessZONE_ID = "你的ZoneID"
RECORD_ID = "你的RecordID"
API_TOKEN = "你的APIToken"
RECORD_NAME = "api.example.com"def get_ipv6():result = subprocess.run("ipconfig", shell=True, capture_output=True, text=True)for line in result.stdout.splitlines():if "240" in line or "2a0" in line:return line.strip().split()[0].split("/")[0]return Noneipv6 = get_ipv6()
if ipv6:url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}"headers = {"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}data = {"type": "AAAA", "name": RECORD_NAME, "content": ipv6, "ttl": 120, "proxied": False}print(requests.put(url, headers=headers, json=data).json())
else:print("未找到公網IPv6地址")
4. 定時運行
- Windows:任務計劃程序
- Linux:
crontab
六、總結
場景 | 方案 |
---|---|
有公網 IPv4 | 路由器端口映射 |
雙層 NAT | 光貓橋接 + 路由器撥號 |
運營商 NAT | 申請公網 IP / 內網穿透 |
IPv6 可用 | 直接公網訪問,配合 DDNS 固定域名 |
建議:如果 IPv6 可用,優先走 IPv6 直連 + DDNS,配置簡單、延遲低、穩定性高。
后記
本文從判斷公網 IP 開始,到 IPv4/IPv6 的公網訪問方案,再到 Cloudflare DDNS 的自動更新,覆蓋了本地服務公網化的常見路徑。
無論你是部署大模型 API,還是搭建 NAS、遠程桌面,都可以按本文思路實現公網訪問。