内网穿透实用指南 – Frp+NAS

概念:

  • NAS – 简单的说就是一个私有化的存储中心。(本人的nas直接丢到了出租屋,但是比较傻的出租屋的房东路由带上我的路由器有两级路由,这也是写这篇分享的由头了)
  • Frp – 一种内网穿透技术。
  • 内网穿透 – 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。

关于其他:

  • 内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。
    但我个人认为 Frp 是目前最好用配置最简单的(经过测试)。
  • 花生壳
    配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。
  • Ngrok
    发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。
  • Frp
    配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。

基本步骤

由于 Frp 官网GitHub文档还是比较详细。我不过多做解释。

Frp 的基础架构如下,分为服务端和客户端,原理是通过一台公网服务器,做客户端代理。这样,不管你的User端有几层路由,原则上只要可以和公网通讯即可完成穿透。这就意味着你需要类似VPN一样准备一台代理服务器做穿透。这里推荐大家用腾讯云广州的CVM,速度还是比较快的。

 

服务器端配置:

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

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

实例中:腾讯云用的 centos7 所以我选择 linux_amd64 64位的

使用 tar 指令解压 tar.gz 文件

tar -zxvf frp_0.12.0_linux_amd64.tar.gz

进入 frp 目录

cd frp_0.12.0_linux_amd64

删除不必要的客户端文件

rm -f frpc frpc_full.ini frpc.ini

版本不同可能稍有差异

frpc 为客户端文件
frps 为服务器端文件

配置服务器端文件

vi frps.ini

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 = canmeng.net

[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 用户身份认证

官方详细配置

保存上面配置文件吗,启动 frp 服务器

./frps -c ./frps.ini

需要后台运行,请看下面
服务端配置结束。

打开ip:7500 即可看到frp的 dashboard 界面

客户端配置

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

这篇文章主要是利用 Frp 技术访问在群晖 NAS 服务的应用。实例也是 NAS 系统。

SSH 登录群晖 NAS (群晖必须开启 ssh)

下载 Frp, 删除服务端文件。(因为和服务端配置一样,不再一一赘述。)

sudo -i // 切换 root 用户
wget https://github.com/fatedier/frp/releases/download/v0.28.1/frp_0.28.1_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

编辑 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 = sss

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

简单解释:

[common] 必填的
server_addr 服务器端公网
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 端口,和服务器端 [ssh] listen_port 配置一致

[nas] NAS 管理界面
type = http 服务类型为 http
local_port NAS 默认端口 5000
subdomain = sss 二级域名 sss.canmeng.net 访问 NAS

[web] NAS web Station 服务,没用可以不用设置
type = http 类型为 http
local_port = 80 NAS web 服务端口
subdomain = web 二级域名 web.canmeng.net

使用自定义二级域名的时候,域名 *.canmeng.net 要解析到服务器 IP,或者解析相关二级域

官方详细配置

保存,运行。(后台运行,请看下面)

./frpc -c ./frpc.ini

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

测试运行

ssh 测试

ssh -p 6000 user@服务器ip
user 为你登录群晖 NAS 的用户名

nas 界面

打开浏览器输入 sss.canmeng.net:8080, 显示群晖登录界面成功。

NAS web Station

打开浏览器输入 web.canmeng.net:8080, 显示页面成功。

后台运行

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

服务器端

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

客户端

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

自动启动

进入群晖控制面板 > 任务计划 > 新增 > 触发任务 > 用户定义的脚本

添加脚本

/root/frp_0.28.0_linux_386/frpc -c /root/frp/frpc.ini

注意:frp_0.28.0_linux_386 需要换成你自己的路径

 

勾选任务,点击保存即可

总结

除了NAS,内网穿透的应用场景还有很多,非常感谢Frp的作者七牛云的fatedier。作为补充材料,就写这么多吧。希望对大家有些许帮助。