“CentOS服务搭建-04-运用FRPS服务搭建黑群晖NAS的FRPC”的版本间的差异

来自DeerGrove Wiki
跳转至: 导航搜索
《frps.ini》文档
《frpc.ini》文档
第118行: 第118行:
 
<pre>
 
<pre>
 
[common]
 
[common]
server_addr = xxx.xxx.xxx.xxx # 服务器地址
+
server_addr = xxx.xxx.xxx.xxx
server_port = xxxx # 服务器端口
+
# 服务器地址
privilege_token = xxxxxx # token = xxxxxx 有些服务端版本采用这个字节,多数采用“privilege_token”字节,token理解为密码
+
server_port = xxxx
 +
# 服务器端口
 +
privilege_token = xxxxxx
 +
# token = xxxxxx 有些服务端版本采用这个字节,多数采用“privilege_token”字节,token理解为密码
 
protocol = tcp
 
protocol = tcp
  
 
[http]
 
[http]
type = http # http协议orhttps协议,如果两个都要的话就单独复制一段[https]
+
type = http
local_ip = 192.168.x.xx # 群晖的内网IP
+
# http协议orhttps协议,如果两个都要的话就单独复制一段[https]
local_port = xxxxx # 你自己的web服务器端口
+
local_ip = 192.168.x.xx
custom_domains = xxxxxxx.xxx # 如果你有自己的域名,可以设置你自己的域名,先将自己的顶级域名解析到xxxxxxx.xxx(用CNAME记录,不要用A记录)
+
# 群晖的内网IP
# subdomain = nas # 选择一个可用的子域名,你的访问地址将会是http://nas.xxxxxx.xxx,服务器端必须已绑定顶级域名,否则不要设置
+
local_port = xxxxx
 +
# 你自己的web服务器端口
 +
custom_domains = xxxxxxx.xxx
 +
# 如果你有自己的域名,可以设置你自己的域名,先将自己的顶级域名解析到frp服务器域名(如二级域名的话用CNAME记录,不要用A记录)
 +
#subdomain = nas  
 +
# 全局下唯一的子域名,你的访问地址将会是http://subdomain.xxx.xxx,服务器端必须已绑定顶级域名,否则不要设置;
 +
# 此外,顶级域名需要在域名系统上做好CNAME的泛解析,否则不可用。HOST:*.xxx.xxx;Value:xxx.xxx。
  
 
[ssh]
 
[ssh]
 
type = tcp
 
type = tcp
 
local_ip = 192.168.x.xxx
 
local_ip = 192.168.x.xxx
local_port = xxxxxx # 需要转发到的端口,ssh端口默认是22
+
local_port = xxxxxx
remote_port = xxxxxx # frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口
+
# 需要转发到的端口,ssh端口默认是22
 +
remote_port = xxxxxx
 +
# frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口
  
 
#[DSM]
 
#[DSM]
 
# type = tcp # tcp协议
 
# type = tcp # tcp协议
# local_ip = 192.168.x.xxx # 127.0.0.1指穿透本机,也可以填写群晖内网IP.
+
# local_ip = 192.168.x.xxx
# local_port = xxxxxx # 群晖内网HTTP端口,默认为5000.
+
# 127.0.0.1指穿透本机,也可以填写群晖内网IP.
# remote_port = xxxx # 映射到外网端口,暴露给服务器,这个客户端必须唯一
+
# local_port = xxxxxx
# subdomain = nas # 选择一个可用的子域名,你的访问地址将会是http://nas.xxxxxx.xxx,服务器端必须已绑定顶级域名,否则不要设置
+
# 群晖内网HTTP端口,默认为5000.
 +
# remote_port = xxxx
 +
# 映射到外网端口,暴露给服务器,这个客户端必须唯一
 +
# subdomain = nas
 +
# 选择一个可用的子域名,你的访问地址将会是http://nas.xxxxxx.xxx,服务器端必须已绑定顶级域名,否则不要设置
 
</pre>
 
</pre>
  

2021年12月1日 (三) 11:24的版本


  • FRP (Fast Reservation Protocol高性能反向代理应用):可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
  • 作用
    • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
    • 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
    • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
    • 可查看通过代理的所有 http 请求和响应的详细信息。(待开发)

