前言

我们通过购买国内云服务器自建zerotier根服务器后,能不能使云服务器和家里的nas加入到我们的虚拟内网使其联通,在外面就可以访问我们的nas?答案是可以的。下面就是具体的实现步骤。

实现步骤

云服务器配置域名

1.购买一个便宜的域名

2.将域名解析到我们的云服务器

3.为需要代理的服务配置子域名

如果域名解析到国内服务器需要备案才能提供服务

云服务器安装zerotier客户端

参考linux部署

nas安装zerotier客户端

nas安装可以参考linux部署,也可以参考使用的nas系统的教程进行安装,记得需要将Planet文件替换成zerotier根服务器的,加入网络就可以获取nas在虚拟局域网的ip地址,就可以去服务器上通过Nginx代理进行访问。

云服务器安装Nginx

在我们部署zerotier根服务器的云服务器上安装Nginx。

Ubuntu/Debian 系统:

# 更新源
sudo apt update

# 安装 Nginx
sudo apt install nginx -y

# 管理服务
sudo systemctl start nginx
sudo systemctl enable nginx

CentOS/RHEL 系统:

# 添加 EPEL 源(CentOS 7)
sudo yum install epel-release -y

# 安装 Nginx
sudo yum install nginx -y

# 管理服务
sudo systemctl start nginx
sudo systemctl enable nginx

安装成功后,Nginx位置在/etc/nginx下,进去配置Nginx代理配置:

# 进入配置目录
cd /etc/nginx/sites-available

# 创建新的配置文件(以 example.com 为例)
sudo nano example.conf

编写反向代理配置(以代理Nas的 Navidrome为例)


# ======================== Navidrome 子域名(music.example.top) ========================
server {
listen 443 ssl http2;
server_name music.example.top;

# SSL 证书(复用泛域名证书),不需要SSL配置可删除,需要请替换成自己域名的SSL证书
ssl_certificate /etc/letsencrypt/live/example.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.top/privkey.pem;
include /etc/nginx/conf.d/ssl.conf;

# 安全头(全局)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

# 代理到 Navidrome 服务
location / {
proxy_pass http://10.42.212.149:4533;#nas的虚拟局域网ip+ Navidrome端口
include proxy_params;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

# 安全头(仅限 Navidrome)注意wss请替换成自己的域名
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: https:; media-src * blob:; connect-src 'self' wss://*.example.top;" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "same-origin" always;
}

# 隐藏所有后端返回的安全头
proxy_hide_header Content-Security-Policy;
proxy_hide_header X-Content-Type-Options;
proxy_hide_header X-Frame-Options;
proxy_hide_header Referrer-Policy;
}
#不配置SSL请删除
server {
listen 80;
server_name music.example.top;
return 301 https://$host$request_uri;
}

SSL证书配置请参考:如何为 Hexo 博客配置 Nginx 泛域名 SSL 证书(含自动续期) | 人间客的Blog

1.配置文件不需要SSL配置可删除(需要请替换成自己域名的SSL证书)

2.安全头设置请注意wss替换成自己的域名

启用配置:

# 创建符号链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t

重启Nginx

# 重新加载配置(不中断服务)
sudo systemctl reload nginx

# 或完整重启
sudo systemctl restart nginx

注意事项:

  1. 防火墙配置:记得开放服务器的443和80端口
  2. 域名解析:提前将域名 A 记录指向服务器 IP

到此就配置完成,可以访问配置好的域名查看效果,可以通过不同的子域名代理到nas的各种服务,只需要配置相应的代理即可。

效果

Nginx+zerotier内网穿透.png