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

刘学馆 2021-01-19原文

最近组了一台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的就选这个
386
X86架构
386
X86架构
amd64
amd架构
arm
arm架构
arm64
64位arm架构
mips
mips架构
mips64
64位mips架构
mipsle
mipsle架构
mips64le
64位mipsle架构

然后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 rp_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 serviceAfter=network.target syslog.targetWants=network.target
[Service]Type=simpleExecStart=/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.xxxserver_port = 7000token = BQmIBalJ0GG7Qsgb
[DSM]type = tcplocal_ip = 127.0.0.1local_port = 5000remote_port = 6001

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

等待docker映像下载完毕后双击进行设置
高级设置-环境
记得Args的值设为“frpc

设置卷,新增文件,找到刚才上传的frpc.ini(docker-frp-frpc.ini)
装载路径填:/frp/frpc.ini

网络选择与docker相同的网络

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

测试下外网是否可以打开:
浏览器输入 云服务器的公网ip:6001

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

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