|
|
|
---
|
|
|
|
title: 外网访问NAS
|
|
|
|
tags:
|
|
|
|
- 网络
|
|
|
|
- NAS技术
|
|
|
|
categories: NAS基础
|
|
|
|
abbrlink: 4218199689
|
|
|
|
date: 2024-02-22 11:02:22
|
|
|
|
keywords:
|
|
|
|
description:
|
|
|
|
---
|
|
|
|
> 很多朋友买回NAS后很关心的一个问题就是如何在外网访问。这里我把自己认为比较好的方法罗列出来并一一实现,我们可以根据自己的实际情况选择使用。
|
|
|
|
|
|
|
|
> 注:在此不考虑quickconnect这种nas自带服务的方式。
|
|
|
|
|
|
|
|
# 外网访问方法汇总
|
|
|
|
|
|
|
|
如图,汇总了我目前认为在外网访问家中NAS比较好用的方法,首推的方法当然还是开通公网IP。
|
|
|
|
|
|
|
|
开通公网IP之后启用DDNS,然后我们就可以直接使用路由器端口映射到NAS,或者使用Traefik、npm代理都可以。
|
|
|
|
|
|
|
|
如果实在无法开通公网IP的话,也可以使用frp进行内网穿透,内网穿透需要有一个拥有公网IP的服务器做一个跳板,有个人服务器的话最好,没有的话,可以使用第三方的免费frp服务。
|
|
|
|
|
|
|
|
下面我对这些方法逐个进行介绍。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/124135.webp">
|
|
|
|
|
|
|
|
# 可以开通公网IP
|
|
|
|
|
|
|
|
首先介绍有公网IP的情况,有公网IP的话,需要配置下DDNS,我在之前[NAS使用DDNS](https://www.dreamlyn.cn/28082.html)那篇文章有过相关的介绍,不清楚怎么配置DDNS的可以去参考下。
|
|
|
|
|
|
|
|
我在这里假设我们的DDNS域名是*.deamlyn.cn,也就是dreamlyn.cn的所有子域名都指向家中的网络。
|
|
|
|
|
|
|
|
## 路由器端口映射到NAS
|
|
|
|
配置好DDNS后,外网访问NAS的最简单的办法就是直接使用路由器端口映射到NAS。
|
|
|
|
|
|
|
|
我以我家的小米路由器为例进行介绍,在路由器界面点击高级设置,然后选择端口转发,在里面添加一条规则,其中名字随便写,这里输入NAS,协议选TCP,端口输入5000,内部IP地址就输入NAS的IP地址,我家的是192.168.31.206,内部端口输入5000,点击添加就可以了。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/124414.webp">
|
|
|
|
|
|
|
|
之后我们就可以使用home.dreamlyn.cn:5000访问NAS 了。
|
|
|
|
|
|
|
|
这种方法固然简单,但是如果在NAS上面安装了很多的服务,每个服务都有不同的端口号,那么我们很容易记错不同服务的端口,所以比较好的方式是使用反向代理,我们只用路由器对traefik或者npm等反向代理服务进行端口映射,而对其他服务则使用traefik等进行反向代理即可。
|
|
|
|
|
|
|
|
这样的话,对于不同的服务,我们可以使用不同的子域名进行访问。比如访问nas,就使用nas.dreamlyn.cn,访问portainer,就使用portainer.dreamlyn.cn.
|
|
|
|
|
|
|
|
## 路由器端口映射Traefik
|
|
|
|
traefik的安装我在[NAS中安装Traefik](https://www.dreamlyn.cn/2636364671.html)这篇文章进行了详细的介绍,这里就不再赘述,我们接着它直接介绍具体使用方式。在nas中的容器相关目录下,找到traefik/conf.d,在里面添加文件nas.yml文件。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125048.webp">
|
|
|
|
|
|
|
|
文件内容如下:
|
|
|
|
|
|
|
|
```
|
|
|
|
http:
|
|
|
|
services:
|
|
|
|
nas:
|
|
|
|
loadBalancer:
|
|
|
|
servers:
|
|
|
|
- url: "http://192.168.31.206:5000"
|
|
|
|
routers:
|
|
|
|
nas:
|
|
|
|
entrypoints: web
|
|
|
|
service: nas
|
|
|
|
rule: Host(`nas.dreamlyn.cn`)
|
|
|
|
```
|
|
|
|
|
|
|
|
这段代码中services下面的nas表示这个服务名为nas,下面的url表示反向代理的地址。
|
|
|
|
|
|
|
|
routers下面的nas表示有个名为nas的路由,入口点为web,也就是80端口,路由对应的服务为nas,规则是nas.dreamlyn.cn,这样我们使用nas.dreamlyn.cn访问时,就可以了。
|
|
|
|
|
|
|
|
这里我们顺便看一眼,我在路由器中端口映射的时候 ,使用外网的880映射到了,traefik的80端口。
|
|
|
|
|
|
|
|
然后我们不需要重启traefik,就可以用nas.dreamlyn.cn:880来访问nas了。
|
|
|
|
|
|
|
|
## 路由器端口映射npm
|
|
|
|
npm是nginx proxy manager的简称,如果在nas里的服务很少用docker安装的话,也推荐使用。这里我介绍下具体的安装和使用方法。
|
|
|
|
|
|
|
|
在nas上合适的位置创建目录,并创建如下文件。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125212.webp">
|
|
|
|
|
|
|
|
其中docker-compose文件如下:
|
|
|
|
```
|
|
|
|
version: '3'
|
|
|
|
services:
|
|
|
|
app:
|
|
|
|
image: 'jc21/nginx-proxy-manager:latest'
|
|
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
|
|
- '680:80'
|
|
|
|
- '681:81'
|
|
|
|
- '6443:443'
|
|
|
|
volumes:
|
|
|
|
- ./data:/data # 把数据存放在在当前文件夹下的 data 文件夹中
|
|
|
|
- ./letsencrypt:/etc/letsencrypt
|
|
|
|
networks:
|
|
|
|
default:
|
|
|
|
external:
|
|
|
|
name: docker_default
|
|
|
|
```
|
|
|
|
|
|
|
|
这里介绍下npm的几个端口,80和443分别为npm接收的http和https请求,我们将他们映射到NAS的680和6443端口。
|
|
|
|
|
|
|
|
81为npm的可视化界面,映射为681端口。
|
|
|
|
|
|
|
|
然后在npm目录下执行如下命令:
|
|
|
|
```
|
|
|
|
# 创建docker网络,如果已经有docker_default网络,则不需要。
|
|
|
|
docker network create -d bridge --attachable=true docker_default
|
|
|
|
# 启动npm
|
|
|
|
docker-compose up -d
|
|
|
|
# 查看启动日志
|
|
|
|
docker-compose logs -f
|
|
|
|
```
|
|
|
|
启动没有问题的话,就可以通过192.168.31.206:681来进入npm的管理界面。
|
|
|
|
|
|
|
|
登陆的初始账号密码是admin@example.com和changeme。
|
|
|
|
|
|
|
|
我们输入正确的账号密码登录。
|
|
|
|
|
|
|
|
首次登陆会提示我们修改账号密码,我们根据自己的情况修改下。
|
|
|
|
|
|
|
|
之后点击proxy hosts –> Add Proxy Host。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125343.webp">
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125421.webp">
|
|
|
|
|
|
|
|
其中domain names填写访问的域名,这里输入nas.dreamlyn.cn;Scheme 输入http;Forward Hostname / IP 输入192.168.31.206;Forward Port 输入 5000。
|
|
|
|
|
|
|
|
点击 save就可以了.
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125453.webp">
|
|
|
|
|
|
|
|
下面我们还需要在路由器中为npm开通端口映射。
|
|
|
|
|
|
|
|
我以我家小米路由器为例进行介绍,打开路由器管理界面,找到端口转发,点击添加规则
|
|
|
|
|
|
|
|
名称这里我填npm;协议选择TCP;外部端口填680;内部IP地址填192.168.31.206,也就是npm所在NAS主机的IP地址;内部端口填写npm的680端口;点击添加。
|
|
|
|
|
|
|
|
然后我们就可以通过nas.dreamlyn.cn:680来访问nas了。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/125535.webp">
|
|
|
|
|
|
|
|
# 无法开通公网IP
|
|
|
|
|
|
|
|
在某些特殊情况下,我们无法开通公网IP,这时我们就需要使用一些折中的办法来访问家中的NAS了,下面分别介绍使用个人CentOS服务器和使用免费frp服务两种方式来实现。
|
|
|
|
|
|
|
|
## 在Centos上搭建frp服务
|
|
|
|
当我们有一台暴漏公网IP的Centos服务器时,可以在服务器端安装frps服务。
|
|
|
|
|
|
|
|
### 下载frp并解压
|
|
|
|
|
|
|
|
到GitHub查看最新版本:https://github.com/fatedier/frp/releases
|
|
|
|
|
|
|
|
如果访问不了github,我在这儿也给出0.45.0版[下载地址](https://oss.dreamlyn.cn/nas/blog/frp_0.45.0_linux_amd64.tar.gz)。
|
|
|
|
|
|
|
|
操作命令如下:
|
|
|
|
```
|
|
|
|
# 下载frp可执行包
|
|
|
|
wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
|
|
|
|
# git无法访问的话,用下面的地址
|
|
|
|
wget https://oss.dreamlyn.cn/nas/blog/frp_0.45.0_linux_amd64.tar.gz
|
|
|
|
# 解压
|
|
|
|
tar zxf frp_0.45.0_linux_amd64.tar.gz
|
|
|
|
```
|
|
|
|
### 配置frps
|
|
|
|
```
|
|
|
|
[common]
|
|
|
|
# fpr客户端和frp服务器通信的地址
|
|
|
|
bind_port = 7000
|
|
|
|
# 默认http和https监听端口
|
|
|
|
vhost_http_port = 80
|
|
|
|
vhost_https_port = 443
|
|
|
|
# 针对不同的服务使用[]隔开,服务名自己可以随便定,跟客户端能对应上就行。
|
|
|
|
[nas_http]
|
|
|
|
type = http
|
|
|
|
custom_domains = nas.dreamlyn.cn
|
|
|
|
auth_token = 123456
|
|
|
|
# 如果没有域名的话,用下面这个可以直接使用ip:5000来访问nas
|
|
|
|
[nas_tcp]
|
|
|
|
listen_port = 5000
|
|
|
|
auth_token = 123456
|
|
|
|
```
|
|
|
|
### 启动frps
|
|
|
|
```
|
|
|
|
# 启动frps
|
|
|
|
./frps -c frps.ini
|
|
|
|
```
|
|
|
|
### 设置开机自启
|
|
|
|
使用vim创建并编辑 /lib/systemd/system/frps.service,设置如下
|
|
|
|
|
|
|
|
```
|
|
|
|
[Unit]
|
|
|
|
Description=Frp Server Service
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
Type=simple
|
|
|
|
# 假设fpr存放地址为/usr/local/
|
|
|
|
ExecStart=/usr/local/frp_0.45.0_linux_amd64/frps -c /usr/local/frp_0.45.0_linux_amd64/frps.ini
|
|
|
|
KillSignal=SIGQUIT
|
|
|
|
TimeoutStopSec=5
|
|
|
|
KillMode=process
|
|
|
|
PrivateTmp=true
|
|
|
|
StandardOutput=syslog
|
|
|
|
StandardError=inherit
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
```
|
|
|
|
|
|
|
|
之后就可以使用如下命令控制frp服务
|
|
|
|
|
|
|
|
```
|
|
|
|
启动服务 systemctl start frps
|
|
|
|
开机自启动 systemctl enable frps
|
|
|
|
重启服务 systemctl restart frps
|
|
|
|
停止服务 systemctl stop frps
|
|
|
|
查看日志与状态 systemctl status frps
|
|
|
|
```
|
|
|
|
## 使用NAS创建frp客户端
|
|
|
|
我采用docker-compose的方式安装frp。
|
|
|
|
在nas上合适的位置创建目录,并创建如下文件。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/130903.webp">
|
|
|
|
|
|
|
|
docker-compose.yml文件如下
|
|
|
|
```
|
|
|
|
---
|
|
|
|
version: "3"
|
|
|
|
services:
|
|
|
|
natfrp:
|
|
|
|
image: oldiy/frpc
|
|
|
|
container_name: natfrp
|
|
|
|
environment:
|
|
|
|
- PUID=1000
|
|
|
|
- PGID=1000
|
|
|
|
- TZ=Asia/Shanghai
|
|
|
|
volumes:
|
|
|
|
- ./configs:/frp
|
|
|
|
restart: unless-stopped
|
|
|
|
networks:
|
|
|
|
default:
|
|
|
|
external:
|
|
|
|
name: docker_default
|
|
|
|
```
|
|
|
|
|
|
|
|
frpc.ini文件如下
|
|
|
|
|
|
|
|
```
|
|
|
|
# 对应Centos搭建的frp服务
|
|
|
|
[common]
|
|
|
|
server_addr = 服务器IP地址
|
|
|
|
server_port = 7000
|
|
|
|
auth_token = 123456
|
|
|
|
|
|
|
|
[nas_http]
|
|
|
|
type = http
|
|
|
|
local_ip = 192.168.31.206
|
|
|
|
local_port = 5000
|
|
|
|
custom_domains = nas.dreamlyn.cn
|
|
|
|
[nas_tcp]
|
|
|
|
local_ip = 192.168.31.206
|
|
|
|
local_port = 5000
|
|
|
|
remote_port = 5000
|
|
|
|
```
|
|
|
|
启动docker容器
|
|
|
|
```
|
|
|
|
cd natfrp
|
|
|
|
docker-compose up -d
|
|
|
|
docker-compose logs -f
|
|
|
|
```
|
|
|
|
OK,可以了,我们可以使用nas.dreamlyn.cn或者服务器IP:5000访问家中的NAS了。
|
|
|
|
|
|
|
|
## 使用第三方免费frp服务
|
|
|
|
当我们没有任何可以暴漏公网IP的服务器时,就需要使用第三方的免费frp服务。
|
|
|
|
|
|
|
|
先来说下什么是第三方免费frp服务吧,它的存在使我们可以在没有公网IP服务器、并且运营商早已封杀80和443端口的情况下,爆露出我们的服务,笔者这个博客的搭建也是采用的这种形式。
|
|
|
|
|
|
|
|
在此推荐使用[SAKURA FRP](https://www.natfrp.com/),隧道限速10M足够使用,每月有5G的免费流量,签到的话还送流量,基本用不完。
|
|
|
|
|
|
|
|
第一步先注册,然后到管理界面点击 服务->隧道列表。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131138.webp">
|
|
|
|
|
|
|
|
然后点击创建隧道然后选择节点,这里的隧道可以理解为从公网IP到自己本地服务的一条线路,我们随便选一个,这里我选择成都电信1。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131244.webp">
|
|
|
|
|
|
|
|
然后如图设置隧道类型、本地IP,本地端口和绑定域名等,随后点击创建。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131315.webp">
|
|
|
|
|
|
|
|
创建成功后,我们把鼠标放在如图所示位置,会出现 cn-cd-dx-1.natfrp.cloud 的域名,我们需要到域名管理后台将 nas.dreamlyn.cn 的cname记录设置为 cn-cd-dx-1.natfrp.cloud。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131347.webp">
|
|
|
|
|
|
|
|
如图是我在dnspod的管理端添加cname记录。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131414.webp">
|
|
|
|
|
|
|
|
## 第三方frp的客户端配置
|
|
|
|
对应frp客户端的安装方式与上文介绍的frp客户端安装方式一模一样,区别在于配置的不同。
|
|
|
|
|
|
|
|
我们在SakuraFrp管理端点击配置文件。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131452.webp">
|
|
|
|
|
|
|
|
在弹出的对话框中点击复制配置。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131515.webp">
|
|
|
|
|
|
|
|
然后如图,打开之前的frpc.ini文件,将内容改为刚才复制的配置,随后启动容器就可以了。
|
|
|
|
|
|
|
|
<img src="https://img.dreamlyn.cn:8443/i/2024/02/26/131547.webp">
|
|
|
|
|
|
|
|
然后我们既可以通过nas.dreamlyn.cn来对nas进行访问了。
|