大家好,我是羊刀仙。
公网IP对于咱们NAS用户来说是非常重的,现在公网IPv4越来越难获取,公网IPv6虽然也是可用方案,但目前普及度并不算广而且也不是想搞就能搞得到,若你的宽带是双栈那在群里便可力压群雄,是可以装X的~
其实各家NAS厂商基本都有自己的外网方案,就拿我最常用的威联通来说,可以通过官方提供 myQNAPcloud Link 外网访问设备,但毕竟用户基数庞大,每个人能分配得到的带宽有限,并不能很好地满足所有需求。我也试过 Zerotier ,不过还是有些局限性在里面。
本篇我会介绍利用 VPS 和 Nginx Proxy Manager ,以Docker部署方式通过frp做内网穿透,完美实现通过域名访问NAS上搭建的服务。整个过程也比较简单,一步步来即可。
准备一个主域名(建议)和一个VPS服务器(必须)。关于VPS,因为443端口(国内需备案)还有Docker被墙问题,更推荐使用国外VPS轻松实现无端口号访问。个人不太喜欢花精力撸免费VPS,也不太放心~文末会放置服务器推荐。本期成本:8+139≈150RMB
什么是frp
我认为有必要先提前介绍一下:
frp(fast reverse proxy),是国内大佬专注于内网穿透的高性能的反向代理应用
frp支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp通过go语言写的,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。
frp服务端(搭建于VPS)和客户端(搭建于内网设备) UI 页面。
通过frp可以把原来不能在互联网上访问的内网服务,以安全、便捷的方式通过具备公网 IP 的节点中转发布到公网。这样以来,就可以在外面随时访问家里设备上搭建的服务。
准备工作
域名解析
这里建议准备一个专用的主域解析到服务器上。这里以阿里云为例。
打开阿里云主页,找到域名解析,点击解析设置
。
添加两条解析记录,如下图所示,记录类型为A,主机记录为主域名和泛域名,记录值为VPS服务器的公网IP。
其它不用管,保存后解析工作完成。
VPS基础配置
VPS购买平台不同,一些设置项或功能名称可能有略微不同,请自行辨别。阿里云比较有代表性,就也以它为例吧~
购买完等待VPS系统初始化后,首先要设置的就是安全组(防火墙),阿里云分了出/入方向(很多服务商不做区分),我们一般情况仅需添加下图框内的两类,如果你担心安全问题,可以根据需求逐个开放TCP协议端口(我直接1~66535全部开启)。
接下来,要初步启用服务器有几件必须做的事情。本篇以我的Debian 10为例,其它系统例如Ubuntu也大差不差。
通过SSH连接进入控制台,类似于NAS,利用工具在控制台输入以下命令:
ssh root@106.45.22.34 # 不同系统账户名不同,IP为外网或公网IP,这个要注意
sudo -i # debian一般不需要,默认给root
apt update # 更新软件包列表,让系统知道有哪些软件包可以更新
apt upgrade --only-upgrade # 安装所有可用的软件包更新
apt install wget curl sudo vim git -y # 安装常用软件,Debian一般来说需要这步
接下来安装Docker,接着输入命令:
wget -qO- get.docker.com | bash # 非大陆服务器安装docker
docker -v # 确认是否安装成功及查看版本
systemctl enable docker # 设置开机自动启动
apt install docker-compose # 安装docker-compose
docker-compose --version #查看docker-compose版本
这些工作做完,就可以直接开搞!
部署配置frp服务
部署并配置frp服务端(VPS)
还是在咱们的VPS服务器上。
大佬牛人就是多,能用docker-compose部署就非常舒服。输入以下命令:
mkdir -p /root/data/docker_data/frps # 创建安装目录
cd /root/data/docker_data/frps # 进入该目录下
vim docker-compose.yml # 创建并编辑docker-compose.yml文件
具体代码如下
version: '3'
services:
frps:
image: stilleshan/frps
container_name: frps
restart: always
network_mode: host
volumes:
- ./frpc.toml:/frp/frpc.toml
英文输入状态下,按i
即可进行修改。修改完毕后,按下esc
,再同时按下shift
+:
,英文状态输入wq
并回车,即可保存。
接着输入以下命令,创建并配置frps.toml
服务端的配置文件:
vim frps.toml
将以下代码修改,复制粘贴进去后,保存并退出,操作类似。
bindAddr = "0.0.0.0"
bindPort = 7000
quicBindPort = 7000
# 以下两项注释变量不在本文最终代码内,需要折回删除
# 如果仅需要域名http访问可去掉注释
# 手动配置自签/常规的TLS/SSL证书也可保留
# 但需要进行额外配置,请参考下面引用部分官方手册
# vhostHTTPPort = 80
# vhostHTTPSPort = 443
webServer.addr = "0.0.0.0"
webServer.port = 7500 # frps的web管理端口,公网IP:7500
webServer.user = "admin"
webServer.password = "admin"
webServer.pprofEnable = false
auth.method = "token"
auth.token = "12345678"
若按照本文来,则无需参照这个:
为本地HTTP服务启用HTTPS:https://github.com/fatedier/frp?tab=readme-ov-file#enable-https-for-a-local-https-service
关于TLS设置:https://github.com/fatedier/frp?tab=readme-ov-file#tls
接着输入命令搭建运行:
docker-compose up -d
部署并配置frp客户端(NAS)
打开你需要外网访问的内网设备,我的这台为威联通NAS。
同样的,要创建并配置frpc.toml
文件。通过威联通的 Text Editor文本编辑器 ,创建一个文本文件,将以下代码粘贴进去。
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
auth.method = "token"
auth.token = "12345678"
[[proxies]]
name = "web_nas"
type = "http"
localIP = "192.168.200.110"
localPort = 5000
customDomains = ["nas.xxx.com"] # 这是上面解析好的域名,也可替换成端口号,请往下看
这个配置有规律可循,类似的,如果有其它应用往上累加就行。
填写完毕后,另存新档命名为frpc.toml
,保存在/share/Container/frpc
目录下,各位也可自定保存位置。
接着打开威联通官方的Container Station容器管理工具即可。创建新的应用程序。
代码如下,注意文件映射路径:
version: '3'
services:
frpc:
image: snowdreamtech/frpc
container_name: frpc
restart: always
network_mode: host
volumes:
- /share/Container/frp/frpc.toml:/etc/frp/frpc.toml
查看docker日志,跑起来了,没啥问题。登陆frpc服务器端面板(公网IP:7500),可以看到已经有内容,因为配置的是http域名访问,根据之前frpc配置,使用80端口(vhostHTTPPort = 80),一切都对。
我之所以做frp穿透,原因就是公司有专属内网嘛,屏蔽了太多东西访问很不方便(IT震怒哈哈哈),这下直接可以通过域名访问喽,但是http显示不安全
回归标题,实现HTTPS域名无端口访问
更改配置,改变访问方式
在frpc客户端的配置文件做改动,如果全部按照官方文档来,我认为比较麻烦。
仅需对客户端(NAS)的配置文件frpc.toml
改动。结果如下:
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
auth.method = "token"
auth.token = "12345678"
[[proxies]]
name = "web_nas"
type = "tcp" # http改成tcp
localIP = "192.168.200.110"
localPort = 5000
remotePort = 9898 # 把二级域名换掉
也就是说,原本web输入nas.xxx.com
访问NAS,更改配置后就变成了输入公网IP:9898
。
修改配置文件后,我们将其保存,NAS端重新部署一下frpc客户端即可。
此时web端再输入 公网IP:9898 ,成功访问,依然http显示不安全。
部署Nginx Proxy Manager
过去在威联通NAS部署的攻略:https://blog.ydxian.xyz/archives/npm
但这次我们要部署在VPS上。
SSH连接,接着上面的步骤,输入以下命令:
mkdir -p /root/data/docker_data/npm # 创建安装目录
cd /root/data/docker_data/npm # 进入该目录下
vim docker-compose.yml # 创建并编辑docker-compose.yml文件
将下面代码粘贴进去:
version: '3'
services:
nginx-proxy-manager:
container_name: nginx-proxy-manager
image: jc21/nginx-proxy-manager:latest
ports:
- '80:80' # 作为反代工具,三个端口皆不建议修改。
- '81:81' # 国内VPS 酌情修改,下同
- '443:443'
volumes:
- "./data:/data" # 冒号左边可改路径,./表示当前路径下
- "./letsencrypt:/etc/letsencrypt" # 同理
restart: unless-stopped
英文输入状态下,按i
即可进行修改。修改完毕后,按下esc
,再同时按下shift
+:
,英文状态输入wq
并回车,即可保存。
接着我们输入以下命令开始部署:
docker-compose up -d
部署完毕后,web输入VPS服务器公网IP:81
并回车即可访问 Nginx Proxy Manager 的管理界面。
初始账号密码如下:
admin@example.com
changeme
进去会先弹出界面,填写你自己的邮箱及更换密码,设置一个好记忆的,以后继续出VPS玩法教程,咱们还会频繁用它。
按照下图箭头所指进行操作。
填写相关信息,域名不必多说,nas.xxx.com/qb.xxx.com/jellyfin.xxx.com, 在主域名前加前缀,好记为主;关于IP,默认都是172.17.0.1
,不放心的可以SSH输入ip addr show docker0
查询;端口号就是VPS对应服务的监听端口号,参考下图
需要注意的是,如果你的 Nginx Proxy Manager 部署于其它服务器,IP这里就要填写 frps 所在的服务器公网IP!
接着换到SSL一栏,如下图进行勾选,最后点击Save进行保存:
等待自动配置,可能要稍微等会儿,配置填对问题都不大,结果如下。
web再次输入域名尝试访问威联通NAS,可以看到:域名、无端口、HTTPS,最终目的达成。
最后
一般来说公网ipv4是最优选,用公网ipv6也完全足够,本文主要是为实在没辙的朋友提供解决办法。VPS作用也不仅于此,还可拿来搭建docker镜像加速服务等,后续有时间我也会出相关教程~
推荐几个性价比还不错的国内云服务商:
Ucloud,笔者自用,(2核2G 60GB 峰值带宽30Mbps 流量包600GB/月 139RMB/年 续费同价)
莱卡云,笔者博客站是这家的,(2核2G 30GB 峰值带宽10~20Mbps 流量包300GB/月 16~20RMB/月 续费同价)
评论区