关键字:

frp、frps为服务端,frpc为客户端、云服务器 ECS、 PasswordAuthentication、auth.token、 KCP 协议QUIC 协议、nssm install、OpenSSH.Server、远程桌面、

Tips:

  • frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
  • Frp 可以用来干什么,可以用在什么地方?
  • • 家用领域:文件共享,远程监控,远程私有云等
  • • 游戏领域:我的世界联机/服务器,泰拉瑞亚联机/服务器等可以对局域网开放的联机游戏
  • • 建站领域:个人主页搭建,博客搭建,反向代理等
  • • 专业领域:RDP/SSH远程连接,Docker外网访问等

内网穿透的 reverse proxy反向代理:Frp(Fast Reverse Proxy)_Server

1、申请阿里(云服务器管理控制台 (aliyun.com)云服务器 ECS免费总额度300元,试用有效期3个月, 每月免费公网流量20GB

  • 华北6(乌兰察布)的最便宜
  • 云服务器 ECS/应用管理一栏有:Dify社区版;RagFlow社区版;Zabbix 社区版;ComfyUI DeepGPU加速社区版
  • 云服务器 ECS/实例一栏有 公网/私网:IP 地址,以及更多更全的操作功能,如重置实例密码、重启实例
  • 云服务器 ECS/安全组一栏有 访问规则的管理,安全组出方向默认允许所有访问,即从安全组内ECS访问外部都是放行的。入方向需要按需添加访问规则。

1.1、远程连接ECS实例过程中可能存在的问题及相应解决方案。

  • 默认是通过Workbench在浏览器远程连接
  • 也可以下载阿里云客户端,连接实例;管理云帐号、查看与连接服务器、免密码连接、全局搜索实例及远程连接。
  • 远程登录Linux实例时,默认用户名是rootecs-user修改一台实例的登录密码:找到目标实例,在操作列中,选择 > 实例属性 > 重置实例密码(在线重置密码:无需重启实例,修改的登录密码预计在一分钟之内生效重置密码的方式在线重置密码时,支持配置SSH密码登录策略,开启:系统会为您自动将 /etc/ssh/sshd_config 中的 PasswordAuthentication 参数值设置为 yes ,允许通过SSH方式连接实例并使用密码登录。
  • 为了防止PuTTY超时退出,建议您将Connection > Seconds between keepalives ( 0 to turn off )由默认值0修改为60,表示服务器每1分钟向客户端发送一个消息,用于保持连接。

1.2、在云服务器 ECS实例安装frps服务端

  • Frp服务端一键配置脚本,脚本默認获取Frp最新版本:mvscode/frps-onekey
wget https://raw.githubusercontent.com/mvscode/frps-onekey/master/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
Usage: /etc/init.d/frps {start|stop|restart|status|config|version}
\usr\local\frps\frps.toml
bindAddr = "0.0.0.0"             #服务端监听端口
bindPort = 5443                  ---->对应frpc.toml的serverPort
vhostHTTPPort = 80               #服务端HTTP(s)监听端口(可选)
vhostHTTPSPort = 443
webServer.addr = "0.0.0.0"
webServer.port = 6443            #Web页面端口号
webServer.user = "admin"         #(可选)Web页面账号
webServer.password = "xxxxxx"    #(可选)Web页面密码
auth.method = "token"            #服务端连接身份认证,默认token---->对应frpc.toml的auth.method
auth.token = "xxxxxxxx"          #服务端token密码---->对应与frpc.toml的auth.token需一致
  • 端口“5443、6443、80、443”,在阿里云安全组中必须放行,还有frpc.toml的[[proxies]]remotePort = 6666端口在阿里云安全组中也必须放行,即在入方向需要按需添加访问规则。
  • 远程登录Linux实例中,ip a看到的IP是云服务器的私网IP,上面放行的是公网IP的端口,必须登录云服务器执行以下命令开放 对应 端口,否则 .\frpc.exe -c .\frpc.toml不通
iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
 iptables -A INPUT -p tcp --dport 5443 -j ACCEPT
 iptables -A INPUT -p tcp --dport 6666 -j ACCEPT
 iptables-save  //保存 iptables 规则(如果系统重启后需要规则仍然生效)

1.3、配置为服务/etc/systemd/system/  新建文件 frps.service 

# more  /etc/systemd/system/frps.service
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#Restart=always
Restart=on-failure
RestartSec=5s
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/usr/local/bin/frps -c /home/frp_0.60.0_linux_amd64/frps.toml
[Install]
WantedBy=multi-user.target
---
# systemctl start frps

2、内网主机,在Linux中部署frpc并配置

2.1、下载并修改frpc.toml配置,frpc客户端使用auth.token认证身份去连接frps服务端实现反代功能(不需要知道反向代理服务器root的密码)

wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
mv frp_0.60.0_linux_amd64/frpc /usr/local/bin/
--->frpc.toml
serverAddr = "8.130.1xx.xx"       #服务器地址
serverPort = 5443                 #服务器端口
auth.method = "token"             #服务端连接身份认证,默认token
auth.token = "xxxx"               #服务端token密码,密码不正确将无法连接服务器

[[proxies]]
name = "LLM-tcp"                  #隧道名称,可自定义,不能重复
type = "tcp"                      #隧道类型,可用tcp, udp, http, https, tcpmux, stcp, sudp, xtcp
localIP = "127.0.0.1"             #本地IP地址,如果是本机就127.0.0.1
localPort = 22                    #本地端口,本地服务端口,比如sshd服务器端口22
remotePort = 6666                 #远程端口,连接隧道时用的端口

2.2、配置为服务frpc

vim  /etc/systemd/system/frpc.service
[Unit]
Description=FRP Client Service
After=network.target
 
[Service]
ExecStart=/home/frp/frpc -c /home/frp/frpc.toml
Restart=always
User=nobody
Group=nogroup
 
[Install]
WantedBy=multi-user.target

3、使用注意事项

  •  ssh -p 6666 root@8.130.xxx.xx 穿透到内网,这里输入的root密码是内网主机的密码,不是反向代理服务器的root密码。
  • 由于反向代理服务器配置了webServer,通过浏览器http://公网:6443/可以查看详情,用户密码使用webServer的配置。

内网穿透的 reverse proxy反向代理:Frp(Fast Reverse Proxy)_云服务_02

4、通信优化,使用OK!

  • 当 frpc 和 frps 之间启用了 TLS 之后,流量会被全局加密,不再需要配置单个代理上的加密,新版本中已经默认启用。
  • 底层通信协议支持选择 QUIC 协议,底层采用 UDP 传输,解决了 TCP 上的一些问题,传输效率更高,连接延迟低。 frpc.toml的 serverPort 指定为 frps 的 quicBindPort
# frps.toml
bindPort = 7000
# QUIC 绑定的是 UDP 端口,可以和 bindPort 一样
quicBindPort = 443
# frpc.toml
serverAddr = "x.x.x.x"
# serverPort 指定为 frps 的 quicBindPort
serverPort = 443
transport.protocol = "quic"
  • 在阿里云安全组中也必须放行udp --dport  443
  • 云服务器执行以下命令开放 对应 端口
iptables -A INPUT -p udp --dport  443 -j ACCEPT             //quicBindPort = 443

5、win10作为SSH服务器,然后配置为frpc客户端。 管理员身份打开 PowerShell

安装 OpenSSH 服务器:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装 OpenSSH 客户端:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  • 通过服务管理工具:按下 “Win + R”,输入 “services.msc” 并回车,在服务列表中找到 “OpenSSH SSH Server”,右键点击并选择 “启动”。
  • 配置win10作为frpc客户端:使用nssm install frpc命令,按下图填写后按 Install service将frpc安装为服务,任务管理器→服务 中找到 frpc 服务后右键开始。(注意:云服务器 ECS/安全组入方向需要按需添加访问规则,以及配置iptables规则

内网穿透的 reverse proxy反向代理:Frp(Fast Reverse Proxy)_IP_03

  • 从实验室linux主机测试,需使用WIN10主机的用户名admin,需要为admin配置密码(空密码不行)。
ssh -p 5555 admin@8.130.xxx.xx     使用WIN10-DELL的用户名admin,需要为admin配置密码

6、按照《FRP搭建内网穿透服务指南》穿透Windows远程控制,从家里Win10主机通过“远程桌面连接”访问单位内网win10电脑远程桌面OK。

  • 在单位内网win10电脑,按 “Win + R” 键,输入 “sysdm.cpl” 并按下回车键打开系统属性。单击 “远程” 选项卡,在远程桌面中勾选 “允许远程连接到此计算机” 就可以开启远程桌面。

7、按照《FRP搭建内网穿透服务指南》使用frp服务器做中转搭建临时的文件服务器。

serverAddr = "*.*.*.*"
serverPort = ---
auth.method = "token"
auth.token = "---"

[[proxies]]
name = "Win10的远程桌面"

[[proxies]]
name = "win10的ssh"

[[proxies]]
name = "临时的文件服务器"
type = "tcp"
remotePort = ----
transport.useEncryption = true
transport.useCompression = true
transport.bandwidthLimit = "10MB"

[proxies.plugin]
type = "static_file"
localPath = "D:/共享文件夹"
httpUser = "---"
httpPassword = "---"
  • localPath是本地电脑的文件夹的路径,需要注意,Windows的路径写法类似: D:\共享文件夹,但是这里格式是D:/共享文件夹,注意反斜杠改为斜杠

8、!配置frpc.toml  [[proxies]],type = "tcp",localIP为提供web服务本机的IP,localPort 为web服务的端口,通过反代可以访问内网的web应用。

  • 这里没有使用type = "http",因为type 使用"http"需要确保自定义域名(customDomains = ["frpsd.xxx.xxx"])已经正确解析到了阿里云服务器上,否则将无法访问。
  • type 使用"http"可以配置httpUser和httpPassword,frp支持通过简单的HTTP Basic Auth来验证用户,这样访问web服务后,会弹出一个登录框,要求我们输入账号密码才能进入。type = "tcp"没有验证用户的功能参数