最近,我?guī)鸵晃慌笥雅渲昧讼聫墓W(wǎng)訪問家里 Web 應(yīng)用。

背景
這位朋友自己基于 Django 寫了一個 Web 應(yīng)用,部署在自己電腦的虛擬機上。但是想讓其他同事訪問時,卻犯了難,應(yīng)該該怎樣將這個 Web 應(yīng)用暴露到公網(wǎng)上呢?
解決方案
我首先想到的是通過 NAT 轉(zhuǎn)換來實現(xiàn)。NAT 轉(zhuǎn)換是一種將內(nèi)網(wǎng) IP 地址映射到公網(wǎng) IP 地址的技術(shù),可以支持通過公網(wǎng) IP 訪問到位于內(nèi)網(wǎng)的 Web 應(yīng)用。
但是,在實際配置過程中,我需要解決兩個問題。
第一個問題
朋友家里使用的是運營商提供的光貓和路由器。光貓負(fù)責(zé)撥號上網(wǎng),路由器負(fù)責(zé)將光信號轉(zhuǎn)為電信號并提供無線網(wǎng)絡(luò)。但是,運營商提供的光貓和路由器并沒有 NAT 轉(zhuǎn)換功能。
為了解決這個問題,我讓朋友聯(lián)系運營商,將光貓的網(wǎng)絡(luò)模式改為橋接模式。橋接模式下,光貓將光信號轉(zhuǎn)為電信號后,將數(shù)據(jù)直接傳遞給路由器,路由器負(fù)責(zé)進(jìn)行撥號和其他網(wǎng)絡(luò)功能。好在聯(lián)通很好說話,當(dāng)即答應(yīng)可以修改。
早幾年運營商的設(shè)備是可以通過超級用戶登錄進(jìn)去自己修改的,但現(xiàn)在可能都禁用掉了,我搜索了幾個賬號密碼,測試都沒成功。
修改為橋接模式后,朋友將路由器也升級為華碩的 AX5400,這已經(jīng)屬于是比較高端的設(shè)備了。
撥號成功連上網(wǎng)絡(luò)后,我再次遠(yuǎn)程過去,進(jìn)行配置。在這臺路由器上配置 NAT 轉(zhuǎn)換非常簡單,只需在路由器的管理界面中找到 端口轉(zhuǎn)發(fā) 功能,然后添加一條規(guī)則,將內(nèi)網(wǎng) IP 地址和端口映射到公網(wǎng) IP 地址和端口即可。

當(dāng)時沒有截圖,網(wǎng)圖一張,侵權(quán)即刪
第二個問題
當(dāng)我們通過公網(wǎng) IP 加端口號訪問時,每當(dāng)家用寬帶公網(wǎng) IP 地址發(fā)生變化,我們就得使用新的公網(wǎng) IP 進(jìn)行訪問,這非常不方便。
但好在一分錢一分貨,這臺華碩的路由器功能一應(yīng)俱全,除了 NAT 還有 DDNS。DDNS 是動態(tài)域名解析的縮寫,可以將一個固定的域名映射到一個動態(tài)變化的公網(wǎng) IP 地址,以便訪問者能夠通過域名訪問web應(yīng)用。
這臺路由器上有很多 DDNS 服務(wù)商,我選用了華碩自己的 DDNS,
一個是方便,不需要另外去配置,
第二個是軟硬一體,使用起來會更有優(yōu)勢。
我自己的華為路由器配置 Oray 花生殼 DDNS 就碰到過經(jīng)常斷開連接的問題,后來去花粉論壇發(fā)帖尋找售后,推送了更新才解決。
在路由器上配置 DDNS 也非常簡單,只需在路由器的管理界面中找到 DDNS 功能,然后選擇一個 DDNS 服務(wù)商并填寫相關(guān)信息即可。

當(dāng)時沒有截圖,網(wǎng)圖一張,侵權(quán)即刪
避開運營商常見封禁端口
在完成了 NAT 轉(zhuǎn)換和 DDNS 配置后,朋友的 Web 應(yīng)用已經(jīng)可以通過域名訪問了。但是,在測試過程中,我們發(fā)現(xiàn) Web 應(yīng)用的端口(8000)無法訪問。經(jīng)過檢查,我們發(fā)現(xiàn)運營商可能封禁了8000端口。將 Web 應(yīng)用的端口改為隨機端口后,就可以正常訪問了。
順利完成需求
經(jīng)過一番努力,我們最終成功地將朋友的 Web 應(yīng)用暴露到了公網(wǎng)上,可以通過域名直接訪問。
整個過程雖然遇到了一些問題,但大家配合得很好,最終都取得了圓滿的結(jié)果。
實現(xiàn)內(nèi)網(wǎng)穿透的其他方案
實際上,如今實現(xiàn)內(nèi)網(wǎng)穿透的方式有很多,也有一些其他的軟件可以使用,比如 FRP、Ngrok 等,或者直接使用現(xiàn)有的商業(yè)方案,比如花生殼。
大家只需要按照實際情況,選擇最適合自己的方案就行了