# home-server **Repository Path**: mikiweng/home-server ## Basic Information - **Project Name**: home-server - **Description**: 用于将家庭内网电脑设置为可以公网访问的服务器。 并且使用定时任务,定时更新阿里云域名解析为本机的公网IP - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-11-17 - **Last Updated**: 2025-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 - 本文用于将家庭内网电脑设置为可以公网访问的服务器。 - 并且使用定时任务,定时更新阿里云域名解析为本机的公网IP ## 过程 - #### 家庭带宽申请公网IP - 公网 IP 的申请比较方便,只需要打电话给客服说你需要公网 IP 就行,客服会直接帮你操作,一般来说 24 小时内就能搞定了。注意有时候客服会问你要公网 IP 做什么,你就回答工作需要或者访问家里的监控之类的原因就行,但是不要说自己在家里面架设网站。 - 但是,公网IP是动态的,IP不是固定的,可能隔几天就换了。所以后面会有定时任务,定时更新阿里云域名解析为本机的公网IP。 - #### 配置光猫和路由器 - 对外请求流程(以为我自家路由器为例): - ![请求](./asset/image-网络架构.png) - 例如我对外的mtr路径如下: - ![mtr](./asset/image-mtr.png) - 光猫:【192.168.1.1】 - 将光纤传输的光信号转换为电信号,以便连接到家庭内部网络设备。 - 位置:通常位于入户处,与运营商提供的光纤直接相连。 - 主要任务是光电转换,并可能提供基本的数据转发功能。 - 可以浏览器直接访问光猫的地址,登录后进行设置(密码一般位于光猫底部) - 以我自己家里的光猫为例: - 这里的申请的公网动态IP是配置在光猫上面 - 这里连接在光猫网口4的192.168.1.2即我自己的路由器 - ![光猫1](./asset/image-光猫1.png) - ![光猫2](./asset/image-光猫2.png) - 路由器:【192.168.1.2】 - 作用:负责管理数据包在局域网内的分发以及对外网的访问控制。 - 位置:一般放置在家中较为中心的位置,以确保无线信号覆盖范围最广。 - 提供的主要功能包括IP地址分配、NAT(网络地址转换)、防火墙保护、Wi-Fi接入点等。 - 可以浏览器直接访问路由器的地址,登录后进行设置(密码一般位于路由器底部) - ![路由器1](./asset/image-路由器1.png) - 配置公网的端口映射(不同运营商设备可能web页面不太一样,整体应该差不多) - 进入光猫的web的配置管理页面【应用】【虚拟服务器设置】【高级nat设置】 - 这里实际上是将访问的公网IP的端口映射到路由器上,然后路由器再进行转发 - 所以这里的内部IP要填路由器的IP:192.168.1.2,这里的端口根据你的需要进行设置 - 例如我这边将公网的20080映射到路由器的80端口 - ![光猫端口映射](./asset/image-光猫端口映射.png) - 进入路由器的web的配置管理页面【应用功能】【端口转发】 - 这里实际上是将访问的路由器IP的端口映射到你的网络设备的内网IP:192.168.2.24 - 由于光猫已经配置了端口映射,所以这里将光猫的80端口映射到内网IP:192.168.2.24的80端口 - ![路由端口映射](./asset/image-路由器端口映射.png) - 验证 - 我这边本地安装了一个openresty,访问127.0.0.1:80,openresty服务器确实起来了 - openresty服务安装可以参考:https://openresty.org/cn/download.html - ![openresty](./asset/image-openresty.png) - 再浏览器访问:http://公网IP:20080 - 这里本机访问自生网络的公网IP会不通,要换一个网络进行访问 - ![openrest2](./asset/image-openresty2.png) - #### 定时更新域名IP解析 - 上面的两步搞定之后,已经可以通过公网IP访问到你的内网的电脑了,但是还有有个问题就只这个公网IP是动态的。 - 所以我们建立一个任务来定时更新域名的解析为本机的公网IP - 你需要你的局域网内的主机设置crontab执行域名解析更新python脚本,mac和linux系统都自带crontab,windows比较麻烦了,没有尝试过,可以试下wsl2. - 你需要申请一个阿里云的域名,便宜的一年就几块钱。 - 例如我这边自己设置的crontab如下,可以参考:(添加定时任务之前,自己先调试一下脚本,脚本根据你的需要进行修改) - 直接运行即可以,详情查看脚本内容 - set_ip.sh中的python解释权路径和脚本路径根据你的实际情况进行修改 ``` # 定时更新aliyun域名为本机公网IP */1 * * * * /Users/yelingjie/Library/Mobile\ Documents/com~apple~CloudDocs/wengmq-icloud/me/tasks/set_ip.sh 2>&1|tee -a /Users/yelingjie/Library/Mobile\ Documents/com~apple~CloudDocs/wengmq-icloud/me/tasks/set_ip.log # 每天凌晨删除上面的日志 0 0 * * * rm -f /Users/yelingjie/Library/Mobile\ Documents/com~apple~CloudDocs/wengmq-icloud/me/tasks/set_ip.log ``` ## 说明 - 上面的步骤搞定之后,你就可以通过域名(解析到本机公网IP)访问到你局域网内的主机了,并且不用担心公网IP变化的问题。 - 在你的服务器上面建议可以用openresty进行转发你的web服务。 - 主机已经暴露在公网了,所以记得密码要设置强密码,防止被暴力破解,如果需要再安全一点,对外的服务可以走一层CDN,在CDN上做限流、限速、黑名单、白名单等。 - ![domain](./asset/image-domain.png) ## 参考 - https://sspai.com/post/79532 - https://help.aliyun.com/document_detail/257181.html?shareId=5b298fa01693637b51c37f4b5ffd7efd