家用小服务器 篇四:0元实现外网HTTPS访问局域网NAS

2022-12-01 17:03:02 16点赞 214收藏 13评论


0. 前言

本文实现在外网访问家里局域网的NAS,并通过HTTPS对访问安全性进行加固。具体设备包括一台小主机(非必要),一台NAS。家用小服务器(小主机)在之前介绍过了,为J4105工控板,安装ubuntu server 20.04系统,在本文场景中作为跳板机。这台小主机也不是必需的,如果没有则将正文操作全部放到NAS也能实现相同功能。小主机存在的意义在于避免直接将NAS暴露到互联网,为下一步在小主机上做一些安全加固或者灵活配置提供一个平台。系统架构如下图,涉及两个网络,一个是家里局域网,另一个是vlan,小主机既有局域网IP又有vlan的IP,起到转发的作用。

架构架构

1. 外网访问

采用Zerotier进行异地组网,实现从互联网直接穿透访问局域网设备,具体方法站内已有经验分享了,下面简单介绍下。

首先需要到Zerotier官网注册一个账号

注册Zerotier注册Zerotier

注册完成后,需要创建一个网络。下面图中我已经建好了一个网络。

Zerotier新增网络Zerotier新增网络

Zerotier会分配一个network id,这个id在设备加入这个虚拟网络时需要用到免费用户可以有25个设备加入到这个网络,在一个网络里的设备可以互相访问。因为免费,所以带宽并不是那么理想,但是对于我日常操作NAS或者访问我小主机上的应用来说够用了。

Zerotier提供了Windows/Linux/Android等平台的客户端,用于各种设备加入,也支持通过docker容器部署客户端。我的J4105设备安装的是Ubuntu,自然采用docker来部署。在小主机上启动zerotier容器:

docker run -d --name myzerotier --cap-add NET_ADMIN
--network=host --device /dev/net/tun
zerotier/zerotier

注意,必须有--network=host,否则下面的联网可能失败。

然后加入zerotier网络,下面的字符串就是前面提到的network id。当然和前面启动容器合起来一行脚本执行。

docker exec myzerotier zerotier-cli join dxxxxxxxxxxxxxxxxx0

Zerotier客户端部署Zerotier客户端部署

上面脚本执行完成后,需要到zerotier网站,登录自己用户,进入到network页面。这时可以看到你的设备已经出现在“Members”列表中,将前面的√选上,其他都不用操作(没有confirm 之类的按钮),过一会设备就会实际加入到网络中。

Members列表,注意前面可以打勾Members列表,注意前面可以打勾

也可以直接把zerotier容器部署在nas上,让nas直接加入到zerotier虚拟网络中,我这里并没有这么做。

2. 配置转发

本节操作都在小主机上进行。

2.1 签发SSL证书

获取证书途径一般有两种:向CA认证商购买或者使用OpenSSL自签证书。在linux下可以使用openssl工具自签证书用于HTTPS,在小主机上执行以下脚本。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/ssl/server.key -out /home/ssl/server.crt

openssl自签证书openssl自签证书


# crt文件转换成pem文件

openssl x509 -in server.crt -out server.pem -outform PEM

以上操作生成两个文件server.perm和sever.key

2.2 部署nginx

Nginx是一款开源、高性能、可靠的 Web 和反向代理服务器,可以在windows和linux上部署。在小主机上启动nginx,实现转发。Nginx以docker方式部署,将宿主机上的配置文件和证书映射到容器内部,实现nginx配置。

docker run -d --restart=always --name nginx-test -p 8580:80 -p 443:443
-v /home/containers/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/containers/nginx/logs:/var/log/nginx
-v /home/containers/nginx/ssl/server.pem:/etc/nginx/server.pem
-v /home/containers/nginx/ssl/server.key:/etc/nginx/server.key nginx

以下格式更易读

部署nginx部署nginx

解释下上面的docker命令,-p 8580:80表示宿主机的8580映射到docker容器的80端口,因此nginx实际监听的是宿主机的8580端口, -p 443:443表示443也做了映射(端口号不变)。-v参数将宿主机上的nginx.conf文件映射到容器内目录,这样方便修改配置,后面几个-v参数的映射了logs目录以及将ssl证书载入到容器内。配置文件nginx.conf是nginx实现网络转发的关键,它的内容如下:

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name localhost;

location / {
proxy_pass http://192.168.0.105:5000;
# proxy_redirect default;
}

}

server {
listen 443 ssl;
server_name localhost;

ssl_certificate server.pem;
ssl_certificate_key server.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass https://192.168.0.105:5001;
}
}
}

