NAT穿透-CloudFlare


前言

过年在家,闲来无事到处翻一翻,竟然发现一台十年前的老机子,准备搞一波事情——内网穿透。思索良久,最终选择了 CloudFlare 家的 Argo Tunnel 服务,因为其配置较为方便,而且免费。其实一开始考虑使用 frp,但是其工作时需要一台具有公网IP的主机做监听和转发服务,集群式的应用场景不满足我目前的需求。

系统安装

系统选择

OS 选择
Windows 需求是内网穿透做服务器,2H2G 的小老机并不适合安装 Windows
Ubuntu 服务器首选,但是在安装时总是卡死(猜测是硬件问题)
Arch 安装配置较为繁琐,虽然有一键安装脚本,但是考虑到十年前的机器,还是算了
Manjaro 安装成功,却总因为网络问题卡死
Mint 安装成功,运行效果尚可

启动盘制作

Rufus、U盘(32GB)、Linux Mint 20.3 Cinnamon Edition
使用 Rufus 以 DD 方式制作镜像。

安装 Mint

进 BIOS 花费了本人不少时间(大无语事件),启动时左下角显示 F12 进入 BIOS 设置,可是怎么按都不顶用,F12FN+F12Shift+F12……一堆组合键都尝试过,后来不知按到哪个键突然弹出启动项选择,进入并成功安装系统后才发现键盘坏了,思考一下,应该是按到了F9😀。算是一个小插曲。
由于是全盘安装,安装过程基本无脑,Windows 式的“下一步”,不再赘述。
20220204190003

NAT 穿透

系统安装完成,此时这台机子却只有个“单向门”——只能出不能进,需要配置公网 IP,才能满足成为服务器的这一需求,CloudFlare 的 Argo Tunnel 服务可以完成对端口的监听和响应,关键还免费。

准备

在 CloudFlare 上新建网站并在域名服务商将域名的 DNS 配置成 CloudFlare 所提供的 DNS 服务器。等待响应完成。

arely.ns.cloudflare.com
memphis.ns.cloudflare.com

安装 CloudFlared

官方在 Linux 上的支持很全面。

Type amd64/x86-64 x86(32-bit) ARM ARM64
.deb Download Download Download
.rpm Download Download Download
  • .deb 安装
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb dpkg -i cloudflared-linux-amd64.deb
  • .rpm 安装
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm

Cloudflared 验证

通过执行命令行登录 CloudFlare ,进行账户验证。

cloudflared tunnel login

创建隧道

通过 CloudFlared 应用创建隧道并命名。

cloudflared tunnel create <NAME>

此时会在.cloudflared/目录下生成一个 JSON 文件,前缀为UUID<UUID>.json

单隧道执行

如果执行单隧道,可通过 cloudflared 创建 DNS 解析记录,并采取映射方法实现对本机端口的监听(支持多种协议)。

cloudflared tunnel route dns <UUID or NAME> <hostname>
cloudflared tunnel --hostname *.example.com --url http://localhost:port

多隧道执行

.cloudflared/目录下创建 config.yml 文件。

vim config.yml
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
ingress:
  - hostname: *.example.com
    service: http://localhost:80
  - hostname: *.example.com
    service: ssh://localhost:22
  - service: http_status:404

启动隧道:

cloudflare tunnel run <NAME or UUID>

通过 hostname 即可访问部署的网络应用或本机应用。

关于 HTTPS

关于 HTTPS,在李峰大佬博客中看到了这样的方法。
20220204205239
本人并未配置成功,在配置文件中加入noTLSVerify: true也无济于事,最后一顿捣鼓才发现,只要在 CloudFlare 站点配置中打开始终使用 HTTPS这一设置即可,无需有其他操作,可能官方为了简化 Tunnel 配置流程做了更新,好评👍。
20220204205419

实例

站点搭建

大学一年级时,一向对“无脑化”的操作表示反感,拒绝一键式的操作,往底层挖,越挖越深……但是经过一两年的“磨练”,才知道时间就是金钱,不然真得熬夜啊!宝塔真香

搭建宝塔,安装 Nginx,建立站点,修改 config.yml 配置文件,重启 cloudflared 服务。

# Nginx 80 端口
- hostname: *.example.com
    service: http://localhost:80

20220207230333

SSH 远程连接

配置文件 config.yml 新增:

# SSH 22 端口
- hostname: ssh.example.com
    service: ssh://localhost:22

服务器端重启 cloudflared 服务,主机也需安装 cloudflared ,并在 C:\Users\<name>\.ssh\config 新增:

Host ssh.example.cf
ProxyCommand C:/Program Files (x86)/cloudflared/cloudflared(cloudflared安装位置) access ssh --hostname %h

20220207231232

简单 Web 应用

搭建了一个青龙面板,代理原理和操作过程同上,在配置文件 config.yml 新增 Web 应用的端口和指定域名。
20220207231601

总结

内网穿透,从思考、搜索到实践,前前后后折腾了一下午,期间也遇到了不少困难,但,有意义!从体验上来看,响应速度并不友好,尤其是在 SSH 远程连接时,有感知性的延迟,但是一想到十年老机免费……还要什么自行车!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM