自建FRP内网穿透,实现外网访问nas等设备

刘学 | skill | 2021-01-20

最近组了一台nas使用,但由于是黑群晖,外网是访问不了的(nas在家,人在外面),有时工作需要家里找文件就显得比较尴尬,所有外网访问家里的nas还是挺有必要的。


之前就有了解FRP,加上刚好续费了十年服务器,所以就尝试搭建FRP内网穿透,实现外网访问nas等设备。

顺便把过程记录下,可能以后重装系统重新搭建需要炒冷饭,也方便有同样需求的参考。



1.前期准备:一台云服务器(如阿里云服务器、腾讯云服务器等),并装有CentOS,我装的是CentOS 7.6 64位,Intel架构




2.服务端操作


找到需要的frp版本,获取下载链接

    

进入frp下载页面(https://github.com/fatedier/frp/releases) 找到需要下载的版本,右键复制下载链接。


譬如我服务器是64位的linux,cpu是intel的就选这个


然后ssh链接云服务器,可以使用putty来ssh(ssh意思可以简单理解为远程操作你的云服务器)

以root的身份登录,回车输入密码,注意的是这里输入密码不会显示也不会显示*,直接输入回车即可


登录成功后输入 wget+下载链接,这里我们的命令是:

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


回车,稍等会就会下载完毕。


解压下载的压缩文件

tar -zxvf frp_0.34.3_linux_amd64.tar.gz


输入后回车


可以查看下是否解压成功

ls



因为我服务器装了宝塔面板,同时对linux不太熟,所以直接登录宝塔面板继续操作了(宝塔面板在你购买服务器时有些服务商可以帮忙安装,不懂的登录官网跟教程走一遍也很简单,这里就不详述了):


在root文件夹下


将frp_0.34.3_linux_amd64 重命名为 frp


进入到frp目录,找到 frps.ini ,点击编辑


加入一个token行,我这里随机生成了一寸乱码,大家可以自行设置,这个是明文密码,建议不要设置为自己的常用密码。

简单说下这个token的作用:云服务器跟nas进行数据交换时,通过token作为“暗号”,“暗号”对上了才进行数据交换,否则掰掰~


搞掂后保存关闭


然后我们回到putty,进入到frp目录,分别运行下面命令

cd frp
./frps -c frps.ini

注意:

如果提示“-bash: ./frps: cannot execute binary file”错误,很可能是你的系统架构和安装环境的系统架构不匹配。这个时候只要去下载安装对应的系统架构的frp进行安装就可以解决。


有些服务器可能没有开放7000端口,这里可以单独开放一下,像我是用宝塔面板的,服务器和宝塔面板都需要开放


Ctrl + c 退出frps服务,然后输入以下命令

iptables -I INPUT -ptcp --dport 7000 -j ACCEPT


输入以下代码进行服务设置

vi /lib/systemd/system/frps.service


i 键进入编辑模式


黏贴下列命令

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp/frps -c /root/frp/frps.ini

[Install]
WantedBy=multi-user.target

esc 键 输入 :wq 回车(注意:含wq前的冒号


启动frp服务

systemctl start frps


设置自动启动

systemctl enable frps


重启vps服务器看下frps服务是否可以开启自启

reboot


等待vps服务器开机,重新连接登录后输入:

ps auxw


查看后台运行的进程,可以找到frp已经运行了

至此服务端设置完毕




3.群晖docker端设置


登录群晖,打开套件中心,下载安装“docker”


打开安装后的docker

映像-新增 -(从url新增)输入这个地址 https://hub.docker.com/r/chenhw2/frp 点击新增


在自己的电脑端新建frpc配置文件(新建txt文档重命名为 frpc.ini)打开后输入以下命令:

[common]
server_addr = 47.xxx.xx.xxx
server_port = 7000
token = BQmIBalJ0GG7Qsgb

[DSM]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 6001



进入file station 在docker文件夹下新建frp文件夹 然后把编辑好的 frp.ini 上传上去



等待docker映像下载完毕后双击进行设置

高级设置-环境

记得Args的值设为“frpc

设置卷,新增文件,找到刚才上传的 frpc.ini(docker-frp-frpc.ini)

装载路径填:/frp/frpc.ini


网络选择与docker相同的网络

这样就设置完毕了,点击应用,下一步,应用,可以看到已经启动了

测试下外网是否可以打开:

浏览器输入 云服务器的公网ip:6001


可以看到已经可以正常打开我的dsm页面了,也就是说我们已经实现了外网的穿透。


最后提醒下,记得云服务器那里要放行对应端口。

评 论