# 电脑远程连接阿里云服务器：WireGuard VPN 实战

> 作者: Elaine
> 日期: 2026-04-01
> 标签: 网络, 运维

---

<h1>🖥️ 电脑远程连接阿里云：WireGuard VPN 实战</h1>
        <p class="subtitle">手把手操作 · 你的电脑 → 阿里云服务器 · 稳定隧道 | 2026-04-01</p>

        <div class="info">
            <div class="info-title">📋 目录</div>
            <ul>
                <li><a href="#before" style="color:#60a5fa;">操作前先确认</a></li>
                <li><a href="#arch" style="color:#60a5fa;">整体架构</a></li>
                <li><a href="#server" style="color:#60a5fa;">第一步：阿里云服务器配置</a></li>
                <li><a href="#client" style="color:#60a5fa;">第二步：你的电脑配置</a></li>
                <li><a href="#aliyun" style="color:#60a5fa;">第三步：阿里云安全组放行</a></li>
                <li><a href="#test" style="color:#60a5fa;">第四步：测试连接</a></li>
                <li><a href="#openvpn" style="color:#60a5fa;">备选方案：OpenVPN（如果 WireGuard 不通）</a></li>
                <li><a href="#faq" style="color:#60a5fa;">常见问题 FAQ</a></li>
            </ul>
        </div>

        <h2 id="before">🔍 操作前先确认</h2>

        <div class="section">
            <h3>你需要的信息</h3>
            <p>开始之前，先准备好以下信息，对着检查：</p>
            <table>
                <tr><th>项目</th><th>说明</th><th>你填一下</th></tr>
                <tr><td>服务器公网 IP</td><td>阿里云控制台可看到</td><td><code>____.___.___.___</code></td></tr>
                <tr><td>服务器 SSH 端口</td><td>默认 22，如果有改过就用你的</td><td><code>22</code></td></tr>
                <tr><td>你的电脑系统</td><td>Windows / macOS / Linux</td><td></td></tr>
            </table>
        </div>

        <div class="warning">
            <div class="warning-title">⚠️ 重要原则</div>
            <p>全程在<strong>阿里云服务器上执行命令</strong>（通过 SSH 连接），不在你本地电脑上生成密钥，避免私钥传输。</p>
        </div>

        <h2 id="arch">🏗️ 整体架构</h2>

        <div class="section">
            <p>WireGuard 会建立一张虚拟网卡，两端各分配一个内网 IP：</p>
            <pre><code>  你的电脑 (WireGuard 客户端)          阿里云服务器 (WireGuard 服务端)
  ──────────────────────────         ─────────────────────────────────
  wg0: 10.0.0.2/24  ◄── UDP 51820 ──►  wg0: 10.0.0.1/24
                                       eth0: 公网IP: 47.x.x.x
                                       lo:   127.0.0.1:18789 (OpenClaw)
                                             127.0.0.1:22    (SSH)

  连接后：
  你的电脑 → SSH → 10.0.0.1:22 （用 VPN 内网 IP 连接，不暴露公网 SSH）
  你的电脑 → 浏览器 → 10.0.0.1:18789 （OpenClaw Dashboard）</code></pre>
        </div>

        <div class="info">
            <div class="info-title">💡 为什么用 VPN 而不是直接暴露 SSH？</div>
            <ul>
                <li>家庭宽带没有固定公网 IP，直接 SSH 暴露端口有安全风险</li>
                <li>VPN 建立后，你用 <code>10.0.0.1</code> 这个固定内网 IP 访问，<strong>不暴露服务器公网端口</strong></li>
                <li>WireGuard UDP 协议，延迟低、性能好、耗电少</li>
            </ul>
        </div>

        <h2 id="server">🖥️ 第一步：阿里云服务器配置（服务端）</h2>

        <div class="step">
            <div class="step-title"><span class="step-num">1.1</span> SSH 登录到服务器</div>
<pre class="cmd-block"><code>ssh -p 22 root@你的服务器公网IP
# 或者用密钥登录
ssh -i ~/.ssh/your_key.pem root@你的服务器公网IP</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">1.2</span> 安装 WireGuard</div>
<pre class="cmd-block"><code># Ubuntu / Debian
apt update && apt install wireguard -y