CentOS 7安装frps端

  • 本次安装服务应用于群晖系统,客户端为frpc0.26.0,因此,frps端使用同版本
  1. su获取root
  2. wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_amd64.tar.gz
  3. 解压:tar xf frp_0.26.0_linux_amd64.tar.gz
  4. 改名:mv frp_0.26.0_linux_amd64 frp
  5. 进入目录:cd frp
  6. 删除没用的客户端文件:rm -f frpc*
  7. 配置文件:vim frps.ini
  8. 编辑ini文件 按ins进入编辑(精简)

《frps.ini》文档

[common]
bind_addr = xxx.xxx.xxx.xxx # frps内网服务器地址,如果有防火墙的话,设置下述端口映射
bind_port = xxxxx # frps服务端口
bind_udp_port = xxxx # udp服务端口
vhost_http_port = xxxxx # http服务端口
vhost_https_port = xxxxx # https服务端口
privilege_token = xxxxxxxx # 握手密钥
subdomain_host = xxxx.xxx # 填写顶级域名,意味着对应frpc的2级域名代理启用
dashboard_port = xxxx # 服务器面板端口
dashboard_user = xxxxx # 服务器面板用户
dashboard_pwd = xxxxxxx # 服务器面板密码
log_file = ./frpslog.log
log_level = info
log_max_days = 3

frps的调试

  1. 临时运行:
     ./frps -c ./frps.ini
  2. 一次性开机运行:nohup ./frps -c ./frps.ini &
    命令启动之后如果不重启VPS就会一直运行,以下操作可以省略。只需要在服务器重启之后,重新cd到程序目录,输入一次nohup ./frps -c ./frps.ini &命令即可
  3. 停止:先找到这个进程,使用ps -ef 查看进程ID
    ps -aux | grep frp
  4. 然后:kill -9 PID

frps.service自启动文档

  1. 新建frps目录:mkdir /etc/frps
  2. mkdir /usr/etc/frps
  3. 拷贝frps.ini 到/etc/frps:cp /源目录/frps.ini /etc/frps/
  4. 拷贝frps到/usr/etc/frps:cp /源目录/usr/etc/frps
  5. frps.service文档保存于:/etc/systemd/system/
  6. 使用systemd配置开机自启(适用于 centos7 Ubuntu 16 或 debian 8)
     sudo vim /etc/systemd/system/frps.service 新建此文件,并写入以下内容

《frps.service》文档

  1. 注意点:/usr/etc/frps 为服务端frps的执行文件目录(可自定义)
  2. 注意点:/etc/frps/frps.ini 为服务端frps.in配置文档目录(可自定义)
[Unit]
Description=frps daemon
 
[Service]
Type=simple
ExecStart=/usr/etc/frps/frps -c /etc/frps/frps.ini
# /usr/etc/frps 文件目录,注意service文件中要指向frps运行程序(这个没查到网上解释,以为只要放个空文档,其实要放入执行文件,搞了半天才运行成功!!!)
# /etc/frps/frps.ini 配置目录
[Install]
WantedBy=multi-user.target

frps.service自启动

  1. vim编辑退出:Esc,# :wq(保存退出)
  2. 启动并设为开机自启。
sudo systemctl start frps
# (把start改为stop即终止frps)
sudo systemctl enable frps
systemctl status frps
# 查看frps状态
  • Centos6.5及以下版本frps自启动
  1. vi /etc/rc.local
  2. 在最下面加一行/usr/sbin/frp/frps -c /usr/sbin/frp/frps.ini
  3. 其中 /usr/sbin/frp是程序放置的目录,自己修改,重启ok

frps.service自启动进程查看

  1. 查看frp是否启动:ps aux | grep frps
  2. 查看frp启动状态
    sudo systemctl status frps

frps服务下的防火墙端口开启

  • 开启端口
firewall-cmd --permanent --add-port=xxxx/tcp # 开放bind_port(frps服务)# 必须
firewall-cmd --permanent --add-port=xxxx/tcp # 开放dashboard_port(服务面板http)# 必须
firewall-cmd --permanent --add-port=xxxx/tcp # 开放vhost_http_port(http端口)# 按需
firewall-cmd --permanent --add-port=xxxx/tcp # 开放vhost_http_port(https端口)# 按需
firewall-cmd --permanent --add-port=xxxx/tcp # 开放bind_udp_port端口(udp直连)# 按需
firewall-cmd --permanent --add-port=xxxx/tcp # 开放kcp_bind_port端口(kcp端口)# 按需
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
firewall-cmd --list-all # 查看防火墙规则
  • ssh端口开启(按需):公网服务器防火墙允许对应端口的流量通过,所以需要配置防火墙:
