没有公网 IPv4,只有 IPv6 的 VPS 该怎么 SSH 连上去?

最近手上搞到了几台性价比超高的 VPS,虽然配置不错,但有个让人头秃的问题:只有 IPv6 地址,没有 IPv4

这就导致了一个很尴尬的局面——如果你家里的宽带环境不支持 IPv6,或者你在公司、咖啡厅这种纯 IPv4 网络下,根本没办法直接 SSH 上去。很多人第一反应是搞个跳板机(中转),但为了这就多买台机器,成本立马上去了,性价比大打折扣。

难道只有 IPv6 的机器在纯 IPv4 环境下就是块砖头吗?当然不是!今天就来聊聊在没有跳板机的情况下,有哪些神仙操作能让你顺利连接上这台服务器。

方案一:利用 NAT64/DNS64 穿透(最推荐)

这是最“正统”且无需安装额外代理软件的方案。原理很简单:IPv6 的网络是巨大的,而现在的 DNS 服务(比如 Google 的 2001:4860:4860::64 或 Cloudflare 的 2606:4700:4700::64)大多提供了 DNS64 服务。

当你在纯 IPv4 环境下想要访问 IPv6 资源时,DNS64 会给你返回一个特定的 IPv4 地址,这个地址其实是 NAT64 网关 的 IP。你的数据包发过去,网关会帮你把 IPv4 头去掉,换成 IPv6 头,然后转发给你的服务器。

NAT64/DNS64 网络穿透原理示意图

NAT64/DNS64 通信原理

操作步骤

如果你在 Linux 或 macOS 下(Windows 下需要 WSL 或 Git Bash 等支持 IPv6 的终端),可以尝试直接 Ping 一组特殊的地址:

# 格式:ipv4.dddd.dddd.dddd.ipv6dns.reverse.nat64.club
# 假设你的 IPv6 地址是 2001:db8::1
# 你可以尝试解析其对应的 NAT64 地址
``n
不过,最简单的方法是修改本地 DNS,但这通常需要系统级别的 IPv6 支持。

**更暴力的玩法:使用公共 NAT64 网关**

如果你的终端本身支持 IPv6,只是路由器不分配 IPv6 地址,那你可能需要借助 **Teredo** 或 **6to4** 隧道先获取一个 IPv6 地址,这属于另一个话题了。如果你的环境真的是 IPv4 Only(且无 IPv6 能力),那么直接 SSH 连接 IPv6 是几乎不可能的,除非用下面这种“曲线救国”的方法。

## 方案二:使用 Tailscale 或 Zerotier(内网穿透神器)

这基本上是目前解决异构网络互通最无痛的方案,特别是针对“没有跳板机”这个限制条件。

Tailscale 是基于 WireGuard 的组网工具,它利用了 **DERP (Dogged Endpoint Resolution Protocol)** 服务器作为中继。虽然你的 VPS 只有 IPv6,你的客户端只有 IPv4,但只要两边都能访问 Tailscale 的官方 DERP 中继节点,它们就能互通。

### 为什么它比 SSH 直连好?

![Tailscale 网络拓扑与 DERP 中继示意](/media-load/019f0e8d-a15e-7130-84e1-75bbf1e7e4d1)

*Tailscale 内网穿透与中继原理*

1.  **无需公网 IP**:两边都不需要公网 IP,只要有网能出站就行。
2.  **自动打洞**:即便打洞失败,官方中继也能兜底,虽然速度稍降,但连接极其稳定。
3.  **安全免密**:配置好后,直接 SSH Tailscale 分配的私有 IP,不用管原服务器的安全组端口。

### 快速上手

1.  在 VPS 上安装 Tailscale(这里以 Linux 为例):
    ```bash
    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up
    ```
2.  在你本地电脑(Mac/Win/Linux)也安装 Tailscale 并登录。
3.  登录 Tailscale 管理后台,开启 **“Accept Routes”** 或 **“Key expiry”** 等设置(默认不用动)。
4.  现在,你的 VPS 上会显示一个 `100.x.x.x` 的 IP,你在本地直接 `ssh [email protected]` 就能连上了!

**注意**:如果 VPS 是纯 IPv6 且完全无法访问 IPv4,安装过程中可能需要配置代理或特定镜像源来下载 Tailscale 安装包,这是唯一的门槛。一旦装上,万事大吉。

## 方案三:Cloudflare Tunnel (cloudflared)

如果你不想装 Tailscale,或者机器配置实在低得可怜,Cloudflare 提供的 `cloudflared` 也是一个极好的选择。

它通过一个守护进程,把你的 SSH 服务映射到 Cloudflare 的边缘网络。

1.  在 VPS 上安装 `cloudflared`。
2.  配置隧道:
    ```bash
    cloudflared tunnel create my-ssh-tunnel
    cloudflared tunnel route dns my-ssh-tunnel ssh.yourdomain.com
    cloudflared tunnel run my-ssh-tunnel
    ```
3.  在本地使用 `ssh` 通过 ProxyCommand 连接:
    ```bash
    ssh -o ProxyCommand="cloudflared access ssh --hostname ssh.yourdomain.com" [email protected]
    ```

这种方式的好处是你可以利用 Cloudflare 的全球网络,而且不需要客户端常驻后台(虽然需要安装 cloudflared 客户端工具做代理)。

## 方案四:IPv6 代理转发(仅应急)

如果你确实有一台拥有 IPv4 的服务器(哪怕是临时的、短期的),你可以用它做端口转发。题目说“没有跳板机”,但如果你能临时借用一台(比如朋友的服务器或极低端的 Nat VPS),可以用 Socat 或 FRP 做一下转发。

不过既然限制了“没有跳板机”,这个方案仅作为备选思路。本质上是利用那台临时 IPv4 机器做一个 IPv4 -> IPv6 的桥接。

## 总结

面对“IPv6 Only VPS +IPv4 Only 客户端 + 无跳板机”的极限条件,目前的最佳实践路径如下:

1.  **首选 Tailscale/Zerotier**:安装过程稍微需要折腾一下(如果是纯 IPv6 下载软件),但一旦组网成功,体验最好,最像在局域网内操作。
2.  **次选 Cloudflare Tunnel**:适合你拥有域名并习惯用 Cloudflare 生态的用户,连接速度快,但 SSH 命令行参数稍微复杂一点。
3.  **技术流 NAT64**:适合极客折腾,如果你的客户端本身具备 IPv6 能力但被 NAT 阻挡,可以通过研究 NAT64 前缀来手动构造连接。

总之,IPv6 是未来的趋势,现在的“鸡肋”只是因为过渡期还没有完全结束。用好工具,几百块的 IPv6 机器照样能玩出花来!

标签: none

评论已关闭