# CentOS
# yum install epel-release -y
# yum install wireguard-tools -y</code></pre>
            <p style="color:#aaa;font-size:0.9em;margin-top:8px;">WireGuard 已经进入 Ubuntu 20.04+ 默认仓库，安装非常快。</p>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">1.3</span> 在服务器上生成密钥对</div>
<pre class="cmd-block"><code># 生成服务端密钥
wg genkey | tee server_private.key | wg pubkey > server_public.key
<span class="comment"># 查看服务端公钥（稍后要用）</span>
cat server_public.key</code></pre>
            <p style="color:#aaa;font-size:0.9em;margin-top:8px;">记住输出的公钥内容，如 <code>aBcDeFgH...</code>，下一步要用。</p>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">1.4</span> 写服务端配置文件</div>
<pre class="cmd-block"><code># 创建配置目录（如果不存在）
mkdir -p /etc/wireguard

# 创建 wg0.conf（服务端配置文件）
nano /etc/wireguard/wg0.conf</code></pre>
            <p style="color:#aaa;margin-bottom:10px;">写入以下内容，把 <code>&lt;服务端私钥&gt;</code> 替换成上一步生成的私钥：</p>
<pre class="cmd-block"><code><span class="comment"># 替换方法：先运行 cat server_private.key 拿到私钥</span>

[Interface]
PrivateKey = &lt;服务端私钥&gt;          <span class="comment"># 运行 cat server_private.key 获得</span>
Address = 10.0.0.1/24               <span class="comment"># 服务端固定内网 IP</span>
ListenPort = 51820                  <span class="comment"># UDP 监听端口</span>
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey  = CLIENT_PUBLIC_KEY      <span class="comment"># 客户端公钥（下一步在客户端生成）</span>
AllowedIPs = 10.0.0.2/32             <span class="comment"># 客户端固定内网 IP</span></code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">1.5</span> 开启 IP 转发</div>
<pre class="cmd-block"><code>echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">1.6</span> 启动 WireGuard</div>
<pre class="cmd-block"><code># 设置文件权限（安全要求）
chmod 600 /etc/wireguard/wg0.conf

# 启动
systemctl start wg-quick@wg0

# 开机自启
systemctl enable wg-quick@wg0

# 查看运行状态
wg show</code></pre>
            <p style="color:#4ade80;margin-top:8px;">✅ 如果 <code>wg show</code> 输出看到了 wg0 接口，说明 WireGuard 已正常运行。</p>
        </div>

        <h2 id="client">💻 第二步：你的电脑配置（客户端）</h2>

        <div class="section">
            <h3>客户端密钥生成（在服务器上操作，避免私钥传输）</h3>
<pre class="cmd-block"><code># 在服务器的 /tmp 目录下生成客户端密钥（生成后私钥在这里暂时保管）
wg genkey | tee client_private.key | wg pubkey > client_public.key
cat client_public.key
<span class="comment"># 输出 client 公钥，复制它，然后回到服务器端填入 wg0.conf</span></code></pre>
        </div>

        <div class="section">
            <h3>把客户端公钥填回服务器</h3>
<pre class="cmd-block"><code># 回到服务器，编辑 wg0.conf，替换 CLIENT_PUBLIC_KEY
nano /etc/wireguard/wg0.conf</code></pre>
            <p style="color:#aaa;font-size:0.9em;">把 <code>CLIENT_PUBLIC_KEY</code> 替换成上一步输出的客户端公钥，然后保存退出。</p>
<pre class="cmd-block"><code># 重启 WireGuard 使配置生效
systemctl restart wg-quick@wg0</code></pre>
        </div>

        <div class="section">
            <h3>把客户端私钥和安全地传到你的电脑</h3>
            <div class="warning">
                <div class="warning-title">⚠️ 关键：不要通过微信/QQ/邮件传私钥</div>
                <p>用以下安全方式之一：</p>
            </div>
<pre class="cmd-block"><code><span class="comment"># 方式1（推荐）：在服务器上base64编码，打印到终端，你手动抄下来</span>
cat client_private.key          <span class="comment"># 会显示类似 YGJhZDEyMzQ1Njc4OTBhIGFiY2Q= 这样的字符串</span>

