通过Cloudflare Tunnel和Warp拯救纯IPV6服务器,轻松部署访问Artalk和1Panel并通过域名用IPV4网络访问

通过Cloudflare Tunnel和Warp拯救纯IPV6服务器,轻松部署访问Artalk和1Panel并通过域名用IPV4网络访问

前言

呜呜呜没想到我也变成月更博主了。。。这一个月里我都在折腾别的项目,如HexImg、HexAeroGlass、HexStudio(虽说bug满天飞),根本没有好好的打理下博客。

但前几天,我在唐人云上看到了一款性价比极高的IPV6主机,一月3元,遂买下尝试。

但首先就碰到了第一个挫折:家里的路由器和光猫都太老了,不支持访问IPV6。最终用手机流量访问到了主机,结果由于IP太烂了,连宝塔面板和1Panel的安装包都下载不下来。于是百般周折使用Cloudflare Warp使服务器使用Cloudflare的IPV4成功下载下来,并用Cloudflare Tunnel绑定了域名,使我可以通过IPV4访问1Panel。

但紧接着我又部署Artalk,依旧照葫芦画瓢用二进制部署、Cloudflare Tunnel连接,结果不知道是不是Cloudflare Tunnel的原因,图片能正常上传却访问404,最后用我超牛的脑子的帮助下用Nginx-light+Cloudflare Tunnel成功修复了这个问题。

看到这里你可能会问:问什么不直接用Nginx-light反而不断的使用Cloudflare Tunnel?因为这样不用暴露端口(严谨的说只用暴露SSH连接的端口),更安全。本片教程会多使用&&这样的命令,这样你只需要复制完整,一条一条慢慢来就可以成功。前提是你需要IPV6服务器、一个Cloudflare账户且开通免费的Zero Trust且账户下有域名。

本教程里1Panel通过Cloudflare Tunnel反代之前都需要使用IPV6网络连接本地终端,你可以打开移动网络开启热点供电脑使用;反代1Panel之后可以使用1Panel自带的终端,可以用IPV4访问。

1Panel终端开启教程

本教程的前提是你需要一台安装Debian 12或11系统的IPV6服务器、一个Cloudflare账户且开通免费的Zero Trust且账户下有域名,如果你恰好满足,教程正式开始。

一、通过Warp获得IPv4出口

运行下面这条命令:

sudo -i wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && sudo -i bash menu.sh

运行后,在菜单中输入 2 ,用简体中文。

接下来,选择** “为 IPv6 only 添加 WARP IPv4 网络接口” **。

然后等加载完选择ipv4优先,一是因为各大工具对ipv6兼容还不太好,ipv4优先可以减免绝大多数问题;二是因为我这台服务器的ipv6太垃圾了,向外访问都是困难。

脚本执行后输出示例:

已成功获取 WARP Free 网络, 工作模式: 全局

IPv4: (Cloudflare的ipv4地址) 香港 Cloudflare, Inc.

IPv6: (你服务器的ipv6地址) 香港 Cloudie Limited

常用管理命令

命令作用
warp o临时开关WARP
warp s 4切到IPv4优先
warp s 6切到IPv6优先
warp查看当前状态

这里做个了解即可,因为前面我们已经用脚本进行配置了。

踩坑记录

如果你遇到了一些报错,可以来这里看一下解决方法,这些都是我真实踩坑解决的。

报错1:WARP软件源GPG密钥错误

执行apt update时报错:

W: GPG error: https://pkg.cloudflareclient.com bookworm InRelease:

NO_PUBKEY 6E2DD2174FA1C3BA

解决方案

只需导入Cloudflare Warp的gpg即可,一条一条执行:

curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
apt-get update

报错2:gpg命令不存在

如果执行了报错1的代码报这个错,就说明你gpg未安装导致无法导入密钥,需先安装:

apt install -y gnupg

二、安装1Panel

bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

选择简体中文。我建议不要安装Docker,除非你内存2G以上。而且后续的教程用的不是Docker部署的命令,后续的指令可能会不可用。

三、通过Cloudflare Tunnel反代1Panel

首先去Cloudflare Zero Trust新建隧道。访问Cloudflare并登录账户,点击【Zero Trust】—> 【网络】—> 【连接器】—> 【创建隧道】

选择Cloudflared,点击【下一步】,接着为隧道命名,随便取名字输入即可,好了点击【选择隧道】。把选择设备的操作系统选择【Debian】,复制下来【或仅在当前终端会话中手动运行隧道:】里面的内容,你可能会得到去下代码:

cloudflared tunnel run --token xxxx

在Cloudflare页面继续点击【下一步】,【子域名】自己填写自己想要的,【主域名】选你自己的域名,【服务类型】选择【HTTP】,【URL】填写为loaclhost:你自己1Panel的端口,请修改成真实端口。

接着打开服务器终端,粘贴以下代码,记得替换成你实际的token(xxxx就是token,可能很长,这是正常的):

sudo mkdir -p --mode=0755 /usr/share/keyrings && curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null && echo 'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list >/dev/null && sudo apt-get update && sudo apt-get install -y cloudflared && sudo cloudflared service install 你的token

四、安装二进制Artalk并配置systemd服务

1.下载与安装

