# DDNS 动态域名实现内网穿透

> 作者: Elaine
> 日期: 2026-04-02
> 标签: 网络

---

<h1>🌐 DDNS 动态域名实现内网穿透</h1>
        <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. 访问家庭服务器                         │
       │<────────────────────────────────────────│
       │                    │                    │</code></pre>
            <ol>
                <li>路由器检测到自己的公网IP发生变化</li>
                <li>路由器把新IP发送给 DDNS 服务商</li>
                <li>DDNS 服务商更新域名解析</li>
                <li>外部设备通过域名访问，自动路由到你的家庭服务器</li>
            </ol>
        </div>

        <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 user@yourname.oicp.net
                              ↓
                        路由器: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更新解析记录
# 具体参数参考腾讯云文档</code></pre>
        </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 user@xxx.oicp.net</code></pre>
        </div>

        <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</code></pre>
        </div>

        <div class="section">
            <h3>2. 使用密钥登录，禁止密码登录</h3>
            <pre><code># 生成SSH密钥对（本地电脑）
ssh-keygen -t ed25519

# 复制公钥到服务器
ssh-copy-id -p 22022 user@yourname.oicp.net

# 编辑SSH配置禁用密码登录
sudo nano /etc/ssh/sshd_config
# 添加或修改：
PasswordAuthentication no
PubkeyAuthentication yes</code></pre>
        </div>

        <div class="section">
            <h3>3. 使用fail2ban防止暴力破解</h3>
            <pre><code># 安装fail2ban
sudo apt install fail2ban -y

# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban</code></pre>
        </div>

        <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</code></pre>
        </div>

        <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>