<span class="comment"># 方式2：通过 SSH SCP 传文件（如果你电脑有 SSH client）</span>
scp root@你的服务器IP:/tmp/client_private.key ~/client_private.key

<span class="comment"># 方式3：base64 输出，手动复制</span>
base64 client_private.key       <span class="comment"># 复制输出内容，到你电脑上 base64 -d 还原</span></code></pre>
        </div>

        <div class="section">
            <h3>根据你的操作系统安装客户端</h3>

            <div class="two-col">
                <div>
                    <h4>🍎 macOS</h4>
<pre class="cmd-block"><code><span class="comment"># 用 Homebrew 安装</span>
brew install wireguard-tools

<span class="comment"># 或者下载官方客户端</span>
# https://www.wireguard.com/install/</code></pre>
                </div>
                <div>
                    <h4>🪟 Windows</h4>
<pre class="cmd-block"><code><span class="comment"># 下载官方客户端</span>
# https://download.wireguard.com/windows-client/wireguard-installer.exe</code></pre>
                </div>
            </div>

            <div class="two-col">
                <div>
                    <h4>🐧 Linux</h4>
<pre class="cmd-block"><code>sudo apt install wireguard -y</code></pre>
                </div>
                <div>
                    <h4>📱 iOS / Android</h4>
<pre class="cmd-block"><code><span class="comment"># App Store / Play Store 搜索 "WireGuard" 官方客户端</span></code></pre>
                </div>
            </div>
        </div>

        <div class="section">
            <h3>写客户端配置文件</h3>
            <p>在你的电脑上，创建配置文件 <code>~/wireguard/wg0.conf</code>（macOS/Linux）或通过客户端 App 导入：</p>
<pre class="cmd-block"><code><span class="comment"># macOS 用 sudo 创建配置文件</span>
sudo mkdir -p /etc/wireguard
sudo nano /etc/wireguard/wg0.conf

<span class="comment"># 配置文件内容（按实际情况替换）</span>
[Interface]
PrivateKey = &lt;客户端私钥&gt;              <span class="comment"># 上一步生成的客户端私钥</span>
Address    = 10.0.0.2/24               <span class="comment"># 客户端固定内网 IP</span>
DNS        = 223.5.5.5, 119.29.29.29   <span class="comment"># 国内 DNS，不劫持</span>

[Peer]
PublicKey  = &lt;服务端公钥&gt;              <span class="comment"># 服务器上 cat server_public.key 的输出</span>
Endpoint   = 你的服务器公网IP:51820   <span class="comment"># 如 47.98.123.456:51820</span>
AllowedIPs = 10.0.0.0/24              <span class="comment"># 只走 VPN 的网段（推荐）</span>
PersistentKeepalive = 25              <span class="comment"># 保持 UDP 连接（NAT 环境需要）</span></code></pre>

            <div class="info">
                <div class="info-title">💡 AllowedIPs 两种设置的区别</div>
                <ul>
                    <li><code>AllowedIPs = 10.0.0.0/24</code>（推荐）：<strong>只有访问 10.0.0.x 网段时才走 VPN</strong>，其他流量正常走本地宽带，不影响国内应用速度</li>
                    <li><code>AllowedIPs = 0.0.0.0/0</code>：所有流量都走 VPN，速度会慢，但更安全</li>
                </ul>
            </div>
        </div>

        <div class="section">
            <h3>macOS 启动 WireGuard</h3>
<pre class="cmd-block"><code># 启动 VPN 连接
sudo wg-quick up wg0

# 关闭 VPN
sudo wg-quick down wg0

# 开机自动连接（可选）
sudo ln -s /usr/local/bin/wg-quick /usr/local/bin/wg-auto-up</code></pre>
        </div>

        <h2 id="aliyun">☁️ 第三步：阿里云安全组放行</h2>

        <div class="step">
            <div class="step-title">在阿里云控制台操作</div>
            <ol>
                <li>登录 <a href="https://ecs.console.aliyun.com/" style="color:#60a5fa;">阿里云 ECS 控制台</a></li>
                <li>找到你的实例 → <strong>安全组</strong> → <strong>配置规则</strong></li>
                <li>点击 <strong>入方向</strong> → <strong>手动添加</strong></li>
            </ol>
            <table style="margin-top:12px;">
                <tr><th>协议</th><th>端口</th><th>来源</th><th>备注</th></tr>
                <tr><td>UDP</td><td>51820</td><td>0.0.0.0/0</td><td>WireGuard VPN</td></tr>
            </table>
            <div class="warning" style="margin-top:12px;">
                <div class="warning-title">⚠️ 注意</div>
                <p>如果你的 ISP 对 UDP 51820 做了限速或阻断，WireGuard 可能连不上。这时候用<strong>方案 B：OpenVPN</strong>（见下文）。</p>
            </div>
        </div>

        <h2 id="test">✅ 第四步：测试连接</h2>

        <div class="step">
            <div class="step-title">在你的电脑上测试</div>
