内网穿透:路由器拨号+端口转发+DDNS实现自定义域名访问内网服务器
本文最后更新于 2025年1月7日 晚上
前言
经常用各种云盘,但感觉还是不够好:
- 1.文件在别人服务器上终究不可靠,最近阿里云盘还曝出隐私文件泄露问题
- 2.这些个免费云盘又是限速又是要下载客户端才能用,很麻烦,这些个垃圾客户端一个都不想装
于是就想搞一个私有云盘,电脑端直接用网页访问。
正好之前买的国内的云服务器到期了,甲骨文云上免费的两台服务器国内访问又很慢,做不了什么东西,于是买了个低功耗迷你主机,直接把物理服务器放家里,牢牢掌握所有权,还能把一些小服务迁移过来。
研究了一下开源的一些云盘系统,要么功能很复杂,要么UI太难看或者没有安卓客户端可用,要么是英文文档不想看。
最后决定用国内的一个不开源的网盘系统“可道云”,界面看起来比较舒服,也有许多插件可以用(在线预览视频图片、图片编辑、在线文档、markdown编辑器等等很方便),可以外链分享,不需要下载客户端,网页可以直接访问,支持用户管理,而且可以用宝塔面板一键部署
云盘是部署好了,内网访问一点毛病没有,问题是公网到底应该怎么访问?
总的来说两种方式:
- 1.依赖中转服务器的,缺点:慢,数据经过别人手上
- 一些内网穿透服务商,花生壳之类的,一般速度比较慢,还有一个国内的chmlfrp
https://appel.chmlfrp.cn/
, 带宽可以给8M,算是很好了 - 或者各种frp服务,都需要一台云服务器进行转发,也有免费提供服务的,也是慢
- 也试过Cloudflare的Tunnel,直接建立隧道,而且默认开启SSL,还是相当不错的,但是在国内Cloudflare的速度实在是,一个字,超级慢!
- 一些内网穿透服务商,花生壳之类的,一般速度比较慢,还有一个国内的chmlfrp
- 2.P2P的模式,用公网IP通过端口映射连接内网设备,快的要命,缺点是麻烦,主要有以下一些问题:
- 运营商通常不会分配公网IP,很难申请
- 有公网IP也没用,光猫防火墙默认开启无法关闭,并且禁用ping,并且端口映射功能阉割没法用,必须把光猫改成桥接模式,改用路由器拨号
- 即使光猫能端口映射也没用,光猫的DHCP服务器非常垃圾,所以一般用路由器承担DHCP服务器,这样的话内网设备通常和光猫不在同一网段,即使光猫可以做端口转发,也需要路由器和光猫转发两次,有点复杂
- 用路由器拨号也没用,路由器本身也有防护墙,可能没法关闭
光猫改桥接用路由器拨号
这一步联系运营商解决,改桥接后至少解决了光猫防火墙无法关闭的问题,路由器能够设置端口转发了
路由器设置端口转发
我用的是小米路由器,自带端口转发功能,还有一个DMZ功能,可以把内网某个设备的所有端口映射到路由器公网IP的端口上,此时访问公网IP:端口等同于访问内网IP:端口,但是要注意:公网IP的80和443端口是被禁用的,用这个端口转发不会生效
高级设置-端口转发,这样会暴露所有端口,因此要在内网服务器上设置防火墙
此时在 常用设置-上网设置 查看路由器公网IP,在后面添加内网服务的端口号,即可访问内网服务,我这里ipv4和ipv6(需要路由器开启ipv6功能)都可以
设置DDNS
这样设置完成后就只剩下一个问题了,运营商给的公网IP是会变的,即使网络一直在用不中断,也会随机改变,公网ipv6地址不确定会不会变,目前没看到变化,但姑且认为他也是会变的,这时候就需要用到DDNS了,
DDNS(动态域名系统)是一种服务,它允许你将动态IP地址映射到一个固定的域名上。这样,即使你的IP地址变化,你也能通过域名来访问你的服务器或服务。DDNS服务对于家庭用户和小型企业尤其有用,因为他们通常没有静态IP地址,但可能需要远程访问家中或办公室的网络资源。
实现DDNS的方式也有很多,有很多DDNS服务商可以提供相关服务,我没有用这些服务,而是利用了Cloudflare的API,定时主动更新DNS记录,需要申请API令牌
代码如下,实现的功能是每隔10分钟自动读取一次设备的公网IP(我这里设备是没有公网ipv4地址的,由于开启了端口转发,因此只要获取路由器的公网IP即可,如果路由器没有公网IPv4地址,可以用IPv6地址)并调用API对DNS记录进行更新,我这里同时添加了ipv4和ipv6地址到pan.xinhaojin.top,客户端如果支持ipv6会优先使用ipv6访问
1 |
|
添加一个服务到/etc/systemd/system/ddns.service
1 |
|
1 |
|
正常log
1 |
|
nginx配置注意事项
由于公网访问pan.xinhaojin.top需要增加端口号88,不是很优雅,所以会想到通过nginx转发,如下配置
1 |
|
但实际配置后在内网可省略端口号,但公网访问不可省略端口号,且可能导致添加端口号也无法访问,原因是运营商禁80和443端口
下图配置的时候我应用了nginx端口转发,同时启用了https,网站访问起来很优雅,但还是不建议添加这个nginx配置,还是多一步手动添加端口号吧
成果展示
上传速度可以达到40MB/s,哪个网盘有我快?(按理我上传没有有这么大带宽啊),反正5G网络测试下载里面的视频速度可以有10MB以上
下一步想看看能不能把夸克网盘挂载到这上面,这样就可以用这一个网页来管理我的私有云和常用的夸克云盘了