使用frp反代你的群晖NAS

如果你有一部黑群晖或家用web服务器,那么你可以使用本教程帮助你搭建一套外网也可以访问的服务器。你需要的原材料包括:1. 一部群晖NAS,或者其他NAS/Web服务器;2. 一部国内可以访问的VPS,或者独立主机;3. 一个顶级域名,或可自定义DNS的二级域名。

对于原料1,既然你找到这里,想必你已经准备好了一部群晖NAS。组建一部最便宜的黑群晖NAS需要多少钱呢?码钉花了650。400买了一部WYSE微型主机(戴尔从前的无盘终端),250买了一块1TB的西部数据蓝盘(2.5寸笔记本型号)。对于原料2,你可以考虑租用海外的廉价VPS,Virmach价格大约一年80元,Bandwagon一年大约130元。码钉买了50元(8美元)一年的Hostmybyte,听说很菜,但用了半年,虽风中摇曳,却始终未挂。原料3,可以免费搞定,freenom可以提供免费的顶级域名。

在搭建frp服务之前,我们先简单理解一下内网穿透到底在做什么。

下面这张图是正常的网络结构

你和服务器都有对等的公网IP。但是呢,现在都没有这样的好事了。电信和联通都不给你提供公网IP。你需要通过他们的中转路由器中转一下,你的宽带路由器实际得到的是一个该中转路由器分配的内网IP。就像下面的图一样。

这就会造成很多麻烦。你的电脑没有办法通过常见的端口(也就是数字信号的“频道”)与外面沟通。例如,大家本来约定80端口(相当于电视的80频道)是用来做网页服务的。你想自己在家做网页服务,可是联通的中转路由器说,把你的80转到我的99813端口好不好?或者干脆说,相关法律规定不能开通80端口。你就直接嗝屁了。

内网穿透就可以解决这样的问题。收费的方案有“花生壳”,免费的呢,我们就用frp。你问我frp啥意思?额大概是fxxxx reverse proxy的缩写吧。作者叫fxxxx什么的,我不记得了😳。frp的网络连接模式跟下面的图一样。

数据是通过橙色路线从你家中的NAS或者电脑发出,经过frp服务器,然后通过绿色路线发到你办公室的电脑上。所以你得有一台有公网VPS。

下面来说说怎么配置吧。

第一步,配置域名。

将一个二级或者三级域名泛解析到你的VPS主机上。

例如,将*.myhome.tk,或者*.nas.nosame.net,设置A解析到33.44.55.66这个IP上。

下面,我们都以“myhome.tk”为例。

第二步,配置frp client客户端。

打开群晖NAS的shell功能。在控制面板的最后一项“终端机和SNMP”勾中“启动SSH”功能,端口号默认为22。

使用Putty(Win)或者终端(Mac)连接你的NAS

ssh root@10.0.0.2

其中IP是你的NAS内网IP。密码输入NAS的admin管理员密码。由于我使用的黑群晖DSM5.2系统,直接用root账户登录就能获得最高权限。DSM6.2的逻辑又不一样了,欢迎告诉我是怎么实现的。

然后进入/use/share目录下载frp。frp客户端和服务器端是同一个压缩包,下好之后,我们删掉服务端的文件(有洁癖)。命令行如下:

cd /usr/share
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
mv frp_0.20.0_linux_amd64 frpc
cd frpc
rm -f frps frps_full.ini frps.ini

