Frp 实现外网访问群晖 NAS

frps frpc 配置

不再赘述,具体可参考官方文档,贴一下我的配置文件:

#frps
[common]
bind_port=11031  
kcp_bind_port=11031  
vhost_http_port=1103  
vhost_https_port=11034  
privilege_token=xxxxxx  
tcp_mux = true

[ssh]
listen_port = 11032

dashboard_port=11030  
dashboard_user=xxx  
dashboard_pwd=xxx

log_file = ./frps.log  
# trace, debug, info, warn, error
log_level = info  
log_max_days = 3  
#frpc
[common]
server_addr = frp.xxx.com  
server_port = 11031  
privilege_token = xxxxxx

[ssh]
type = tcp  
local_ip = 127.0.0.1  
local_port = 22  
remote_port = 11032

[nas]
type = http  
local_port = 5000  
custom_domains = nas.frp.xxx.com

[web]
type = http  
local_port = 80  
custom_domains = nasweb.frp.xxx.com  

群晖下 frpc 自动启动

需要以 root 账号操作,DSM6+ 不再提供root账号,可登陆admin账号,然后sudo -i提升为root账号

部署 frpc

mkdir -p /usr/local/frp  
cp -Rf /volume1/homes/y836097668/Drive/dev/frp_synology/frp_0.19.1_linux_amd64/ /usr/local/frp/

cd /usr/local/frp/

echo '#/bin/bash  
cd /usr/local/frp/frp_0.19.1_linux_amd64  
nohup ./frpc -c ./frpc.ini &  
' > ./frpc.sh  

chmod +x frpc.sh  
# /usr/local/frp/frpc.sh

设置自启动

1.登录群晖 NAS 系统

2.进入控制面板

3.任务计划>新增>触发的任务>用户定义的脚本

4.常规

  • 设置名称名称,如:frp
  • 用户账号:root
  • 事件:开机

5.任务设置

用户定义的脚本,上面创建的脚本

/usr/local/frp/frpc.sh

以上设置可以成功,但在群晖系统升级后,启动文件和frpc文件都丢失了,故测试一下放到 /usr/local/frp/目录以观后效。。。。心累

centos 7 下 frps 自启动

复制文件

sudo cp frps /usr/local/bin/frps  
sudo mkdir /etc/frp  
sudo cp frps.ini /etc/frp/frps.ini  

编写 frp service 文件,以 CENTOS7 为例

vim /usr/lib/systemd/system/frps.service  

内容如下

[Unit]
Description=frps  
After=network.target

[Service]
TimeoutStartSec=30  
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini  
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target  

启动 frp 并设置开机启动

sudo systemctl enable frps  
sudo systemctl start frps  
sudo systemctl status frps  

群晖DSM 集成短信提醒

选择的是国内小众的短信服务提供商,短信宝(0.1¥/条),支持最小50条充值。

接口调用示例:

http://www.smsbao.com/sms?u=$username&p=$password&m=$mobile&c=$content

# p 平台登录密码MD5后的值(32位,不区分大小写)
# u 在本短信平台注册的用户名
# m 接收的手机号;群发时多个手机号以逗号分隔,一次不要超过99个号码(不能带+86)
# 发送内容,采用UTF-8 URL ENCODE --- 代码示例:UrlEncode("【短信宝】您的验证码是4564", "UTF-8")

统一使用 UTF-8 编码,请确保文件编码及传入参数的格式

不过群晖是国际化的系统,要求必须带+86,可以通过服务端转发,以 Nginx 为例:

# 短信接口转发到短信宝    
server {  
    listen       80;
    server_name  "sms.sherlocky.com";

    ## 参数u 代表用户名
    set $u $arg_u;
    ## 参数p 代表密码需要MD5以下:md5(xxx),此处暂时写死
    set $p $arg_p;

    ## 根据国内运营商要求,必须加上【XXX】的内容才能发送短信,
    ## 单独写个转发是因为国际化的群晖DSM在通知填写的号码的时候,强制填写国际代码,所以号码前面会加“+86”这3个字符
    ## 而短信宝又太本土化,加了+86就发送不了短信了
    location /sms {
        ## 参数m 代表手机号,不能带+86
        set $m "xxxxxxx";
        ## 短信内容前缀:【XXXX】(国家要求必须有前缀)
        set $cPrefix "%E3%80%90XXX%E3%80%91";
        proxy_pass http://www.smsbao.com/sms?u=$u&p=$p&m=$m&c=$cPrefix$arg_c;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /query {
        proxy_pass http://api.smsbao.com/query?u=$u&p=$p;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }       
}    

查询余额API

http://api.smsbao.com/query?u=$username&p=$password  

邮箱配置

使用126邮箱,用户名不包含@126.com,密码不是邮箱密码,是网易设置里的客户端授权密码。