前言
過年在家,閑來無事到處翻一翻,竟然發現一台十年前的老機子,准備搞一波事情——內網穿透
。思索良久,最終選擇了 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 遠程連接時,有感知性的延遲,但是一想到十年老機
、免費
……還要什么自行車!