xtzero.me
将家里的电脑当成服务器放到公网并允许域名访问
技术学习
2022-05-19 16:44:50

起因

最近搬了新家,第一件事就是把原来移动的渣渣宽带退掉,然后携号转网,投靠了联通,顺带办了联通的宽带。租房子的时候一直想在家里搭一个服务器,终于搬进了自己的房子里,就马上开始着手做这件事了。

家里有一个台式机,是之前为了玩游戏自己组的主机,后来又为了装黑苹果换了一套硬件。本来想另外买一套硬件来专门搭服务器的,因为弄房子花光了钱,就只能先用这个台式机先猜猜坑了。尝试着搭一下,看看方案可不可行。如果这次成功了,至少证明这个方案是可行的。等真正需要在家里搭服务器了,再重新来过也可以。

期望

把原来在阿里云上的服务都转移到台式机上来,配置域名解析,让外网可以通过域名访问到台式机的服务上来。

主要还是因为之前买的三年的阿里云服务器要到期了,续期的价格还高了三倍。

方案

  • 先在台式机上装个 CentOS,搭建好服务器环境,把项目都下载下来,代码都跑起来。

  • 配置解析,让域名解析到本地服务器的公网 ip 上。

  • 根据 dnspod 的文档写个定时脚本,让公网 ip 变化后及时上报到 dnspod,修改解析记录。

实现

装系统和搭环境都比较容易,毕竟一直以来做的就是这些东西,这部分略过不写。

配置解析,就需要有当前机器的公网 ip。最开始想要尝试一下 ipv6 的,因为 ipv4 指向的是家里的路由器,ipv6 指向的是具体的设备。

于是使用 IPv6 测试检测了一下,发现家里的网是支持 ipv6 的。

2

但是友人 Hermit 及时指出了问题所在。

1

于是转而使用 ipv4 进行配置了。

3

使用百度获取到家里的 ip,在 dnspod 将域名解析到百度给的 ip 上。

4

然后在小米路由器的后台配置端口转发,需要将路由器被请求的接口映射到电脑上对应服务的端口上。这步没有图,因为我没在家。想起来再补图。

最蛋疼的一步来了,由于是家用宽带,即使提供了动态的公网 ip,也是不允许 80 端口被外部访问的。也就是说,无论服务器内部如何配置,只要客户端访问的端口是 80,这个请求就不会进到服务器中。

这时候就需要使用 dnspod 提供的隐形URL解析功能了。将另一个二级域名的 80 端口隐形转发到主域名的非 80 端口下,这样就实现了外部能访问 80 端口的效果。整个流程大概是这个样子:

5

不光这样就够了,在服务器上还需要用 nginx 来处理对应域名来的请求。以上图举例,nginx 需要处理的是 really.hostname.com:8888,而不是fake.hostname.com,因为真正访问到服务器上的域名是前者。

这样就绕了一个大圈子,终于让外网域名和内网的服务连通了。还有最后一件事,就是依照文档 写定时脚本,定期上报本机 ip 即可。

由于是动态 ip,所以无法避免一个问题:用脚本上报 ip 后,解析生效还需要一段时间,大约五六分钟左右。所以每次 ip 变更后都会有五六分钟的宕机时间,这个暂时没想到方案可以避免。由于搭建的服务器就是我个人的博客和一些小的项目,这个影响暂时不是很大。如果是很多人用的在线服务,这个影响就很大了。

xtzero.me
从前从前,有个人爱你很久
友情链接
这里是友情链接
虽然我很菜,但是也希望可以和更多人交换友链。
作品站
这里是我的 作品站
虽然菜,但还没放弃创造。
推广内容
或许你需要买便宜的服务器
你有优惠我有返利,何乐而不为呢。

立即查看 >>
也想使用 Hikari 2 ?
Hikari 2 已经被用来建站啦!点击这里来查看都有哪些案例以及我们的联系方式吧。