之前就说了,由于学校的电信天翼十分之可爱,由于利益链的关系,将上线限制的死死的,甚至还有2天必须重连这么一种玩法,所以,在这种情况下想要实现外网访问NAS不现实。因此,内网穿透技术就来。


参考文章:如何用 Frp 实现外网访问群晖 NAS

内网穿透简介

内网穿透技术即通过一定的手段使得外网可以访问内网的机器。而可能由于种种原因,宽带供应商并不会每一次都会十分好心的给你提供公网IP,毕竟现在公网IP越来越少了,大部分都是提供NAT地址,至于什么是NAT,百度吧。

本文是用Frp实现的,实现条件,需要一台服务器作为“中转站”实现内网穿透。

为啥选择Frp?

不会告诉你我就是因为懒...

前期准备

  1. 一台可以访问的服务器
  2. 一台可以安装Frp Client的NAS

安装过程

其实安装FRP并不难,而且十分快。

1. 服务器端安装Frp Server

服务器连接到SSH,并下载Frps文件,此处具体的内核根据实际情况选择,其他内核请在Releases处下载即可。

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

解压缩:tar -zxvf frp_0.12.0_linux_amd64.tar.gz

进入文件夹,并删除多余文件:

cd frp_0.12.0_linux_amd64

rm -f frpc frpc_full.ini frpc.ini

编辑服务器端配置文件:vi frps.ini

服务器配置如下:

[common]
bind_port = 606
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = 网页面板用户名
dashboard_pwd = 网页面板密码
max_pool_count = 5
authentication_timeout = 900

subdomain_host = onionnet.work

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

关于配置文档的官方详情说明:详细配置说明

保存文件,运行服务器端:./frps -c ./frps.ini

2.客户端(NAS)安装Frp

下文仅针对NAS系统,如有其他Linux系统,万变不离其宗。

  1. 打开NAS的SSH
  2. 连接到SSH
    这里有一个问题,需要切换到root账户才可以有权限不然很多东西都无权限。

切换root:sudo -i

  1. 下载Frp

    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
  2. 编辑服务器端配置文件 : vi frpc.ini
  3. 配置文件说明
[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服务端口
auth_token = 和服务器端[ssh]下的auth_token对应
pool_count = 1

[ssh]
type = tcp
local_ip = NAS 局域网ip
local_port = 与服务器端匹配
remote_port = 与服务器端[ssh]下的listen_port对应

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

如为nas,则结合服务器端的subdomain_host设置,最终nas.onionnet.work:server_port即为内网下的local_ip:local_port对应网页,以下同上,可自行添加

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

PS:请记得将相对应的域名解析到服务器IP名下

6.保存,运行:./frpc -c ./frpc.ini

PS : 如果在服务器端显示了start proxy sucess字样即为穿透成功,此时若根据上述配置填写的信息,

  1. nas的管理页面为:nas.onionnet.work:606
  2. nas的Web Station服务为web.onionnet.work:606

如果不想要后面端口,想要隐藏的话,可以设置nginx反向代理即可,文章可参考:Frp 隐藏 8080 端口

如果想要完美全自动,可以设置好Frp服务器开机自启,文章可参考:frp 自动启动

总结

  1. 优点,免除了端口映射等一堆麻烦,而且不受具体网络环境限制。
  2. 缺点也是很明显的,用起来明显不如直接访问公网IP来的快,而且如果云服务器是以流量计费,则这个流量的费用....

但是平时应急使用必然没问题的,如果服务器带宽好的话使用体验应该不会很差的。

最后修改:2019 年 03 月 05 日
如果觉得我的文章对你有用,请随意赞赏