什么是打洞
在NAT1
網(wǎng)絡(luò)下,我們可以通過一種 “打洞” 的方式,將本地的 TCP 端口暴露至公網(wǎng)上,運行 HTTP 服務(wù)等。通過Natter 打洞+防火墻的轉(zhuǎn)發(fā)規(guī)則。我們可以方便地將內(nèi)網(wǎng)設(shè)備暴露在公網(wǎng)。
實驗環(huán)境
- Centos7 (內(nèi)網(wǎng)主機)
檢驗網(wǎng)絡(luò)
首次使用,檢查當(dāng)前網(wǎng)絡(luò) NAT 情況。我們首先克隆項目到本地環(huán)境。
git clone https://github.com/MikeWang000000/Natter.git
cd Natter
# 檢驗網(wǎng)絡(luò)
python natter.py --check-nat
如上圖,沒有任何報錯的話。證明可以愉快地玩耍了。
大概率會失敗的原因: 你的家庭網(wǎng)絡(luò)是NAT,不是NAT1.(目前大多數(shù)運營商網(wǎng)絡(luò)都是NAT1)
牛刀小試
實驗?zāi)康模?/strong>
通過外網(wǎng),訪問我本地服務(wù)器(192.168.123.173:5244
)alist云盤。首先我們利用Natter
腳本打洞
python3 natter.py -t 5244
-t
即tcp協(xié)議。
上一步完成后,我們還無法訪問。因為沒有指定內(nèi)網(wǎng)設(shè)備的IP和端口。因此我們需要在路由器中進行端口轉(zhuǎn)發(fā)。
端口轉(zhuǎn)發(fā)
登錄路由器,在端口轉(zhuǎn)發(fā)中設(shè)置參數(shù)如下:
如上,當(dāng)我們訪問http://118.xxxx.xxxx.183:65317/便可以訪問我們本地的5244端口。
多臺設(shè)備打洞
在上述方法中,我們僅僅打通了5244
端口。如果有多個端口和多臺設(shè)備怎么辦呢?或者路由器沒有端口轉(zhuǎn)發(fā)功能怎么辦?我們需要新建一個json文件。內(nèi)容如下
// 注意:JSON 配置文件不支持代碼注釋,此處為說明配置用途。
{
"logging": {
"level": "info", // 日志等級:可選值:"debug"、"info"、"warning"、"error"
"log_file": "./natter.log" // 將日志輸出到指定文件,不需要請留空:""
},
"status_report": {
// 當(dāng)外部IP/端口發(fā)生改變時,會執(zhí)行下方命令。
// 大括號 {...} 為占位符,命令執(zhí)行時會被實際值替換。
// 不需要請留空:""
"hook": "bash ./natter-hook.sh '{protocol}' '{inner_ip}' '{inner_port}' '{outer_ip}' '{outer_port}'",
"status_file": "./natter-status.json" // 將實時端口映射狀態(tài)儲存至指定文件,不需要請留空:""
},
"open_port": {
// 此處設(shè)置 Natter 打洞IP:端口。(僅打洞)
// 此處地址為 Natter 綁定(監(jiān)聽)的地址,Natter 僅對這些地址打洞,您需要手動設(shè)置端口轉(zhuǎn)發(fā)。
// 注意:使用默認出口IP,請使用 0.0.0.0 ,而不是 127.0.0.1 。
"tcp": [
"0.0.0.0:3456",
"0.0.0.0:3457"
],
"udp": [
"0.0.0.0:3456",
"0.0.0.0:3457"
]
},
"forward_port": {
// 此處設(shè)置需要 Natter 開放至公網(wǎng)的 IP:端口。(打洞 + 內(nèi)置轉(zhuǎn)發(fā))
// Natter 會全自動打洞、轉(zhuǎn)發(fā),您無需做任何干預(yù)。
// 注意:使用本機IP,請使用 127.0.0.1,而不是 0.0.0.0 。
"tcp": [
"127.0.0.1:80",
"192.168.1.100:443"
],
"udp": [
"127.0.0.1:53",
"192.168.1.100:51820"
]
},
"stun_server": {
// 此處設(shè)置公共 STUN 服務(wù)器。
// TCP 服務(wù)器請確保 TCP/3478 端口開放可用;
// UDP 服務(wù)器請確保 UDP/3478 端口開放可用。
"tcp": [
"stun.stunprotocol.org",
"stun.voip.blackberry.com"
],
"udp": [
"stun.miwifi.com",
"stun.qq.com"
]
},
"keep_alive": "www.qq.com" // 此處設(shè)置 HTTP Keep-Alive 服務(wù)器。請確保該服務(wù)器 80 端口開放,且支持 HTTP Keep-Alive。
}
運行
python3 natter.py -c ./config.json
總結(jié)
利用此工具,我們可以很便捷地實現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)設(shè)備。但是當(dāng)運營商IP發(fā)生變化時,還不能自動更新IP。因此可以參照前期的文章配合域名自動更新。此外,沒有必要盡量不要將內(nèi)網(wǎng)設(shè)備暴露在公網(wǎng)!
該文章在 2024/6/8 18:49:08 編輯過