<pre class="cmd-block"><code><span class="comment"># 启动 VPN（macOS/Linux）</span>
sudo wg-quick up wg0

<span class="comment"># ping 服务器（走 VPN 内网 IP）</span>
ping 10.0.0.1

<span class="comment"># SSH 连接（用 VPN IP，不暴露公网）</span>
ssh root@10.0.0.1

<span class="comment"># 浏览器访问 OpenClaw Dashboard</span>
<span class="comment"># 打开浏览器访问：</span>
http://10.0.0.1:18789</code></pre>
            <p style="color:#4ade80;margin-top:8px;">✅ 如果 ping 通了 <code>10.0.0.1</code>，说明 VPN 已建立成功！</p>
        </div>

        <div class="success">
            <div class="success-title">🎉 连接成功！</div>
            <p>以后你远程访问服务器，只需：</p>
            <ul>
                <li>启动 WireGuard 客户端 → 连接</li>
                <li>SSH：<code>ssh root@10.0.0.1</code></li>
                <li>OpenClaw Dashboard：<code>http://10.0.0.1:18789</code></li>
            </ul>
            <p>不需要记服务器公网 IP，不需要暴露任何公网端口。</p>
        </div>

        <h2 id="openvpn">🔄 备选方案：OpenVPN（如果 WireGuard 不通）</h2>

        <div class="section">
            <p>如果你的宽带 ISP 对 UDP 做了严格限制（少见但存在），WireGuard 可能握手失败。这时用 OpenVPN 作为备选，它走 TCP 443 端口，跟 HTTPS 网站流量一模一样，几乎不会被阻断。</p>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O1</span> 服务端安装 OpenVPN + 证书生成工具</div>
<pre class="cmd-block"><code>apt update && apt install openvpn easy-rsa -y</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O2</span> 生成 PKI 证书</div>
<pre class="cmd-block"><code>make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init pki
./easyrsa build-ca
<span class="comment"># 给 CA 证书设置一个密码（记住它），Common Name 填：OpenVPN-CA</span></code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O3</span> 生成服务端证书</div>
<pre class="cmd-block"><code>./easyrsa gen-req server nopass
./easyrsa sign-req server server
<span class="comment"># 确认签名：输入 yes，然后输入上一步的 CA 密码</span></code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O4</span> 生成 Diffie-Hellman 参数 &amp; TLS 密钥</div>
<pre class="cmd-block"><code>./easyrsa gen-dh
openvpn --genkey secret /etc/openvpn/ta.key</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O5</span> 写服务端配置文件</div>
<pre class="cmd-block"><code>nano /etc/openvpn/server.conf</code></pre>
<pre class="cmd-block"><code>port 443
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
keepalive 10 120
cipher AES-256-GCM
auth SHA256
persist-key
persist-tun
status openvpn-status.log
verb 3</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O6</span> 开启 IP 转发 &amp; 启动</div>
<pre class="cmd-block"><code>echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

systemctl start openvpn@server
systemctl enable openvpn@server
systemctl status openvpn@server</code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O7</span> 生成客户端配置（包含证书）</div>
<pre class="cmd-block"><code>cd /etc/openvpn/easy-rsa
./easyrsa gen-req client nopass
./easyrsa sign-req client client
<span class="comment"># 确认签名：输入 yes，然后输入 CA 密码</span></code></pre>

            <p style="color:#aaa;margin:12px 0;">把以下内容保存为 <code>client.ovpn</code>（记得替换证书部分）：</p>
<pre class="cmd-block"><code>client
dev tun
proto tcp
remote 你的服务器公网IP 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3

