前言
过年在家,闲来无事到处翻一翻,竟然发现一台十年前的老机子,准备搞一波事情——内网穿透
。思索良久,最终选择了 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 设置,可是怎么按都不顶用,F12
、FN+F12
、Shift+F12
……一堆组合键都尝试过,后来不知按到哪个键突然弹出启动项选择,进入并成功安装系统后才发现键盘坏了,思考一下,应该是按到了F9
😀。算是一个小插曲。
由于是全盘安装,安装过程基本无脑,Windows 式的“下一步”,不再赘述。
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,在李峰大佬博客中看到了这样的方法。
本人并未配置成功,在配置文件中加入noTLSVerify: true
也无济于事,最后一顿捣鼓才发现,只要在 CloudFlare 站点配置中打开始终使用 HTTPS
这一设置即可,无需有其他操作,可能官方为了简化 Tunnel 配置流程做了更新,好评👍。
实例
站点搭建
大学一年级时,一向对“无脑化”的操作表示反感,拒绝一键式的操作,往底层挖,越挖越深……但是经过一两年的“磨练”,才知道时间就是金钱,不然真得熬夜啊!
宝塔真香
搭建宝塔,安装 Nginx
,建立站点,修改 config.yml
配置文件,重启 cloudflared
服务。
# Nginx 80 端口
- hostname: *.example.com
service: http://localhost:80
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
简单 Web 应用
搭建了一个青龙面板,代理原理和操作过程同上,在配置文件 config.yml
新增 Web 应用的端口和指定域名。
总结
内网穿透,从思考、搜索到实践,前前后后折腾了一下午,期间也遇到了不少困难,但,有意义!从体验上来看,响应速度并不友好,尤其是在 SSH 远程连接时,有感知性的延迟,但是一想到十年老机
、免费
……还要什么自行车!