准备

  • 参考资料: frp: NAS 篇十一:小白上手教程,自建Frp内网穿透,实现外网访问nas设备_存储设备_什么值得买 - https://post.smzdm.com/p/ag87m8xw/
  • 买了个3年腾讯轻量云.frps.1315 <-> 群晖.frpc.5000
  • 群晖v6+
  • ssh/docker/docker-compose/docker.image(snowdreamtech/frpc and snowdreamtech/frps)
  • 为了安全,请限制端口的访问源地址
  • 为了安全,请用frp的token验证或更高级别的验证 common: authentication_method = token token = 你自己定义

开始

#frp server side
root@VM-24-7-ubuntu:~/nfs/frp# pwd
/root/nfs/frp
root@VM-24-7-ubuntu:~/nfs/frp# cat frps.ini 
# 复制如下配置,自行修改密码
[common]
bind_port = 10000
vhost_http_port = 10001
vhost_https_port = 10002
dashboard_addr = 0.0.0.0
dashboard_port = 10003
dashboard_user = your_dashboard_user
dashboard_pwd = your_dashboard_password
authentication_method = token
token = 你自己定义
root@VM-24-7-ubuntu:~/nfs/frp# cat start.sh
# 复制如下配置,挂载容器的frps.ini目录请自行修改
#!/bin/bash
docker run -d \
    --restart always \
    --network host \
    --name frps \
    -v /root/nfs/frp/frps.ini:/etc/frp/frps.ini \
    snowdreamtech/frps
#frp client side
root@DiskStation:/opt/frpc/frp# cat frpc.ini 
# 复制如下配置
[common]
server_addr = 123.xx.xx.29[你的云服务器IP地址]
server_port = 10000
authentication_method = token
token = 你自己定义

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

[nginx]
type = tcp
local_ip = 127.0.0.1
local_port = 1313
remote_port = 6001

[synlogy5000]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 1315
root@DiskStation:/opt/frpc/frp# cat start.sh
# 复制如下配置,挂载容器的frps.ini目录请自行修改
#!/bin/bash
docker run -d \
    --restart always \
    --network host \
    --name frpc \
    -v /opt/frpc/frp/frpc.ini:/etc/frp/frpc.ini \
    snowdreamtech/frpc

总结

frp真是太方便简单了,我尝试ngrok都要废了也搞不定.

路由的访问顺序是(加入nginx解析):
http复杂一些:  external.weburl -> nginx:443 -> localhost:6001 -> frpserver:10000(random.43156) -> frpclient(random.53198) -> frpclient.1313 -> docker.hugo.1313
ssh就简单许多:  tencent_server:6000 -> frpserver:10000 -> frpclient -> frpclient.22
http.直给(无nginx path路由): tencent_server:1315 -> frpserver:10000 -> frpclient -> frpclient.5000 群晖管理界面

另外按path路由服务的话用如下的nginx配置就可以了,另外腾讯轻量云的https证书生成非常好用,云平台点点就可以了.

#腾讯云服务器
root@VM-24-7-ubuntu:/etc/nginx/conf.d# cat mahonealex.com.conf 
server {
  listen 1316 ssl; #由于备案没下来,所以先用1316, 等下来改成443就可以了
  server_name mahonealex.com *.mahonealex.com; # 监听域名

    server_tokens off;
    keepalive_timeout 5;
    server_name jimmyzhang.top; #填写您的证书绑定的域名,例如:www.cloud.tencent.com
    ssl_certificate /etc/nginx/crt_key/1_mahonealex.com_bundle.crt; #填写您的证书文件名称,例如:1_cloud.tencent.com_bundle.crt
    ssl_certificate_key /etc/nginx/crt_key/2_mahonealex.com.key; #填写您的私钥文件名称,例如:2_cloud.tencent.com.key
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 可参考此 SSL 协议进行配置
  
  underscores_in_headers on; # 允许传递带_ 的参数 默认 off。 比如你研发 header 中带 access_token 。不开启将无法传递
  
  location / {
    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://127.0.0.1:6001;  # 这里的端口号是开启容器时 ngrok 监听的端口号
  }
}