统计
  • 建站日期:2022-01-17
  • 文章总数:5648 篇
  • 评论总数:51116条
  • 分类总数:43 个
  • 最后更新:1天前

家庭宽带搭建服务器的设想

作者头像
首页 综合教程 正文
广告
广告

image.png

很不幸,我的公网IP的服务端口被运营商封掉禁止访问了。

确实运营商是不允许家庭宽带提供WEB服务的,国内要假设WEB服务按规定必须要备案,但有的时候如果能自己暴露出一些端口直接访问的话,还是感觉会方便一点。

或者每次访问的时候连接VPN到家庭宽带内网后再访问,这样也安全,就是不太方便,想跟朋友分享会比较麻烦。

正常来说,如果要假设WEB服务的话,应该在阿里云或腾讯云等云平台上购买服务器,在这个服务器上配置好自己的服务,然后进行ICP备案。

但是个人感觉,国内的服务器都好贵啊(我比较抠门),几百块买一年的服务器,带宽可能才4Mbps,家庭宽带随随便便都几百Mbps的下载速度,上传一般也有20~30Mbps,相比公有云提供的带宽来说,可谓是遥遥领先。

并且云服务器提供的硬盘也比较小,少的可能20G,多的可能也就200G(容量再大财力吃不消啊),如果想在上面自建流媒体服务器的话,很快容量就不够了。

方案一:直接在拥有公网IP的家庭宽带上部署

  • • 已经不现实了,随时可能被运营商防火墙封禁端口。

方案二:用云服务器进行转发,云服务器上配置反向代理

  • • 在传输数据的时候,服务器相当于一个中转站,数据传输的带宽会受限于云服务器的带宽,即便你家里的带宽很大,最终使用的时候,还是会被云服务器所拖慢。

那如果云服务器只是作为一个跳板呢?在访问的时候重新跳转到家庭宽带的IP端口,这样带宽问题就没了,但是还是会遇到方案一所述的问题,端口可能被运营商所封禁。

我的设想

假如购买一个最便宜的云服务器,成本约99一年。

访问云服务器时通过302跳转到自己家庭宽带暴露服务的IP端口。

但是这个设想需要解决方案一的问题,端口被运营商封禁的情况。

我的想法是,利用TCP打洞+端口复用,再加上检测机制,从而实现在端口被封的时候,云服务器自动指向到最新能使用的端口。

以下内容中,通过服务器A 指代云服务器,服务器B 指代家庭宽带内部的服务器。

依赖条件

家庭宽带需要有公网IP,或者NAT类型是 Fullcone NAT

TCP打洞

有现成的工具,叫做Natter https://github.com/MikeWang000000/Natter/

原理大致是这样的

  1. 1. 服务器B使用natter应用,通过本地端口X向外发起TCP长连接,从而维持NAT的端口映射关系

  2. 2. 通过STUN服务器,获取到服务器B对应的公网IP和公网端口Y

  3. 3. 服务器B 利用端口复用的特性,监听本地端口X,对外提供服务

这样一来,当我们访问家庭宽带公网的Y端口时,数据就会通过NAT映射,指向到服务器B的X端口,同时因为X端口通过端口复用被监听,我们就能访问到监听X端口的应用所提供的服务了。

动态检测机制更新

由于我们通过家宽提供服务,比如传输文件或视频的时候,可能会被运营商防火墙检测到,端口可能会被运营商给屏蔽掉,这种时候,我们就需要在云服务器上,动态更新家庭宽带服务器的端口信息了。

我的设想是,云服务器A可以定期(比如30秒)检测一下家庭宽带服务器所提供的端口是否能够访问,假如不能访问,就通过一些方式通知到服务器B重新获取新的公网端口,比如服务器A与服务器B之间建立虚拟专用网,然后在服务器B上运行一个服务可用检测的服务端。

服务器A通知到服务器B后,服务器B上的服务端重新触发natter进行TCP打洞,并将对应的公网IP和端口号返回给云服务器A。

云服务器A收到新的IP端口组合后,修改NGINX所指向的信息,并重启NGINX服务,最终,用户只需要访问服务器A的IP,就能自动跳转到服务器B所提供的服务,服务器B端口的更改对用户来说基本无感,在端口被封掉到服务器A重新指向新的端口之前,可能会有无法访问的情况,当服务器A完成端口更新后,访问就可以恢复了。

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系客服并出示版权证明以便删除!
最新修改支付宝6位极品ID教程
« 上一篇 04-21
早期的VPN,如今却“变成了”梯子?
下一篇 » 04-21

发表评论

  • 泡泡
  • 阿呆
  • 阿鲁
  • 蛆音娘
    没有更多评论了