🌐 DDNS 动态域名实现内网穿透
<p class="subtitle">无公网IP通过域名访问家庭服务器 | 2026-04-02</p>
<div class="info">
<strong>📋 目录</strong>
<ul>
<li><a href="#背景" style="color:#60a5fa;">背景:无公网IP的困境</a></li>
<li><a href="#方案对比" style="color:#60a5fa;">主流方案对比</a></li>
<li><a href="#ddns原理" style="color:#60a5fa;">DDNS 工作原理</a></li>
<li><a href="#路由器ddns" style="color:#60a5fa;">路由器 DDNS 配置(推荐)</a></li>
<li><a href="#服务商" style="color:#60a5fa;">免费 DDNS 服务商推荐</a></li>
<li><a href="#完整流程" style="color:#60a5fa;">完整配置流程</a></li>
<li><a href="#安全注意" style="color:#60a5fa;">安全注意事项</a></li>
<li><a href="#总结" style="color:#60a5fa;">总结</a></li>
</ul>
</div>
<h2 id="背景">🔍 背景:无公网IP的困境</h2>
<div class="section">
<p>国内大多数家庭宽带用户都面临一个问题:<strong>没有公网IP</strong>。</p>
<p>运营商通常提供的是:</p>
<ul>
<li><strong>NAT 私家基站</strong>:手机信号基站,共享公网出口</li>
<li><strong>大内网</strong>:整栋楼或小区共享一个公网IP</li>
</ul>
<p>这意味着:</p>
<ul>
<li>❌ 无法直接从外部访问家庭服务器</li>
<li>❌ 无法绑定域名做 HTTPS</li>
<li>❌ SSH、远程桌面都很麻烦</li>
</ul>
</div>
<div class="warning">
<strong>⚠️ 常见误区</strong>
<p>很多人以为有了域名就能访问,这是错的。<strong>域名只是门牌号</strong>,它需要指向一个能被外部访问的IP。如果IP是内网的,域名毫无意义。</p>
</div>
<h2 id="方案对比">⚖️ 主流方案对比</h2>
<div class="section">
<p>解决无公网IP访问内网的方案有以下几种:</p>
</div>
<table>
<tr>
<th>方案</th>
<th>原理</th>
<th>速度</th>
<th>配置难度</th>
<th>成本</th>
</tr>
<tr>
<td><strong>DDNS + 端口映射</strong></td>
<td>动态域名指向家宽IP,路由器端口映射</td>
<td>🚀 快(直连)</td>
<td>⭐⭐ 简单</td>
<td>免费~¥30/年</td>
</tr>
<tr>
<td><strong>内网穿透(frp/nat123)</strong></td>
<td>中继服务器转发流量</td>
<td>🐢 取决于中继</td>
<td>⭐⭐⭐ 中等</td>
<td>免费~¥50/月</td>
</tr>
<tr>
<td><strong>Tailscale/ZeroTier</strong></td>
<td>P2P VPN 组网</td>
<td>🚀 快(P2P)</td>
<td>⭐ 简单</td>
<td>免费</td>
</tr>
<tr>
<td><strong>向日葵/ToDesk</strong></td>
<td>商业远程桌面软件</td>
<td>🐢 一般</td>
<td>⭐ 简单</td>
<td>免费~¥200/年</td>
</tr>
</table>
<div class="success">
<strong>💡 本文重点:DDNS + 端口映射</strong>
<p>这是<strong>速度最快、成本最低</strong>的方案。路由器拨号获取真实公网IP时完全可行。</p>
</div>
<h2 id="ddns原理">🔧 DDNS 工作原理</h2>
<div class="section">
<h3>什么是 DDNS?</h3>
<p><strong>DDNS(Dynamic Domain Name System)</strong> = 动态域名系统。</p>
<p>普通 DNS 是"静态的":域名 → 固定IP,IP 变了就失效。</p>
<p>DDNS 是"动态的":域名 → 随时变化的IP,IP 变了自动更新。</p>
</div>
<div class="section">
<h3>DDNS 工作流程</h3>
<pre><code>┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 家庭路由器 │ │ DDNS 服务商 │ │ 你的电脑 │
│ (拨号获取IP)│ │ (云端) │ │ (在外面) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ 1. 检测到IP变化 │ │
│───────────────────>│ │
│ │ │
│ 2. 更新域名解析 │ │
│ │ │
│<────────────────────────────────────────│
│ 3. 域名 → 你的公网IP │
│────────────────────────────────────────>│
│ │ │
│ 4. 访问家庭服务器 │
│<────────────────────────────────────────│
│ │ │
- 路由器检测到自己的公网IP发生变化
- 路由器把新IP发送给 DDNS 服务商
- DDNS 服务商更新域名解析
- 外部设备通过域名访问,自动路由到你的家庭服务器
<div class="section">
<h3>关键前提:需要真实的公网IP</h3>
<p>DDNS + 端口映射的前提是:<strong>你的路由器能获取到真实的公网IP</strong>。</p>
<p>如何判断:</p>
<ul>
<li>登录路由器管理界面,查看 WAN 口 IP</li>
<li>访问 <a href="https://www.ip138.com/" style="color:#60a5fa;">IP138</a>,对比两个IP是否一致</li>
<li>如果一致 → 可以用 DDNS;如果不一致(是内网IP)→ 需要其他方案</li>
</ul>
</div>
<h2 id="路由器ddns">📦 路由器 DDNS 配置(推荐)</h2>
<div class="section">
<h3>Step 1:确认路由器支持 DDNS</h3>
<p>大多数中高端路由器(小米、华为、华硕、TP-Link)都内置 DDNS 功能。</p>
<p>登录路由器后台,查找:</p>
<ul>
<li><code>高级设置 → 外部管理 → DDNS</code></li>
<li><code>路由设置 → 动态DNS</code></li>
</ul>
</div>
<div class="section">
<h3>Step 2:注册 DDNS 服务商</h3>
<p>国内推荐使用 <strong>花生壳</strong>(免费版够用)或<strong>腾讯云/阿里云解析</strong>。</p>
<p>以花生壳为例:</p>
<ol>
<li>访问 <a href="https://hsk.oray.com/" style="color:#60a5fa;">花生壳官网</a> 注册账号</li>
<li>登录后在"管理中心"创建"内网穿透"服务</li>
<li>会获得一个免费域名(如 <code>xxx.oicp.net</code>)</li>
<li>或者购买自己的域名(如 <code>yourname.com</code>)</li>
</ol>
</div>
<div class="section">
<h3>Step 3:在路由器中配置 DDNS</h3>
<p>登录路由器后台,找到 DDNS 设置页面,填写:</p>
<table>
<tr>
<th>配置项</th>
<th>示例值</th>
<th>说明</th>
</tr>
<tr>
<td><strong>服务商</strong></td>
<td>花生壳 / Oray</td>
<td>选择你注册的服务商</td>
</tr>
<tr>
<td><strong>域名</strong></td>
<td>yourname.oicp.net</td>
<td>服务商提供的免费域名</td>
</tr>
<tr>
<td><strong>用户名/密码</strong></td>
<td>oray账号/密码</td>
<td>DDNS服务商的登录凭证</td>
</tr>
<tr>
<td><strong>更新间隔</strong></td>
<td>5 分钟</td>
<td>检测IP变化的频率</td>
</tr>
</table>
<p>保存后,路由器会自动定时检测IP变化并更新。</p>
</div>
<div class="section">
<h3>Step 4:配置端口映射(端口转发)</h3>
<p>DDNS 只是让域名指向你的IP,<strong>端口映射</strong>才是把外部请求送到内网服务器。</p>
<p>在路由器中找到"端口映射"或"虚拟服务器":</p>
<table>
<tr>
<th>配置项</th>
<th>示例值</th>
<th>说明</th>
</tr>
<tr>
<td><strong>外部端口</strong></td>
<td>22022</td>
<td>外网访问用的端口(建议改非标准端口)</td>
</tr>
<tr>
<td><strong>内部IP</strong></td>
<td>192.168.1.100</td>
<td>你服务器的局域网IP</td>
</tr>
<tr>
<td><strong>内部端口</strong></td>
<td>22</td>
<td>服务器上SSH的实际端口</td>
</tr>
<tr>
<td><strong>协议</strong></td>
<td>TCP</td>
<td>通常选TCP即可</td>
</tr>
</table>
</div>
<div class="success">
<strong>✅ 配置完成后</strong>
<p>外部访问流程:</p>
<pre><code>你的电脑 ---> ssh -p 22022 [email protected]
↓
路由器:22022
↓
端口映射
↓
服务器:22</code></pre>
</div>
<h2 id="服务商">🌐 免费 DDNS 服务商推荐</h2>
<div class="section">
<h3>1. 花生壳(Oray)— 推荐国内用户</h3>
<ul>
<li>✅ 免费版提供 <code>*.oicp.net</code> 域名</li>
<li>✅ 路由器支持率高,内网穿透功能完善</li>
<li>✅ 有客户端软件,手机也能管理</li>
<li>⚠️ 免费版带宽有限(2Mbps),商业使用建议付费</li>
<li>⚠️ 域名较丑,不适合绑定到自己的域名</li>
</ul>
</div>
<div class="section">
<h3>2. 腾讯云解析 / 阿里云解析 — 自有域名首选</h3>
<ul>
<li>✅ 域名完全自主,可绑SSL证书</li>
<li>✅ 免费额度大(腾讯云100万次/日)</li>
<li>✅ 适合有自己域名的用户</li>
<li>❌ 需要自己写脚本更新IP(无路由器内置支持)</li>
<li>❌ 首次配置稍复杂</li>
</ul>
<p>如果你的域名在腾讯云/阿里云,可以用下面的脚本配合 DDNS:</p>
<pre><code># 腾讯云 DDNS 更新脚本(保存为 ddns.sh)
!/bin/bash
需设置环境变量:TX_SECRET_ID, TX_SECRET_KEY, DOMAIN, RECORD_LINE
获取当前公网IP
CURRENT_IP=$(curl -s https://api.ipify.org)
调用腾讯云API更新解析记录
具体参数参考腾讯云文档
</div>
<div class="section">
<h3>3. Dynu / No-IP — 国际老牌</h3>
<ul>
<li>✅ 完全免费,域名如 <code>*.dynu.com</code></li>
<li>✅ API 支持完善</li>
<li>⚠️ 服务器在国外,国内速度一般</li>
<li>⚠️ 免费版需每月确认一次(防止滥用)</li>
</ul>
</div>
<h2 id="完整流程">📝 完整配置流程(以花生壳为例)</h2>
<div class="section">
<h3>第一步:注册花生壳并实名认证</h3>
<ol>
<li>访问 <a href="https://hsk.oray.com/" style="color:#60a5fa;">花生壳官网</a></li>
<li>注册账号(需要手机号)</li>
<li>完成实名认证(国内服务商必需)</li>
</ol>
</div>
<div class="section">
<h3>第二步:添加内网映射</h3>
<ol>
<li>登录花生壳管理后台</li>
<li>点击"添加映射"</li>
<li>填写信息:
<ul>
<li>应用名称:SSH访问</li>
<li>内网主机:192.168.1.100(服务器IP)</li>
<li>内网端口:22(SSH)</li>
<li>外网端口:22022(自定义)</li>
</ul>
</li>
<li>保存后会获得外网访问地址</li>
</ol>
</div>
<div class="section">
<h3>第三步:测试访问</h3>
<pre><code># 在外网电脑或手机上测试
ssh -p 22022 user@your-server
或直接访问内网穿透的地址
ssh -p 22022 [email protected]
<div class="success">
<strong>🎉 花生壳内网穿透 vs DDNS 的区别</strong>
<p>注意!花生壳的"内网穿透"和传统DDNS是两回事:</p>
<ul>
<li><strong>内网穿透</strong>:通过花生壳服务器中继,不要求公网IP,但速度受限</li>
<li><strong>DDNS + 端口映射</strong>:直连你的公网IP,速度快,但需要路由器有公网IP</li>
</ul>
<p>如果你的宽带<strong>有公网IP</strong>,优先使用 DDNS + 端口映射!</p>
</div>
<h2 id="安全注意">🔐 安全注意事项</h2>
<div class="section">
<h3>1. 修改SSH默认端口</h3>
<p>22端口是扫描器重点目标,建议改成高位端口(如 22022):</p>
<pre><code># 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
找到 Port 22,改为
Port 22022
重启SSH
sudo systemctl restart sshd
<div class="section">
<h3>2. 使用密钥登录,禁止密码登录</h3>
<pre><code># 生成SSH密钥对(本地电脑)
ssh-keygen -t ed25519
复制公钥到服务器
ssh-copy-id -p 22022 [email protected]
编辑SSH配置禁用密码登录
sudo nano /etc/ssh/sshd_config
添加或修改:
PasswordAuthentication no
PubkeyAuthentication yes
<div class="section">
<h3>3. 使用fail2ban防止暴力破解</h3>
<pre><code># 安装fail2ban
sudo apt install fail2ban -y
启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
<div class="section">
<h3>4. 防火墙规则</h3>
<pre><code># 只允许特定IP访问SSH(推荐)
sudo ufw allow from 你的固定IP to any port 22022
或只允许内网访问
sudo ufw allow from 192.168.1.0/24 to any port 22022
<div class="warning">
<strong>⚠️ 重要提醒</strong>
<ul>
<li>DDNS域名本身有被封风险,建议同时做数据备份</li>
<li>不要把所有端口都暴露,按需开放</li>
<li>定期检查路由器固件更新</li>
<li>有条件的话使用 VPN(如 WireGuard)代替直接暴露端口</li>
</ul>
</div>
<h2 id="总结">📝 总结</h2>
<div class="section">
<h3>DDNS + 端口映射适合的场景</h3>
<ul>
<li>✅ 家庭宽带有公网IP</li>
<li>✅ 需要SSH、远程桌面访问</li>
<li>✅ 想绑定自己的域名</li>
<li>✅ 对速度要求高(直连无中继)</li>
</ul>
</div>
<div class="section">
<h3>需要用其他方案的场景</h3>
<ul>
<li>❌ 宽带没有公网IP → 用花生壳内网穿透或 ZeroTier</li>
<li>❌ 需要HTTPS访问 → 用 Cloudflare Tunnel 或 frp + Nginx</li>
<li>❌ 不想折腾 → 用向日葵/ToDesk</li>
</ul>
</div>
<div class="success">
<strong>💡 最佳实践</strong>
<p>DDNS + WireGuard 是完美的家庭远程访问组合:</p>
<ul>
<li><strong>DDNS</strong>:解决域名指向问题</li>
<li><strong>WireGuard</strong>:提供加密隧道,无需暴露任何端口</li>
<li><strong>端口映射</strong>:仅在需要时使用</li>
</ul>
</div>
<hr>
<div class="info">
<strong>📚 参考资料</strong>
<ul>
<li><a href="https://hsk.oray.com/" style="color:#60a5fa;">花生壳官网</a></li>
<li><a href="https://www.wireguard.com/" style="color:#60a5fa;">WireGuard 官网</a></li>
<li><a href="https://hsk.oray.com/news/detail/202203151020" style="color:#60a5fa;">花生壳内网穿透 vs DDNS 区别</a></li>
</ul>
</div>