解释下上面的nginx配置文件:(1)监听80端口转发到 http://192.168.0.105:5000,这个地址是威联通NAS的http登陆地址;(2)监听443端口,启用ssl证书,证书地址 (相对nginx.conf的地址) 分别由ssl_certificate和ssl_certificate_key指定,转发到https://192.168.0.105:5001,这是威联通https的登陆地址和端口。如果NAS本身是不带SSL证书的(威联通自带,端口号5001是https),那么监听443端口的server{}下的proxy_pass也指向http地址。


到此,Zerotier组网和nginx+https转发的配置都完成了,找一台外网设备加入这个vlan,然后访问小主机的zerotier IP (https://vlan-ip) 就会跳转到NAS登陆的页面,效果如下

https访问https访问

首次登录浏览器会出现“使用了无效的安全证书”之类的提示,这是因为证书是自签的不是CA机构认证的,可以无视这类提示。

使用QNAP app也可以在外网正常访问,前提是手机下载zerotier app,连上虚拟网络。在页面中填入小主机的zerotier网络IP,选择SSL安全登录,端口号443,就可以在互联网上访问家中NAS了。注意,以上IP及端口需要按自己的环境设置。

通过威联通官方APP从外网访问通过威联通官方APP从外网访问


3. 总结

至此,外网通过HTTPS协议访问家里NAS的配置全部介绍完了。回顾主要步骤:(1)创建Zerotier虚拟网络,(2)小主机使用Zerotier客户端(或者docker)加入虚拟网络,(3)生成SSL自签证书,(4)小主机部署nginx做网络转发。本方案的特点在于NAS作为局域网设备没有部署额外的服务,也不参加vlan组网,自认为可以一定程度上提升安全性。此外重要的一点是,本方案完全免费,且不局限于品牌NAS。

百科QNAP 威联通 TS-451D 四盘位NAS(J4025)威联通 TS-451D这款NAS是2020年6月份发售的,同为4盘位产品,弱于大哥453D,但J4025 这可双核处理器的单核性能很强,对比上代4核心的J3455,也就是落后12%而已。与其同定位的是隔壁群晖DS420+,451D在体积、散热能力上不占优势,但更静音,扩展接口更多。当然451D最大的特点还是便宜,功能差不多,却比竞品便宜30%以上。另外451D提供了HDMI接口,可连接显示器,易于操作。451D主打普通家庭用途,像数据同步、音视频播放解码这些基础工作,处理起来轻轻松松,相比采用J4125处理器的几款大哥,451D是个更务实的选择。值友「晓飞影」晒单点评:最大的亮点就是双核 J4025 的 CPU 了,内置 UHD600 的核显,加上这个机型还有 HDMI 输出,可以看到这台 NAS 的定位就是文件管理、资料保护、HDMI 影音应用。缺点可能就是比起J4125少了两个核心,不支持2.5G和万兆,可以通过usb扩展5G网卡。可以考虑给家里的大姐姐换别墅,或者存储剪辑视频的素材。查看点评晒单详情> 0 点评33 原创60 好价154查看详情



作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

威联通(QNAP)TS-464eU 4盘位1U机架型双2.5G NAS配备M.2 NVMe SSD专用端口短机箱网络存储服务器

威联通(QNAP)TS-464eU 4盘位1U机架型双2.5G NAS配备M.2 NVMe SSD专用端口短机箱网络存储服务器

暂无报价

QNAP 威联通 TS-453Dmini 4盘位NAS(J4125、8GB)

QNAP 威联通 TS-453Dmini 4盘位NAS(J4125、8GB)

暂无报价

QNAP 威联通 TS-832PX 八盘位专业级nas

QNAP 威联通 TS-832PX 八盘位专业级nas

暂无报价

QNAP 威联通 TS-453Bmini 4盘位NAS(J3455、4GB)

QNAP 威联通 TS-453Bmini 4盘位NAS(J3455、4GB)

暂无报价

QNAP 威联通 TS-212P3 双盘位NAS(Realtek RTD1295、1GB)

QNAP 威联通 TS-212P3 双盘位NAS(Realtek RTD1295、1GB)

799元起

QNAP 威联通 TS-451D 4盘位NAS(赛扬J4025、4GB)

QNAP 威联通 TS-451D 4盘位NAS(赛扬J4025、4GB)

1959元起

QNAP 威联通 TS-551 5盘位NAS(赛扬J3355、2GB)

QNAP 威联通 TS-551 5盘位NAS(赛扬J3355、2GB)

暂无报价

QNAP 威联通 TS-464C 4盘位NAS(赛扬N5095 8GB)

QNAP 威联通 TS-464C 4盘位NAS(赛扬N5095 8GB)

3131元起

QNAP 威联通 TS-462C 4盘位NAS(赛扬N4505、4GB)

QNAP 威联通 TS-462C 4盘位NAS(赛扬N4505、4GB)

2339.1元起

QNAP 威联通 TS-532X 五盘位NAS(AL324、2GB)

QNAP 威联通 TS-532X 五盘位NAS(AL324、2GB)

1999元起

QNAP 威联通 TS-262C-2G 双盘位NAS(赛扬N4505、2GB)

QNAP 威联通 TS-262C-2G 双盘位NAS(赛扬N4505、2GB)

1889.1元起

QNAP 威联通 TS-451D 四盘位NAS(J4025)

QNAP 威联通 TS-451D 四盘位NAS(J4025)

暂无报价

QNAP 威联通 TS-428 四盘位NAS (Realtek RTD1296、2GB)

QNAP 威联通 TS-428 四盘位NAS (Realtek RTD1296、2GB)

暂无报价

QNAP 威联通 TS-464C 4盘位8G内存四核心处理器网络存储服务器内置双M.2插槽NAS(含希捷企业盘16T*4)

QNAP 威联通 TS-464C 4盘位8G内存四核心处理器网络存储服务器内置双M.2插槽NAS(含希捷企业盘16T*4)

暂无报价

威联通(QNAP)TS-464C 4盘位8G内存四核心处理器网络存储服务器内置双M.2插槽NAS(含希捷企业盘16T*2)

威联通(QNAP)TS-464C 4盘位8G内存四核心处理器网络存储服务器内置双M.2插槽NAS(含希捷企业盘16T*2)

8099元起

QNAP 威联通 TVS-951N 9盘位NAS (赛扬3865U、4GB)

QNAP 威联通 TVS-951N 9盘位NAS (赛扬3865U、4GB)

暂无报价
13评论

  • 精彩
  • 最新
  • 在主路由或者旁路由上安装zerotier,在zerotier的管理页面上添加内网路由表,要把网关设置为主路由或者旁路由的zerotier分配的地址,这样就可以在外网的客户端上直接输入nas的内网地址访问了。

    校验提示文案

    提交
    谢谢大神

    校验提示文案

    提交
    收起所有回复
  • 个人感觉多此一举……nginx反代可以,但是没有必要SSL。而且你都zeroiter了,为什么不直连nas,难道每开个端口就用ngx反代一下?

    校验提示文案

    提交
    而且我在文中已经说了这个全套都可以直接部署在nas上

    校验提示文案

    提交
    另外就是我不想把nas连到zerotier上

    校验提示文案

    提交
    收起所有回复
  • 最近zerotier是不是用不起了,物理ip识别不出

    校验提示文案

    提交
    我只有一台可以识别出

    校验提示文案

    提交
    收起所有回复
  • 建立nginx的命令是不是有问题,建立好了重新启动nginx提示Error response from daemon: Cannot restart container 4b25e8ad571e: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/containers/nginx/conf/nginx.conf" to rootfs at "/etc/nginx/nginx.conf": mount /home/containers/nginx/conf/nginx.conf:/etc/nginx/nginx.conf (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

    校验提示文案

    提交
    代码不能直接抄啊,宿主机目录要按自己的路径

    校验提示文案

    提交
    收起所有回复
  • 只是把威联通官方主页用nginx作SSL反代,跟NAS里的服务用虚拟网络隔开访问?

    校验提示文案

    提交
    如果按我的方案把ng放在另一台主机上,要访问nas里的服务,需要在nginx.conf里配置转发规则。不知你指的是这个问题吗?如果把nas加入到zerotier的网络里,就可以直接访问nas上所有服务了。

    校验提示文案

    提交
    我的意思是全走虚拟网络限制了带宽,所以只要nginx+ssl就够走外网了,除非只要外网登录nas主页为此保险点多走条虚拟网络也没啥影响。我指的都是反代和nas装一台机器上......

    校验提示文案

    提交
    收起所有回复
  • 我用盒子刷了ARMBIAN,上面装了FRP,DOCKER,DOCKER里安装ngnix,NPM做反代,我还有公网IP,而且443居然也没封,直接做反代后就HTTPS了,FRP后面都用不带端口。***

    校验提示文案

    提交
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
214
扫一下,分享更方便,购买更轻松