Artalk - releses下载带linux的zip,如果不是arm就下载带amd64linux的zip,在本地电脑解压后请上传到/data/artalk,并把config.yaml复制到/data/artalk/data

最终文件结构如下:

/data/artalk/
├── artalk                     # 二进制主程序
└── data/
    ├── config.yml             # 配置文件
    ├── artalk.db              # SQLite 数据库
    ├── artalk.log             # 日志文件
    └── artalk-img/            # 上传的图片

2.配置文件

1.修改config.yaml db部分全部改为以下配置:

db:
  type: sqlite
  file: /data/artalk/data/artalk.db?_journal_mode=WAL&_busy_timeout=10000&_synchronous=NORMAL&_cache_size=-16000
  name: artalk
  host: localhost
  port: 3306
  user: root
  password: ""
  charset: utf8mb4
  table_prefix: ""
  ssl: false
  prepare_stmt: true

2.配置好site_defaultsite_url,你自主配置,site_url记得带https://http://前缀。

3.把admin_user改成以下配置:

admin_users:
  - name: Hexvork
    email: hexvork@foxmail.com
    password: (bcrypt)
    badge_name: 管理员
    badge_color: '#0083FF'

nameemail自行配置即可,password我建议用bcrypt加密,可用https://www.jser.com/g/bcrypt)这类网站填入,(bcrypt)前缀不可丢!

4.trusted_domains请修改,记得带https://http://前缀。

5.把img_upload部分修改成下面的配置:

img_upload:
  enabled: true
  path: /data/artalk/data/artalk-img
  max_size: 2
  public_path: "/img/"
  upgit:
    enabled: false
    exec: upgit -c <upgit配置文件路径> -t /artalk-img
    del_local: false

6.请保持port为23366,若config.yaml的post为空则不用管。

这样必要设置就完成了,其它可选配置请前往Artalk官网配置。

3.systemd配置

创建 /etc/systemd/system/artalk.service,请在终端输入:

cat > /etc/systemd/system/artalk.service << 'EOF'
[Unit]
Description=Artalk Server
After=network.target

[Service]
ExecStart=/data/artalk/artalk server -c /data/artalk/data/config.yml -w /data/artalk
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

接着,启动并设置开机自启:

systemctl daemon-reload
systemctl enable --now artalk
systemctl status artalk

五、Nginx-light反向代理Artalk

1.安装Nginx-light

apt update && apt install -y nginx-light

2.让Nginx-light反代Artalk

编辑/etc/nginx/sites-available/artalk

server {
    listen 80;
    server_name artalk.hexvork.com;
    location /img/ {
        alias /data/artalk/data/artalk-img/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    location / {
        proxy_pass http://127.0.0.1:23366;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }
}

3.启用站点

ln -sf /etc/nginx/sites-available/artalk /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx

踩坑记录

报错1:Nginx-light安装后systemd服务找不到

执行systemctl status nginx报错Unit nginx.service could not be found

原因nginx-light安装后虽然生成了nginx.service,但可能未正确启动。

解决方案

执行以下代码,手动启动Nginx-light

/usr/sbin/nginx -t  
/usr/sbin/nginx 

五、Cloudflared反代Nginx-light

Cloudflared反代Nginx-light,而Nginx-light反代Artalk,于是成功通过Cloudflare Tunnel反代Artalk且图片正常显示

打开Cloudflare官网并登录,点击【Zero Trust】—> 【网络】—> 【连接器】—> 【创建隧道】,选择Cloudflared,点击【下一步】,接着为隧道命名,随便取名字输入即可,好了点击【选择隧道】。把选择设备的操作系统选择【Debian】,复制下来【或仅在当前终端会话中手动运行隧道:】里面的内容,获得token:

cloudflared tunnel run --token xxxx

xxxx即为token。

在Cloudflare页面继续点击【下一步】,【子域名】自己填写自己想要的,【主域名】选你自己的域名,【服务类型】选择【HTTP】,【URL】填写为loaclhost:80

由于已有其他cloudflared服务在运行(如cloudflared-artalk.servicecloudflared-update.service),需要新建一个独立服务,不影响它们,记得把token填写进去:


sudo sh -c "printf '[Unit]\nDescription=Cloudflare Tunnel via Nginx\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/cloudflared tunnel run --url http://localhost:80 --token 请填写你的token\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n' > /etc/systemd/system/cloudflared-artalk-nginx.service" && sudo systemctl daemon-reload && sudo systemctl enable cloudflared-artalk-nginx && sudo systemctl start cloudflared-artalk-nginx

结语

相信只要安分守己的按照本片教程一步步执行,你已经可以通过你自己的域名访问1Panel和Artalk了。如果有更好的方法,欢迎在评论区留言。若出现其它的报错,请先询问AI,询问过后仍无果欢迎来评论区求助,当然,你也可以分享你成功的喜悦在评论区。这篇文章写得比较急,如有错误,欢迎来指正。

通过Cloudflare Tunnel和Warp拯救纯IPV6服务器,轻松部署访问Artalk和1Panel并通过域名用IPV4网络访问
/posts/ipv6-vps/
作者 Hexvork
发布于
更新于
许可协议 未经作者允许,禁止转载
CloudflareBlogArtalkIPV6
打赏

评论