利用cloudflare的tunnel将纯IPV6的SSH转发至IPV4可用(更新docker部署)

,

博客原文:https://dongdong741236.cn/ipv6ssh-to-ipv4/

前置条件

1.一个cf账号
2.一个可用的PayPal支付方式(但无需真的付款)
3.一个可托管cf的域名
4.脑子和手
5.一个纯ipv6服务器(废话)AFF https://8465.cn/aff/PVWGBHZP

cloudflare tunnel

来到cloudflare,
选择free计划

开启即可,随后便可来到服务器中配置

安装docker

纯ipv6还是在大陆,安装docker是有难度的,不过幸亏清华源支持IPV6

export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" && curl -fsSL https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sh

就可以一键安装docker

配置Tunnel

docker部署(推荐)

感谢 @Displease3121 https://linux.do/t/topic/192484/

来到仪表盘,创建一个tunnel,这里选择默认的cloudflare即可


下一个页面填写隧道名称,

然后就可以看到部署命令

选择docker。会出现如下的命令

docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiY2E0…………

为了在纯ipv6环境运行,进行一下改造,增加-d(后台运行),–dns 2606:4700:4700::1111(指定dns) --network host (指定网络)–edge-ip-version 6(指定ip版本) 参数
也就是

docker run -d --dns  2606:4700:4700::1111   --network host -d cloudflare/cloudflared:latest   tunnel  --edge-ip-version 6    --no-autoupdate run  --token eyJhIjoiY2E0OD……

然后你就可以成功的看到已经连接成功,然后点击public hostname就可以进行服务的添加


你服务的地址填到下面哪个url里,类型选对即可

命令行部署

1.安装cloudflare

# 创建目录并设置权限
sudo mkdir -p --mode=0755 /usr/share/keyrings

# 下载 Cloudflare GPG 密钥并保存到指定路径
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | \
sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

# 添加 Cloudflare 的软件包源到 sources.list.d 目录
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/cloudflared.list

# 更新软件包列表
sudo apt-get update

# 安装 cloudflared
sudo apt-get install cloudflared

2.登录cloudflare

cloudflared tunnel login

此时会出现一个登录链接,点击跳转浏览器,然后授权



等待终端中下载完证书, 如果长时间没反应或者报错,可以重新登录一下(利用itdog看看哪个ipv6在你服务器所在地能ping通,host文件指定一下)
出现这个代表登录成功

3.配置Tunnel
先创建一个隧道

cloudflared tunnel create <NAME>

这里会出现一个id,复制一下
修改配置文件以支持ipv6,配置文件要放在root/.cloudflared下

vim config.yml

文件一定要有

tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
edge-bind-address: "::"

ingress:
    - hostname: ipv6ssh.example.org #你在cf托管的域名
      service: ssh://localhost:22 #转发ssh
    - hostname:http1.example.org
      service: http://localhost:8080
    - service: http_status:404    #保底服务,未匹配到的hostname会报404

4.启动隧道

 cloudflared tunnel run <NAME>

这时返回tunnels网页列表,https://one.dash.cloudflare.com/,正常来说,你可以看到Status为健康就是代表正常启动了
5.注册为服务

cloudflared service install #注册
systemctl start cloudflared #启动
systemctl status cloudflared #查看状态
systemctl restart cloudflared #重启

windows去连接转发出来的ssh

为了方便本地连接(不用去动ssh的配置文件,有的ssh连接工具的配置我找不到,或者不支持,比如termius),所以我们在本地也做一个转发
去这里下载windows的安装包,或者直接命令行下载

winget install --id Cloudflare.cloudflared

下载下来的exe文件在C:\Program Files (x86)\cloudflared

cloudflared access ssh --hostname ipv6ssh.foreverlink.love -url localhost:222

,这时候你去连接本地的222端口就是你的服务器了

设置安全防护和浏览器渲染

你可以给你的域名套上一层cf提供的安全防护,并且可以在浏览器中直接运行终端
转到仪表盘的Access-Application,新建一个应用,选择Self-hosted


Application name是应用名字,有效时间看你自己,下面的Application domain需要和你要套安全的域名一致,
然后next
配置policy,时间可以和Application一致

配置 Configure rules,我选用的是邮箱验证,也就是登入前需要邮件接一个验证码,邮箱可以是只配置后缀,用于你的自建邮箱,或者是具体的某一个邮箱


下一页中可以把浏览器渲染打开

58 个赞

#AFF添加

感谢分享 :tieba_087:

1 个赞

感谢分享 mark住

可以,到时候拿出来看看

有点厉害支持~~

开发调优, Lv1开发调优

cloudflare可以不可以将 纯ipv6的地址转换ipv4的地址,然后暴露于外网环境 让外面访问,以免纯ipv6的地址无法被外面访问。

你要的是怎么样的转法,假如说是你服务器里跑了个服务,是可以用我这篇上面的东西把他转出去

很好。我要尝试做。先必须给你赞赞赞。

刚好有个ipv6的,可以试试了

这个 tunnel 可以通过 docker 一键安装(免去本地登录步骤),配置文件也可以通过控制台页面直接操作了。 慈善家就是心善

3 个赞

感谢分享,教程很详细

大佬我移动下面的黑裙可以装这个Docker源使用吗

我没搞定纯ipv6的docker配置,佬看一眼,https://linux.do/t/topic/192484/

应该可以吧,

感谢分享! :+1:

感谢大佬分享,点赞

马克马克,去收藏夹吧

很详细,感谢!

1 个赞