最近,我帮一位朋友配置了下从公网访问家里 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 等,或者直接使用现有的商业方案,比如花生壳。
大家只需要按照实际情况,选择最适合自己的方案就行了