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