为什么写这篇文章

因为有在外面访问家里 NAS 的需求,群晖自带的动态域名解析访问又太慢(因为群晖自带动态域名的 DNS 服务器在国外)。所以需要用内网穿透技术来实现通过其他公网 IP 来访问家里的 NAS 设备的需求。所以才有了这篇文章。

概念解释

  • NAS - 简单的说就是一个存储中心。
  • Frp - 一种内网穿透技术。
  • 内网穿透 - 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。

内网穿透技术比较

内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。但我个人认为 Frp 是目前最好用配置最简单的(经过测试)。

花生壳

配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。

Ngrok

发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。因为折腾许久没有成功过,最后放弃。

Frp

配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。

具体过程

准备工作

  • 一台有公网 IP 的服务器 (VPS、云主机)- 推荐使用阿里云 ECS
  • NAS (客户端)- 群晖 DS 416 play

服务器端配置

1. 登录服务器,在 Release 页面下载自己服务器对应版本的 Frp:

wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_amd64.tar.gz

2. 解压 tar.gz 文件:

tar -zxvf frp_0.12.0_linux_amd64.tar.gz

3. 进入 frp 目录:

cd frp_0.12.0_linux_amd64

4. 删除不必要的客户端文件:

rm -f frpc frpc_full.ini frpc.ini

说明:frpc 为客户端文件,frps 为服务器端文件

5. 配置服务器端文件:

vi frps.ini

配置文件内容:

[common]
bind_port = 7000
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = 用户名
dashboard_pwd = 密码
max_pool_count = 5
authentication_timeout = 900

subdomain_host = lekee.cc

[ssh]
listen_port = 6000
auth_token = 和客服端 token 对应

配置说明:

  • [common] 必填的
    • bind_port - Frp 服务端口(可自定义)
    • vhost_http_port - http 访问端口(可自定义)
    • dashboard_port - dashboard 界面端口
    • dashboard_user - 登录 dashboard 用户名
    • dashboard_pwd - 登录 dashboard 密码
    • max_pool_count - 最大连接池数量
    • authentication_timeout - 超时验证时间
    • subdomain_host - 自定义二级域名
  • [ssh]
    • listen_port - ssh 访问端口
    • auth_token - 用户身份认证

6. 保存配置文件,启动 Frp 服务器:

./frps -c ./frps.ini

服务端配置结束。

客户端配置

客户端就是您本地需要做外网服务的设备,可以是 PC、Mac、NAS、路由器、或者虚拟机里的 Linux 系统。

1. SSH 登录群晖 NAS(群晖必须开启 SSH):

ssh user@ip

2. 下载 Frp,删除服务端文件:

sudo -i  // 切换 root 用户
wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_386.tar.gz 
tar -zxvf frp_0.12.0_linux_386.tar.gz
cd frp_0.12.0_linux_386
rm -f frps frps_full.ini frps.ini

3. 编辑 frpc.ini 文件(客户端配置文件):

vi frpc.ini

配置文件内容:

[common]
server_addr = ip
server_port = 7000
auth_token = 和服务器端对应
pool_count = 1

[ssh]
type = tcp
local_ip = NAS 局域网ip
local_port = 22
remote_port = 6000

[nas]
type = http
local_port = 5000
subdomain = nas

[web]
type = http
local_port = 80
subdomain = web

配置说明:

  • [common] 必填的
    • server_addr - 服务器端公网 IP
    • server_port - frp 服务端口,和服务器端 bind_port 一致
    • auth_token - 和前面服务器端 [ssh] auth_token 一致
    • pool_count - 连接池数量
  • [ssh]
    • type - 服务类型(tcp、http、https、udp)
    • local_ip - NAS 本地局域网内网 IP
    • local_port - NAS 开启 SSH 服务端口号,默认 22
    • remote_port - 服务器端 SSH 端口
  • [nas] - NAS 管理界面
    • subdomain - 二级域名 nas.lekee.cc 访问 NAS
    • type = http - 服务类型为 http
    • local_port - NAS 默认端口 5000
  • [web] - NAS web Station 服务
    • type = http - 类型为 http
    • local_port = 80 - NAS web 服务端口
    • subdomain = web - 二级域名 web.lekee.cc

注意:使用自定义二级域名的时候,域名 *.lekee.cc 要解析到服务器 IP。

4. 保存并运行:

./frpc -c ./frpc.ini

此时在服务端会看到"start proxy success"字样,即连接成功。

测试运行

SSH 测试

ssh -p 6000 user@服务器ip

user 为你登录群晖 NAS 的用户名

NAS 界面

打开浏览器输入 nas.lekee.cc:8080,显示群晖登录界面即成功。

NAS Web Station

打开浏览器输入 web.lekee.cc:8080,显示 Web Station 页面即成功。

扩展应用

后台运行

后台运行服务的方法有很多,这里推荐使用 nohup 指令,可以在服务器端(Linux)和客户端(NAS)都可以使用:

服务器端:

nohup ./frps -c ./frps.ini &

客户端:

nohup ./frpc -c ./frpc.ini &

隐藏 8080 端口

可以通过配置 Nginx 反向代理来隐藏 8080 端口,使用标准 80 端口访问。

自动启动

可以配置为系统服务实现开机自动启动。

总结

使用状态

目前使用一切正常,能满足日常需求。在外面需要访问 NAS 里的文件的时候速度还比较满意。在外面看 NAS 里的视频也一点都不卡。

展望

这个技术伟大之处就是,只要设备能上网。不管有没有公网 IP,都可以让任何一个能上网的机子访问该设备。该设备可能是一台 PC,一个服务器,一个路由器,一个 NAS,一个摄像头,一个... 无限扩展无限衍生,无限可能...

希望本文能给您带来帮助!

常见问题解决

连接被拒绝(connection refused)

检查服务器端防火墙,确保相关端口已开启:7000、8080、7500、6000

连接超时(connection timed out)

检查服务器安全组规则和防火墙设置,确保相关端口已开放。

子域名不支持('.' and '*' is not supported in subdomain)

服务器端的域名应设置为根域名(如 lekee.cc),客户端只需要设置子域名前缀(如 nas、web),不需要包含完整域名。

授权失败(authorization failed)

需要使用 root 用户执行 frpc 命令。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部