(最新版frp请到这里下载:https://github.com/fatedier/frp/releases)

配置客户端。

vi /usr/share/frpc/frpc.ini

编辑内容如下:

[common]
server_addr = 33.44.55.66 //VPS服务器的公网IP,或者域名
server_port = 7000
auth_token = password //设置一个密码,方便frp客户端与服务端对暗号

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

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

(如果配置黏贴过去无法正常工作,请删除所有注释。)

这样表示你用两个子域名,也就是 nas.myhome.tk 和 web.myhome.tk将可以连接到家中的群晖NAS上。

第三步,建立frp客户端开机启动。

编辑 vi /etc/rc.local ,在 exit 0 这一行之前,加上下面的代码:

sleep 30
nohup /usr/share/frpc/frpc -c /usr/share/frpc/frpc.ini >/dev/null 2>&1 &

保存后,即使重启NAS frp也会自动运行。你可以直接采用下面的命令,测试一下frpc能否工作:

/usr/share/frpc/frpc -c /usr/share/frpc/frpc.ini

正常情况会显示监听命令….也就是一行一行的英文刷出来。按Ctrl + C可以终止运行。如果你想让frpc默默在后台运行,就使用nohup托管:

nohup /usr/share/frpc/frpc -c /usr/share/frpc/frpc.ini >/dev/null 2>&1 &

这时候即使你关闭Putty或终端,frpc仍旧在后台运行。由于采用nohup托管运行,如果你更改配置后希望重新启动,必须手动进行,输入下面的命令:

ps | grep frpc

找到frpc的进程号

26789 root 1234 S /usr/share/frpc/frpc -c /usr/share/frpc/frpc.ini

然后执行kill结束进程:

kill -9 26789

第四步,配置frp server服务端。

使用Putty(Win)或者终端(Mac)连接你的VPS

ssh root@33.44.55.66

其中IP是你的VPS公网IP。

然后进入/use/local目录下载frp。

cd /usr/local
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
mv frp_0.20.0_linux_amd64 frps
cd frps
rm -f frpc frpc_full.ini frpc.ini

(最新版frp请到这里下载:https://github.com/fatedier/frp/releases)

配置服务端。

vi /usr/local/frps/frps.ini

编辑内容如下:

[common]
bind_addr = 0.0.0.0 //允许接入的IP,4个圈表示不限制
bind_port = 7000
vhost_http_port = 88 //在VPS呈现的端口
dashboard_port = 7500 //frp server的控制面板
dashboard_user = userame
dashboard_pwd = 1234
auth_token = password //暗号,还记得吗
subdomain_host = myhome.tk //你的二级域名的主体部分

(如果配置黏贴过去无法正常工作,请删除所有注释。)

7000是frpc/frps的通讯端口,也就是第三张示意图的橙色路线。88是VPS向你转发数据的通讯端口,也就是绿色路线开始的地方。你可以根据需要修改这些配置。

dashboard_port以及账号密码配置也是可选的。如果配置了的话,你就能在浏览器上查看frp的连接情况。话说回来,平时没事谁看这个……

第五步,建立frp服务端开机启动。

首先,新建一个进程管理工具。

vi /etc/init.d/frps

复制下面的内容到新文件内。

#!/bin/sh
### BEGIN INIT INFO
# Provides: frps
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: frps service deamon
# Description: frps service daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/frps/frps
DAEMON_OPTS=-c\ /usr/local/frps/frps.ini
NAME=frps
USER=root

set -e
. /lib/lsb/init-functions

start() {
echo -n "Starting $NAME: "
start-stop-daemon --start \
--user $USER \
-m --pidfile /var/run/$NAME.pid \
-b --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
}

stop() {
echo -n "Stopping $NAME: "
start-stop-daemon --stop \
--pidfile /var/run/$NAME.pid || true
echo "$NAME."
}

status() {
status_of_proc -p /var/run/$NAME.pid "$DAEMON" $NAME && exit 0 || exit $?
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
sleep 2
start
;;
*)
echo "Usage: $NAME {start|stop|restart|status}"
exit 1
;;
esac
exit 0

保存。增加进程管理器的执行属性。

chmod +x /etc/init.d/frps

运行 /etc/init.d/frps start ,然后访问 nas.myhome.tk:88 看看frp有没有正常工作。

然后编辑启动管理,使frp能够开机启动。下面的配置适用于Debian/Ubuntu系统。

vi /etc/rc.local

在 exit 0 这一行之前,加上下面的代码:

sleep 30
/etc/init.d/frp start

保存退出。

重启一下服务器,看看你的frp能否正常工作。

第六步,设置nginx反向代理。

这一步是可选的。如果你觉得88端口不好看,可以将frp服务端的88端口转给nginx处理。

码钉用的lnmp一键安装包建立的网页服务器,不需要再安装nginx,直接配置就好了。

新建一个nginx配置文件:

vi /usr/local/nginx/conf/vhost/frp-hosts.conf

粘贴下面的内容:

server
{
 listen 80;
 server_name nas.myhome.tk;
 location / {
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://33.44.55.66:88;
 }
#access_log /var/log/nginx/a.com_access.log;
}
server
{
listen 80;
server_name web.myhome.tk;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://33.44.55.66:88;
}
#access_log /var/log/nginx/b.com_access.log;
}

重新加载nginx配置:

/etc/init.d/nginx reload

这样,你就只需要输入 nas.myhome.tk 就能访问你的NAS,而不需要输入 nas.myhome.tk:88 这样麻烦的地址。

还有其他问题的话,请留言讨论。

本文主要是用来记录我如何配置NAS的frp内网穿透的,参考了多位大大的博客,时间久了也不知道具体查了那些,难以一一罗列。

Leave a Reply

Your email address will not be published. Required fields are marked *