<span class="comment"># 下面三块内容从服务器上复制过来：</span>
<span class="comment"># -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 粘贴到这里（ca.crt）</span>
<span class="comment"># -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 粘贴到这里（client.crt）</span>
<span class="comment"># -----BEGIN PRIVATE KEY----- 到 -----END PRIVATE KEY----- 粘贴到这里（client.key）</span>
<span class="comment"># -----BEGIN OpenVPN Static key V1----- 到 -----END OpenVPN Static key V1-----（ta.key）</span></code></pre>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O8</span> 阿里云安全组加一条</div>
            <table>
                <tr><th>协议</th><th>端口</th><th>来源</th></tr>
                <tr><td>TCP</td><td>443</td><td>0.0.0.0/0</td></tr>
            </table>
        </div>

        <div class="step">
            <div class="step-title"><span class="step-num">O9</span> 客户端下载 OpenVPN</div>
            <ul>
                <li>macOS：App Store 搜索 <code>Tunnelblick</code>（免费）</li>
                <li>Windows：<a href="https://openvpn.net/community-downloads/" style="color:#60a5fa;">OpenVPN Connect</a></li>
                <li>iOS/Android：App Store/Play Store 搜索 <code>OpenVPN Connect</code></li>
            </ul>
            <p style="color:#aaa;margin-top:10px;">把 <code>client.ovpn</code> 文件通过 AirDrop/网盘传到手机，用 OpenVPN Connect App 导入即可。</p>
        </div>

        <h2 id="faq">❓ 常见问题 FAQ</h2>

        <div class="section">
            <h3>Q1: WireGuard 连接成功但 ping 不通 10.0.0.1？</h3>
            <p>检查服务端防火墙和 iptables：</p>
<pre class="cmd-block"><code># 在服务器上执行
iptables -L -n | grep wg0
<span class="comment"># 应该看到 ACCEPT 规则</span>

<span class="comment"># 如果没有，手动加一下</span>
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</code></pre>
        </div>

        <div class="section">
            <h3>Q2: WireGuard 连不上，UDP 被阻断？</h3>
            <p>在国内常见于部分企业网络或校园网。换用 OpenVPN（TCP 443）基本都能通。</p>
        </div>

        <div class="section">
            <h3>Q3: VPN 连接后网速很慢？</h3>
            <p>WireGuard 性能很好，理论上接近物理网卡限速。慢通常是服务器带宽或物理距离问题。</p>
            <ul>
                <li>确认用的是 <code>AllowedIPs = 10.0.0.0/24</code> 而不是 <code>0.0.0.0/0</code>（前者只走 VPN 流量，后者所有流量都挤 VPN）</li>
                <li>检查服务器带宽规格，低配 ECS 百兆带宽足够</li>
            </ul>
        </div>

        <div class="section">
            <h3>Q4: 每次连接都要手动输入密码？</h3>
            <p>可以用密钥登录服务器，然后 WireGuard 配置文件里写好私钥路径。推荐用 WireGuard 的密钥机制，比密码安全得多。</p>
        </div>

        <div class="section">
            <h3>Q5: 想让多台设备都能连？</h3>
            <p>在服务端的 wg0.conf 里多加几个 <code>[Peer]</code> 段即可，每个设备一个 Peer，AllowedIPs 分配不同的 10.0.0.x 地址。</p>
<pre class="cmd-block"><code><span class="comment"># 服务端 wg0.conf 示例：3个客户端</span>
[Peer]                    <span class="comment"># 客户端 1（你的电脑）</span>
PublicKey = xxx1
AllowedIPs = 10.0.0.2/32

[Peer]                    <span class="comment"># 客户端 2（手机）</span>
PublicKey = xxx2
AllowedIPs = 10.0.0.3/32

[Peer]                    <span class="comment"># 客户端 3（备用电脑）</span>
PublicKey = xxx3
AllowedIPs = 10.0.0.4/32</code></pre>
        </div>

        <div class="success">
            <div class="success-title">💡 推荐的操作顺序</div>
            <ol>
                <li>先试 WireGuard（方案 A），配置简单性能好</li>
                <li>如果 WireGuard UDP 端口被阻断无法连接，换 OpenVPN（方案 B）</li>
                <li>两种方案不需要同时部署，选一个即可</li>
            </ol>
        </div>