firewall-cmd --zone=public --add-port=10067/tcp --permanent
firewall-cmd --reload
  • 内网机器上面执行 tail -f nohup.out 查看启动命令的执行结果akerlu

NAS端安装FRPC

  1. 下载安装docker
  2. docker注册表,选用frpc 0.26.0版本(可自行选择容易下载的版本,但服务端frps必须对应同版本或者同大版本号的,如:0.34.1的话,可以用0.34.2)
  3. docker注册表下载后,在映像中可以看到。选择映像中的frpc进行启动编辑,启动编辑省略,可以参考github中的导航说明。
  4. 配置frpc.ini,本次基于frpc 0.26.0版本

《frpc.ini》文档

[common]
server_addr = xxx.xxx.xxx.xxx
# 服务器地址
server_port = xxxx
# 服务器端口
privilege_token = xxxxxx
# token = xxxxxx 有些服务端版本采用这个字节,多数采用“privilege_token”字节,token理解为密码
protocol = tcp

[http]
type = http
# http协议orhttps协议,如果两个都要的话就单独复制一段[https]
local_ip = 192.168.x.xx
# 群晖的内网IP
local_port = xxxxx
# 你自己的web服务器端口
custom_domains = xxxxxxx.xxx
# 如果你有自己的域名,可以设置你自己的域名,先将自己的顶级域名解析到frp服务器域名(如二级域名的话用CNAME记录,不要用A记录)
#subdomain = nas 
# 全局下唯一的子域名,你的访问地址将会是http://subdomain.xxx.xxx,服务器端必须已绑定顶级域名,否则不要设置;
# 此外,顶级域名需要在域名系统上做好CNAME的泛解析,否则不可用。HOST:*.xxx.xxx;Value:xxx.xxx。

[ssh]
type = tcp
local_ip = 192.168.x.xxx
local_port = xxxxxx
# 需要转发到的端口,ssh端口默认是22
remote_port = xxxxxx
# frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口

#[DSM]
# type = tcp # tcp协议
# local_ip = 192.168.x.xxx
# 127.0.0.1指穿透本机,也可以填写群晖内网IP.
# local_port = xxxxxx
# 群晖内网HTTP端口,默认为5000.
# remote_port = xxxx
# 映射到外网端口,暴露给服务器,这个客户端必须唯一
# subdomain = nas
# 选择一个可用的子域名,你的访问地址将会是http://nas.xxxxxx.xxx,服务器端必须已绑定顶级域名,否则不要设置

搭建手记

大鹿搭建frp反向代理服务的背景:

  • 一台私有nas需要安装在农村老家的东方有线光纤宽带下,而经过确认和尝试,获取的DDNS是111.214的,也就是东方有线的私网,无法穿透。
  • 和东方有线在自家院子里冒着12月的寒风电话沟通三巡,无法提供公网IP,哪怕是动态的,似乎他们的客服完全不懂,此处万马奔腾……
  • 晚上在网上查询了多种方法,其中花生壳的付费和硬件模式(花生棒、花生盒子)想过尝试,但是最终还是不能接受这种太过受制于人的方式。
  • 最终发现了frp这个从不知道的事物。初步构想是在晚上躺在农村的床上想到的:企业固定IP + 自建的CentOS,或者上海市区的电信公网IP(市区里装的早,刚发现提供了公网IP,良心!)两套方案,最终决定第一种。
  • 周末后周一到公司,利用非工作的午休和晚间时间,启动了安装和搭建调试:
  1. NAS搭建docker以及docker容器的frpc;
  2. CentOS本来是当热备机和bbs服务器的,负载几乎是0.x%级别的,所以通过内网ssh搭建了frps;
  3. CentOS开放firewall;
  4. AF开放frps端口;
  5. 当晚宿舍调试握手,成功!
  6. 第二日,记录了本次搭建和调试的笔记,或许哪一天我的孩子或者朋友需要参考。
  • frps服务面板