之前寫了兩篇使用IPv6進(jìn)行內(nèi)網(wǎng)穿透的文章《基于IPv6的內(nèi)網(wǎng)穿透》、《IPv6實(shí)現(xiàn)外網(wǎng)訪問家中設(shè)備》。熱心網(wǎng)友【不吃魚de貓】看了后,留言提示用Lucky會(huì)更簡(jiǎn)便。剛好實(shí)際使用過程中,發(fā)現(xiàn)IPv6內(nèi)網(wǎng)穿透有以下兩個(gè)缺點(diǎn):1. 只能在IPv6環(huán)境下使用;2. 需要關(guān)閉路由器上的IPv6防火墻,相當(dāng)把家里所有設(shè)備都暴露在公網(wǎng)上,安全性低。于是嘗試使用Lucky。本文記錄設(shè)置Lucky的STUN內(nèi)網(wǎng)穿透服務(wù)過程。本次設(shè)置Lucky主要參考下面的文章,也是Lucky作者推薦的參考案例,但有些設(shè)置細(xì)節(jié)略有變化。打通大內(nèi)網(wǎng)第一期 無公網(wǎng)部署https和反向代理(基于Lucky的STUN穿透)
有關(guān)STUN內(nèi)網(wǎng)穿透,這里直接從Lucky官網(wǎng)截圖。使用STUN進(jìn)行內(nèi)網(wǎng)穿透的前提是用戶網(wǎng)絡(luò)為NAT1。如何測(cè)試自己的網(wǎng)絡(luò)是否為NAT1,可以參考下面的文章。本人未進(jìn)行網(wǎng)絡(luò)類型測(cè)試。使用的是移動(dòng)寬帶,光貓橋接,路由器撥號(hào),使用STUN內(nèi)網(wǎng)穿透成功。
使用 Lucky 的 STUN 內(nèi)網(wǎng)穿透利用 UPNP 和 NAT1 在公網(wǎng)打洞并配置偽 DDNS
部署在黑豹X2盒子上,采用docker compose方式,docker-compose.yml文件如下。與官方的安裝建議略有差異。2.15.7為當(dāng)前最新版。services:
lucky:
image: gdy666/lucky:2.15.7
container_name: lucky
volumes:
- /etc/lucky:/goodluck
network_mode: host
restart: unless-stopped
在瀏覽器中輸入下面的網(wǎng)址即可登錄Lucky管理界面。默認(rèn)賬戶和密碼均為666。為了后續(xù)能安全地訪問Lucky控制臺(tái),建議修改默認(rèn)的端口、安全入口、管理賬號(hào)和密碼。由于運(yùn)行Lucky的設(shè)備是接在路由器之后,因此需要先將設(shè)備暴露在公網(wǎng)上。這里有兩種方式。第一種,在路由器設(shè)置中,將運(yùn)行Lucky的設(shè)備設(shè)置為DMZ主機(jī)。如下圖所示。DMZ主機(jī)模式會(huì)將內(nèi)網(wǎng)設(shè)備完全暴露在公網(wǎng)上,安全性較低。而且用此種方式需要Lucky來進(jìn)行端口數(shù)據(jù)轉(zhuǎn)發(fā),效率偏低。第二種,在路由器上定義端口映射。將指定端口上的數(shù)據(jù)轉(zhuǎn)發(fā)到內(nèi)網(wǎng)設(shè)備的端口上,如下圖所示。只暴露設(shè)備的部分端口,并由路由器進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),安全性和效率都要高不少。1.在路由器中定義端口轉(zhuǎn)發(fā)。選擇一個(gè)不容易沖突的外部端口,如18887,轉(zhuǎn)發(fā)到內(nèi)網(wǎng)設(shè)備服務(wù)對(duì)應(yīng)的IP和端口。如上圖所示,第一個(gè)內(nèi)網(wǎng)設(shè)備IP地址為192.168.0.202,它的3389端口是遠(yuǎn)程桌面服務(wù)。2. STUN內(nèi)網(wǎng)穿透設(shè)置。添加STUN內(nèi)網(wǎng)穿透規(guī)則,參考中的步驟進(jìn)行設(shè)置。注意【穿透通道本地端口】要設(shè)置為路由器端口轉(zhuǎn)發(fā)中的外部端口,如前面設(shè)置的18887,并打開不使用Lucky內(nèi)置端口轉(zhuǎn)發(fā)。添加完后,若穿透成功,就會(huì)出現(xiàn)外網(wǎng)訪問地址,如下圖所示。使用該地址(需帶端口號(hào)),就能訪問內(nèi)網(wǎng)對(duì)應(yīng)設(shè)備的服務(wù)了。針對(duì)不同的內(nèi)網(wǎng)服務(wù),在路由器上設(shè)置端口轉(zhuǎn)發(fā),然后添加對(duì)應(yīng)的穿透規(guī)則即可。使用STUN內(nèi)網(wǎng)穿透,穿透后的外網(wǎng)訪問IP和端口會(huì)動(dòng)態(tài)變化。實(shí)際使用下來,IP地址基本不變,而端口會(huì)因規(guī)則的修改或者Lucky軟件的重新啟動(dòng)而發(fā)生變化。Lucky的STUN穿透規(guī)則內(nèi)置了Webhook功能,當(dāng)穿透后的IP或端口有變化時(shí),會(huì)向設(shè)置好的API推送消息。前面參考的文章采用的是網(wǎng)頁重定向方法,需要有自己的域名。這里介紹一種不花錢的方式,通過釘釘群機(jī)器人推送。1. 創(chuàng)建一個(gè)釘釘群,并添加自定義機(jī)器人。2. 隨便給機(jī)器人取個(gè)名字。復(fù)制并保存Webhook地址。在安全設(shè)置中選擇自定義關(guān)鍵詞,可隨便填一個(gè)單詞,然后點(diǎn)擊完成。3. 編輯穿透規(guī)則。啟用Webhook。接口地址為剛才復(fù)制的API地址,其它按下圖所示設(shè)置。注意請(qǐng)求體中,content對(duì)應(yīng)的內(nèi)容需包含上一步自定義的關(guān)鍵詞。{
"text":{
"content":"lucky, ssh: #{ipAddr}"
},
"msgtype":"text"
}
4. 點(diǎn)擊Webhook手動(dòng)觸發(fā)測(cè)試。設(shè)置無誤的情況下,可以在釘釘群內(nèi)看到這條穿透規(guī)則對(duì)應(yīng)的外網(wǎng)訪問地址。至此,基于Lucky的內(nèi)網(wǎng)穿透介紹完成。目前還有問題的一點(diǎn)是此種方式是通過HTTP方式訪問,存在安全風(fēng)險(xiǎn)。由于本人使用了路由器端口轉(zhuǎn)發(fā)模式,還未找到簡(jiǎn)單的通過HTTPS訪問內(nèi)網(wǎng)服務(wù)的方法。前面引用的兩篇文章都有采用HTTPS訪問內(nèi)網(wǎng)服務(wù)的介紹,各位可以參考。
閱讀原文:原文鏈接
該文章在 2025/3/18 12:10:25 編輯過