IPv4环境SSH连接IPv6服务器指南
前言
现在很多VPS厂商为了节约IPv4地址成本,开始提供IPv6-only的服务器。如果本地网络只支持IPv4,想要SSH连接这些服务器就需要一些技巧。本文总结几种常用的方法。
基础知识
IPv6地址格式
完整格式:2001:0db8:0000:0000:0000:0000:0000:0001
简化格式:2001:db8::1
SSH使用:ssh user@[2001:db8::1]
重点:SSH连接IPv6地址必须用方括号 []
包围,否则会解析失败
方法一:通过跳板服务器(推荐)
这是最简单可靠的方法,需要找一台同时有IPv4和IPv6的服务器作为跳板。
基本用法
# 传统两步法
ssh user@跳板服务器IP
ssh user@[2001:db8::1]
# 一步到位(SSH 7.3+)
ssh -J user@跳板服务器IP user@[2001:db8::1]
SSH配置文件
编辑 ~/.ssh/config
:
Host ipv6-server
HostName 2001:db8::1
User myuser
ProxyCommand ssh jumphost -W %h:%p
Host jumphost
HostName 跳板服务器IP
User jumpuser
配置后直接用:ssh ipv6-server
端口转发
# 本地端口转发到IPv6服务器
ssh -L 2222:[2001:db8::1]:22 user@跳板服务器IP
# 新开终端连接
ssh -p 2222 user@localhost
方法二:IPv6隧道
通过隧道服务获得IPv6连接能力,一次配置后可以直接访问所有IPv6资源。
Hurricane Electric隧道(免费)
- 注册账号:https://tunnelbroker.net/
- 创建隧道,选择离你最近的服务器
- 获取配置参数并在本地配置
Linux配置
sudo ip tunnel add he-ipv6 mode sit remote 隧道服务器IP local 本地公网IP
sudo ip link set he-ipv6 up
sudo ip addr add 客户端IPv6地址/64 dev he-ipv6
sudo ip route add ::/0 dev he-ipv6
Windows配置(管理员权限)
netsh interface ipv6 add v6v4tunnel interface="HE_Tunnel" localaddress=本地IP remoteaddress=隧道服务器IP
netsh interface ipv6 add address interface="HE_Tunnel" address=客户端IPv6地址
netsh interface ipv6 add route prefix=::/0 interface="HE_Tunnel"
配置完成后就可以直接SSH了:ssh user@[2001:db8::1]
方法三:NAT64/DNS64
利用公共的NAT64网关,把IPv6地址映射成特殊的IPv4地址。
# 使用DNS64服务器
echo "nameserver 64.6.64.6" > /etc/resolv.conf
# 查询域名对应的映射地址
nslookup 目标域名
# 用映射后的IPv4地址连接
ssh user@映射的IPv4地址
这种方法的限制是只能访问有域名的IPv6服务器,纯IP地址无法使用。
方法四:6tunnel工具
专门用于IPv4/IPv6协议转换的工具。
安装
# Ubuntu/Debian
sudo apt install 6tunnel
# CentOS/RHEL
sudo yum install 6tunnel
# macOS
brew install 6tunnel
使用
# 创建本地转发
6tunnel -4 -l 2222 2001:db8::1 22
# SSH连接
ssh -p 2222 user@localhost
方法五:netcat代理
如果跳板服务器没有SSH但有netcat,可以这样连接:
# 通过跳板服务器的netcat代理
ssh -o ProxyCommand="ssh jumphost nc %h %p" user@[2001:db8::1]
测试和诊断
基本测试命令
# 测试IPv6连通性
ping6 2001:db8::1
ping6 google.com
# 测试SSH端口
nc -6 -v 2001:db8::1 22
# 查看本机IPv6配置
ip -6 addr show
ip -6 route show
SSH连接调试
# 详细输出,看到底哪里出了问题
ssh -vvv user@[2001:db8::1]
# 只测试连接,不执行命令
ssh -T user@[2001:db8::1]
常见坑点
1. 地址格式错误
# 错误写法
ssh user@2001:db8::1
# 正确写法
ssh user@[2001:db8::1]
2. 本地没有IPv6路由
# 检查路由表
ip -6 route show
# 手动添加路由(根据实际情况)
sudo ip -6 route add 2001:db8::/32 via 网关地址
3. 防火墙拦截
# 检查IPv6防火墙规则
sudo ip6tables -L
# 临时开放SSH端口
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
实用技巧
保持SSH连接
在 ~/.ssh/config
里加上:
Host *
TCPKeepAlive yes
ServerAliveInterval 60
ServerAliveCountMax 3
多重跳转
# 一条命令跳转多个服务器
ssh -J jump1,jump2,jump3 user@[2001:db8::1]
非标准端口
# IPv6服务器用了非标准SSH端口
ssh -p 2222 user@[2001:db8::1]
# 通过跳板连接非标准端口
ssh -J jumphost -p 2222 user@[2001:db8::1]
推荐的IPv6 DNS服务器
Google DNS:
2001:4860:4860::8888
2001:4860:4860::8844
Cloudflare DNS:
2606:4700:4700::1111
2606:4700:4700::1001
Quad9 DNS:
2620:fe::fe
2620:fe::9
总结
对于偶尔使用的情况,推荐跳板服务器方法:
ssh -J user@跳板IP user@[IPv6地址]
对于经常使用的情况,推荐配置IPv6隧道,一劳永逸。
每种方法都有适用场景,根据自己的需求选择即可。最重要的是记住IPv6地址要用方括号包围,这个细节经常被忽略。
评论(0)
暂无评论