最近,我幫一位朋友配置了下從公網訪問家里 Web 應用。

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

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

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