什麼是內網穿透?#
當我們在家中有個 NAS,想要在學校 / 公司的網絡來訪問,就需要用到內網穿透,實現外網訪問內網服務。原理一般是 P2P 打洞和伺服器中轉流量
前期準備#
路由器開啟 UPnP
關閉路由器的 IPv4,IPv6 防火牆
使用 Zerotier/Tailscale 進行內網穿透#
他們倆的原理都是嘗試對端建立 P2P 連接,需要對端安裝一個軟體並且長期運行
使用 Zerotier 進行內網穿透的詳細教程#
創建 Zerotier 帳號#
帳號創建都不會的給我去死
創建一個新的 Zerotier 網絡組#
當你帳號登錄成功後,會自動跳轉到這個頁面,點擊Create A Network
。如果沒有,請訪問ZeroTier Central
下面的列表會增加一個新的網絡組,點擊它
Zerotier 默認的網絡組模式為Private
。即私密模式,哪怕別人知道了你的Network ID
嘗試加入你的網絡組也需要你進行驗證
複製Network ID
。後續我們就用這個加入網絡組
在設備上安裝 Zerotier 應用#
Windows:#
前往Download - ZeroTier,下載 exe 安裝文件
安裝完畢後查看右下角托盤,按照圖片操作加入網絡組
這裡可以查詢到你的設備 ID 和你在這個網絡組的 IP
Linux(飛牛 OS):#
通過 SSH 連接上你的 Linux 設備
查看安裝命令:Download - ZeroTier
終端執行: curl -s https://install.zerotier.com | sudo bash
看到這一行即安裝完畢,後面那一串即你的設備 ID:
加入網絡:sudo zerotier-cli join 你的Network ID
Android(安卓)#
下載客戶端
-
Zerotier One:ZeroTier One APK Download for Android - Latest Version
-
ZerotierFix:Releases · kaaass/ZerotierFix
如圖操作
Zerotier 授權設備#
前往 Zerotier 的網頁控制台:ZeroTier Central
授權剛才加入的設備
勾選然後保存
Zerotier 訪問測試#
如果你同一個網絡組裡已經有兩台以上的設備了,可以嘗試 ping 一下測試連通性,請先確保兩台設備不在同一個局域網(比如手機開流量,NAS 用家裡的無線網)
IP 可以在這裡查看
ping 測試:
使用 Tailscale 進行內網穿透的詳細教程#
創建 Tailscale 帳號#
前往:Tailscale。如果你進不去,請嘗試掛梯子。如果看不懂英文可以開啟瀏覽器的翻譯功能
在設備上安裝 Tailscale 應用#
Windows:#
前往Download · Tailscale,下載 exe 安裝文件
官方教程:
Linux(飛牛 OS):#
通過 SSH 連接上你的 Linux 設備
查看安裝命令:Download · Tailscale
終端執行: curl -fsSL https://tailscale.com/install.sh | sh
等待安裝完畢後輸入:tailscale login
打開彈出的瀏覽器窗口,登錄你的帳號即可
Android(安卓)#
下載客戶端(Google Play):Download · Tailscale
登錄你的帳號即可
Tailscale 訪問測試#
前往 Tailscale 的網頁控制台:Machines - Tailscale。可以查看到每個設備 Tailscale 分配的 IP
ping 測試:
使用 Cloudflare Tunnel 進行內網穿透#
這種方法可以不進行任何配置直接在公網上被訪問,但是僅限 Web 服務。如果你想穿透遊戲伺服器等則不可用。你需要先將域名托管到 Cloudflare
創建 Cloudflare 帳號首頁 | Cloudflare
進入Cloudflare One(需要綁定 PayPal)
如圖操作,創建一個 Tunnel
Docker 方式#
使用 1Panel
複製如圖的命令
將其粘貼,並且複製後面的令牌
1Panel 應用商店搜索cloudflared
填入令牌
查看 cloudflared 的 IP#
如果你是 Docker 模式,宿主機 IP 需要通過 SSH 終端輸入ip a
來查看。我這裡是192.168.124.34
root@n100-debian:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens18: tiROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:24:11:33:e1:7d brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.124.34/24 brd 192.168.124.255 scope global dynamic ens18
valid_lft 46579sec preferred_lft 46579sec
inet6 2409:8a30:320:a170:be24:11ff:fe33:e17d/64 scope global dynamic mngtmpaddr
valid_lft 1902sec preferred_lft 1898sec
inet6 fe80::be24:11ff:fe33:e17d/64 scope link
valid_lft forever preferred_lft foreverti
原生模式(以 Debian 為例)#
選擇 Debian,然後複製底下的命令,直接到終端執行
如果你的環境無法連接上 Github
嘗試手動下載:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
然後將其通過 SSH 等方式傳到 Linux 上,如圖終端為 MobaXterm
然後使用:dpkg -i cloudflared-linux-amd64.deb
安裝這個軟體包
然後直接複製右邊的命令到 SSH 終端執行
Android(Termux)#
在 Android 上安裝Termux | The main termux site and help pages.
在終端執行:pkg install cloudflared
選擇Debian
然後複製最右邊的命令到終端執行
如果你無法使用 Termux 自帶的 cloudflared,請嘗試安裝 proot 容器實現
依次輸入命令:
pkg update && pkg upgrade
pkg install proot
pkg install proot-distro
proot-distro list
proot-distro install debian
proot-distro login debian
apt install wget
wget https://github.com/cloudflare/cloudflared/releases/download/2024.10.1/cloudflared-linux-arm64.deb
dpkg -i cloudflared-linux-amd64.deb
然後直接複製右邊的命令到 SSH 終端執行
配置並訪問 Tunnel#
通過網頁配置#
這種方法需要直接在安裝了 cloudflared 的設備上通過令牌運行
如圖進入,創建一個 HTTP 隧道
填寫你的 IP 和端口,非 Docker 模式可以直接填寫 localhost
本地方式#
這種方法只需要在安裝了 cloudflared 的設備上輸入一些命令然後通過網頁授權,後續更改配置也需要在本地操作
登錄並授權:cloudflared tunnel login
創建隧道並設置隧道(HTTP 模式穿透,目標地址127.0.0.1
,端口:8080
,外部域名:test.onani.cn
):cloudflared tunnel --name test --url http://127.0.0.1:8080 --http2 --hostname test.onani.cn
訪問測試#
成功訪問
使用 STUN 打洞#
這種方法可以不進行任何配置直接在公網上被訪問,並且所有類型的服務都能正常使用。但是這種方式進行的內網穿透無法固定也無法指定 IP 和端口,在 3~7 天後會改變
安裝 Lucky#
執行:curl -o /tmp/install.sh http://6.666666.host:6/files/golucky.sh && sh /tmp/install.sh http://6.666666.host:6/files 2.13.4
通過host:16601
進入 Lucky 後台,設置 STUN 穿透。如果 DMZ 主機不設為 Lucky 主機可能會失敗。打碼的地方即公網訪問的 IP 和端口