內(nèi)網(wǎng)穿透的原理和配置
一、內(nèi)網(wǎng)穿透的原理
要理解內(nèi)網(wǎng)穿透,首先要明白為什么需要它。
1. 網(wǎng)絡環(huán)境的限制
-
公網(wǎng)IP與私網(wǎng)IP:互聯(lián)網(wǎng)上的每臺設備都需要一個唯一的公網(wǎng)IP地址才能被直接訪問。但由于IPv4地址枯竭,運營商通常不會給家庭或普通企業(yè)寬帶分配公網(wǎng)IP,而是使用網(wǎng)絡地址轉換(NAT) 技術。
-
NAT(網(wǎng)絡地址轉換):你的路由器會創(chuàng)建一個內(nèi)部網(wǎng)絡(如
192.168.1.x),給你的設備分配私網(wǎng)IP。當你訪問外網(wǎng)時,路由器會把你的私網(wǎng)IP和端口轉換成它的公網(wǎng)IP和一個隨機端口,然后發(fā)出去。外部網(wǎng)絡只能看到你的路由器,看不到你內(nèi)網(wǎng)的具體設備。 -
結果:外部網(wǎng)絡(比如你的手機4G網(wǎng)絡)無法主動發(fā)起連接來訪問你內(nèi)網(wǎng)中的電腦、NAS或網(wǎng)站服務器,因為“路”是單向的,只允許內(nèi)網(wǎng)主動向外發(fā)起連接。
2. 內(nèi)網(wǎng)穿透如何解決這個問題?
內(nèi)網(wǎng)穿透的核心思想是:“既然我出不去,那我就請一個中間人幫忙”。
這個“中間人”就是一臺擁有公網(wǎng)IP的服務器(稱為中轉服務器或跳板機)。整個過程分為三步:
-
建立反向隧道(核心步驟):
-
你內(nèi)網(wǎng)中的客戶端(比如你的電腦上運行的穿透軟件)主動、持續(xù)地連接至公網(wǎng)上的中轉服務器。
-
這個連接是長期保持的,就像在內(nèi)網(wǎng)和公網(wǎng)服務器之間打通了一條“隧道”。因為連接是由內(nèi)網(wǎng)發(fā)起的,所以它成功地穿過了路由器的NAT限制。
-
-
公網(wǎng)訪問請求:
-
當外部用戶想要訪問你的內(nèi)網(wǎng)服務時,他實際上是先去訪問那個擁有公網(wǎng)IP的中轉服務器(例如,訪問
your-domain.frp.com)。
-
-
數(shù)據(jù)轉發(fā):
-
中轉服務器收到請求后,通過之前建立好的“隧道”,將請求數(shù)據(jù)轉發(fā)給你內(nèi)網(wǎng)的客戶端。
-
內(nèi)網(wǎng)客戶端處理這個請求(比如從你的本地網(wǎng)站獲取一個頁面),然后將響應數(shù)據(jù)再通過“隧道”發(fā)回給中轉服務器。
-
中轉服務器最后將這個響應數(shù)據(jù)返回給外部用戶。
-
簡單比喻:
內(nèi)網(wǎng)設備就像在一個沒有對外公開電話號碼的公司內(nèi)部座機(分機號8080)。中轉服務器就像一個總機接線員(有公開電話號)。
內(nèi)部座機(8080)主動打電話給總機,說:“嗨,我是8080,我保持通話不掛斷,有任何找我的電話請你轉給我。”
外部客戶打電話給總機,說:“請轉接8080。”
總機通過保持通話的那條線,把外部客戶的電話轉接到了內(nèi)部8080座機上。
這樣,盡管外部客戶無法直接撥打內(nèi)部座機,但通過總機的轉接,實現(xiàn)了通話。
二、內(nèi)網(wǎng)穿透的配置(以 FRP 為例)
FRP 是一個流行的開源內(nèi)網(wǎng)穿透工具。下面我們以一個典型場景為例:將內(nèi)網(wǎng)一臺電腦上的 80 端口(如一個本地網(wǎng)站)暴露到公網(wǎng)上。
準備工作:
-
一臺具有公網(wǎng)IP的服務器(VPS,如阿里云、騰訊云等)。這將是我們的服務端(frps)。
-
一臺內(nèi)網(wǎng)電腦(你想暴露服務的那臺)。這將是我們的客戶端(frpc)。
-
分別下載對應操作系統(tǒng)版本的 FRP 程序:FRP GitHub Releases
配置步驟:
第一部分:服務端(VPS)配置
-
登錄你的VPS,上傳并解壓 FRP 程序。
-
編輯服務端配置文件
frps.ini:# frps.ini [common] # 服務端監(jiān)聽的端口,用于接收客戶端的連接 bind_port = 7000 # 用于網(wǎng)頁查看frp狀態(tài)的可選配置(可選) dashboard_port = 7500 dashboard_user = admin dashboard_pwd = your_password # 認證令牌,增強安全性(建議設置) token = your_secret_token_123
-
啟動FRP服務端:
bash./frps -c ./frps.ini為了讓服務在后臺持續(xù)運行,建議使用
systemd或nohup。-
使用
systemd(推薦):
創(chuàng)建文件/etc/systemd/system/frps.service:[Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/path/to/your/frps -c /path/to/your/frps.ini [Install] WantedBy=multi-user.target
然后執(zhí)行:
bashsudo systemctl enable frps sudo systemctl start frps
-
第二部分:客戶端(內(nèi)網(wǎng)電腦)配置
-
在內(nèi)網(wǎng)電腦上下載并解壓 FRP。
-
編輯客戶端配置文件
frpc.ini:# frpc.ini [common] # 填寫你的VPS的公網(wǎng)IP地址或域名 server_addr = your_vps_ip.com # 填寫服務端配置的 bind_port server_port = 7000 # 填寫和服務端一致的 token token = your_secret_token_123 # 下面定義你要暴露的服務 [web] # 這是一個服務名稱,可以自定義 type = tcp # 協(xié)議類型 local_ip = 127.0.0.1 # 本地服務的IP,通常是127.0.0.1 local_port = 80 # 本地服務的端口 remote_port = 8080 # 遠程端口(在VPS上開啟的端口) # 這意味著:訪問 your_vps_ip.com:8080 將會被轉發(fā)到內(nèi)網(wǎng)機器的 80 端口。
-
啟動FRP客戶端:
bash./frpc -c ./frpc.ini同樣,客戶端也可以配置為后臺服務。Windows下可以將其設置為開機自啟的服務。
測試訪問
完成以上配置后,當客戶端成功連接上服務端,外部用戶就可以通過訪問 http://你的VPS公網(wǎng)IP:8080 來訪問你內(nèi)網(wǎng)電腦上 80 端口的服務了。
三、其他工具和方案
除了 FRP,還有很多優(yōu)秀的內(nèi)網(wǎng)穿透方案:
-
Ngrok:非常知名,提供官方免費服務器,開箱即用,適合臨時測試。
-
ZeroTier / Tailscale:基于虛擬組網(wǎng)技術(VPN),它們不是簡單的端口轉發(fā),而是為你的所有設備創(chuàng)建一個虛擬的局域網(wǎng),體驗更像直接在內(nèi)網(wǎng)訪問,功能更強大。
-
花生殼 / 向日葵:國內(nèi)商業(yè)軟件,提供軟硬件一體方案,配置簡單,但免費版通常有流量和帶寬限制。
總結
| 方面 | 說明 |
|---|---|
| 核心原理 | 利用內(nèi)網(wǎng)客戶端主動與公網(wǎng)服務器建立持久連接(隧道),由服務器轉發(fā)外部請求來實現(xiàn)穿透。 |
| 關鍵角色 | 服務端(frps):有公網(wǎng)IP,負責轉發(fā)流量。客戶端(frpc):在內(nèi)網(wǎng),主動連接服務端。 |
| 適用場景 | 遠程訪問NAS、演示本地開發(fā)項目、訪問家中路由器、微信小程序開發(fā)調(diào)試等。 |
| 安全注意 | 務必設置強壯的 token,并只暴露必要的端口,因為將內(nèi)網(wǎng)服務暴露到公網(wǎng)會增加安全風險。 |
希望這個詳細的解釋和配置示例能幫助你徹底理解并成功配置內(nèi)網(wǎng)穿透!

浙公網(wǎng)安備 33010602011771號