前言

上一篇《树莓派4B记录——NO.1 - 初始化篇》已经介绍了如何将新到手的树莓派配置成NodeJS+MySQL+Nginx的开发环境。
假定此时,你已经完成了Web服务的搭建(或者安装完Nginx即可),通过内网IP,在浏览器中可以打开网页。

image.png

本篇将介绍如何在外网打开我们的Web服务。主要分为以下几步:

  • 宽带IP私网转公网
  • 设置DMZ和端口映射
  • DDNS动态域名解析
  • 隐藏端口

备注:网上有内网穿透的教程,即没有公网IP,利用花生壳等工具来实现。比较适合一对一的访问,即访问者和内网服务提供者都需要配置花生壳的服务,才能实现穿透访问。但是我们这里需要实现的是Web服务器,让每个访问者都配置穿透,不现实。故这里不介绍。

宽带IP私网转公网

万里长征第一步,也是最关键的一步。要想外网访问你的Web服务,你必须有自己的公网IP。
我家里是合肥电信100M宽带,默认给的是私网IP。各位如无意外,各个运营商给的99.99%是私网IP,所以需要申请开通公网IP。以下是本人操作的具体步骤:

  1. 电话10000号打给客服,告诉服务小姐姐你需要私网转公网
    此时客服不会多问,给你提工单。
  2. 第二天会有客服电话打给你,让你去大营业厅去办理“修改终端拨号并发数”。
    原来私网模式下我们家庭宽带默认拨号并发数是4个,也就是在你家可以同时用4个路由器,输入宽带帐号密码来拨号。有个疑问,假如不同的家庭利用同一个宽带账号拨号,不知道有没有限制?
    第二天我去了稍微大点的营业厅,不到十分钟很快也能办好。但是不会立马生效,估计也是提工单待后台运维来完成配置后生效。
  3. 当晚电信师傅上门
    师傅上门前,并发数修改生效了,此时家里的宽带也掉线了。原因后来才发现,需要光猫为路由模式,下接的路由器为桥接模式。
    师傅会让你在一个单子上签字,一顿折腾改完路由桥接模式后,宽带恢复,iTV也恢复。
  4. 公网生效
    此时,你什么都不需要做,就等生效就行了。我是师傅第二天告诉我生效了,检查光猫的WAN口IP后,可确定生效了,并在外网ping这个IP,是可以通的!

设置DMZ和端口映射

公网IP已经到手了,如何访问Web服务?两种途径:

  • DMZ主机
    可以理解为完全对外开放的一台主机。所有IP可以访问它,可以访问所有端口。
    可一劳永逸,但是安全性低。
  • 端口映射
    配置有限的对外开放的端口,并且内外端口可以不相等。
    一个服务可以理解为一个端口,安全性和定制性较高。

上面2种方法都可,都需要在电信的光猫上配置,推荐端口映射
注意,最好将树莓派与光猫直连,否则连在路由器的话,可能不在同一个子网里,那么还需要该子网掩码。

配置完成后,在外网环境下打开http://公网IP:8088(假定Web服务对外端口为8088),能看到页面,说明配置成功!

DDNS动态域名解析

家庭宽带虽然公网不花钱,但是是动态的。大约1天(没有统计过,感觉差不多)会刷新后换一个新的IP。这就给访问带来问题,假如你希望通过域名来访问,如何绑定这个动态的IP呢?

网上也有各种方案,我本人也尝试了几种:

  • 花生壳DDNS
    优点:

    • 配置较为简单
      只能说较为简单,因为需要修改几处:

      1. 改域名的解析为NS指向花生壳的某个url
      2. 修改光猫的DDNS服务

    缺点:

    • 收费,费用为40/年,虽然不多。
    • 需要光猫支持,并且尝试后发现会经常显示设备离线,不知道这个光猫出了什么问题。
  • 动态修改域名解析记录
    我的域名是在阿里云下的,阿里云的云解析有开放的API,支持开发者通过AccessKey调用SDK接口来实现对域名的管理。
    优点:

    • 灵活
    • 不收费

    只需要以下2个API

    缺点:

    • 需要自己编码并部署实现,有技术门槛
    • 我设置的轮询周期为5分钟,所以理论上可能会出现长达5分钟的解析失败。因为是个人博客,所以可以不介意。

具体选择哪个方案,读者可根据自身情况来选择。我选择的是后者。

总之配置成功的标志是通过域名加端口能够访问页面,即成功第一步!
另外公网IP变化后,也能访问,才是真正的成功!

隐藏端口

到这里,已经可以通过域名:端口访问到我们的页面了。
这里之所以要加端口,是因为运营商会将80,443等常用端口封禁,这是硬伤。
但是,也有办法绕过。阿里云的域名解析中有隐性URL,可以实现。

具体步骤如下:

  1. 新建一个二级域名blog.shiwang.wang指向我们的web服务,这里需要配置Nginx。
    image.png
  2. 在阿里云域名解析增加一条A记录,指向上一步的blog二级域名。配置完成后,外网下http://blog.shiwang.wang:8088能正常打开我们的页面。
    image.png
  3. 阿里云域名解析增加一条隐性URL
    image.png

大功告成,再打开http://shiwang.wang即可打开我们的页面。基本原理可F12打开,阿里云给用iFrame包了一层,浏览器地址栏不带端口,而iFrame里的地址是带端口的并且是二级域名。

注意:结合上一步的DDNS,后面每次通过API修改解析记录,只需要修改blog那一条即可。

问题

虽然通过隐性URL实现了隐藏80端口,但是在实践中还是会有问题:

  • URL不会变化
    如首页的URL为http://shiwang.wang,点击某个链接跳转至http://shiwang.wang/blog后,浏览器地址栏URL仍然为http://shiwang.wang,这样就无法实现收藏功能。

davidshi
33 声望6 粉丝

Deliver Happiness


引用和评论

0 条评论