说明

使用编译后的软件部署frp。支持主流操作系统。

frp分为server和client。server提供统一服务,client连接server请求网络端口转发。

缺点:frp client的端口及端口名字必须全局唯一。frp server无法查询frp client配置的端口信息,需人工配置后统一记录管理。

场景介绍

无EIP的服务器希望将指定端口暴露在互联网,可借助frp工具,通过一台带EIP的服务器作为出口,实现端口转发暴露在互联网。

演示环境说明

操作系统Ubuntu24 LTS

frp server部署在带有EIP的系统。frp client部署在无EIP的系统。

参考资料

https://gofrp.org/zh-cn/docs/features/common/ssh/
https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
https://github.com/fatedier/frp
https://gofrp.org/zh-cn/docs/reference/proxy/
https://gofrp.org/zh-cn/docs/reference/server-configures/

网络检查

frp server应当允许frp client及被许可的访问者通过互联网访问。许可ipv4和ipv6及全部端口。常见安全组,防火墙,系统内防火墙拦截。特殊情况,宝塔及类似管理软件,或额外加一层安全拦截,也需要配置网络白名单。

查询frp client的出口IP,添加到frp server的安全配置白名单。

 curl ipinfo.io
 curl myip.ipip.net
 curl ifconfig.me

下载frp

浏览器访问https://github.com/fatedier/frp/releases下载软件包。选择最新版本,选择正确CPU架构的软件包。

将文件上传至frp server和frp client。均执行以下命令,此处以当前最新版为例,

解压文件

cd /opt
tar -zxf frp_0.65.0_linux_amd64.tar.gz
mv frp_0.65.0_linux_amd64 frp

在client操作,

cd frp
rm -rf frps*

在server操作

cd frp
rm -rf frpc*

配置任意端口的转发

可配置任意端口的转发。若异常,大多是配置文件错误或者网络阻塞。

注意,不同系统发行版,配置文件路径及语法可能有差异。

frp server

修改文件frps.toml配置如下,需删掉注释,

完整配置参考https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml

# frp组件之间建立联系的专用端口,可改为任意其他端口。
bindPort = 7000
# 控制台
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"

# 配置认证令牌
auth.method = "token"
# 令牌。生成令牌使用命令openssl rand -hex 32
auth.token = "265eaf96cc381f189e8872a64a97e52196051a57cf4e8a4311036616b4f7d4de"

临时启动软件,验证服务有正常启动。

./frps -c ./frps.toml

配置服务持久化,编辑文件/etc/systemd/system/frps.service,配置如下,需删掉注释

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为frp文件的绝对路径
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml

[Install]
WantedBy = multi-user.target

重启,使配置生效,

systemctl daemon-reload
systemctl enable frps
systemctl start frps
# 注意,需重启系统验证有效性,若已有业务运行,可以以后验证,
reboot

重启系统后,查看frp是否正常启动

systemctl status frps

若未自动启动,修改文件/etc/systemd/system/frps.service,改为以下配置,需删掉注释

[Unit]
Description = frp server
# 确保网络真正可用后再启动
After = network-online.target syslog.target
# 强化网络就绪的依赖关系
Wants = network-online.target

[Service]
Type = simple
# 启动frp的命令,需修改为frp绝对路径
ExecStart = /opt//frps -c /opt/frp/frps.toml
# 启动失败时自动重启(如网络临时未就绪)
Restart = on-failure
# 重启间隔3秒,避免频繁重试
RestartSec = 3
# 设置启动超时时间,防止卡死
TimeoutStartSec = 30

[Install]
WantedBy = multi-user.target

修改后,重启,使配置生效

systemctl daemon-reload
systemctl enable frps
systemctl start frps
reboot

重启系统后,查看frp是否正常启动

systemctl status frps

frp client

编辑配置文件frpc.toml,删掉注释后使用,

完整配置参考https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml

# frp server 的EIP
serverAddr = "EIP"
# frp server提供服务的专用端口
serverPort = 7000
# 配置认证令牌
auth.method = "token"
# 令牌。与frp server配置的必须一致。
auth.token = "265eaf96cc381f189e8872a64a97e52196051a57cf4e8a4311036616b4f7d4de"

# 复制此段,可配置转发不同端口
[[proxies]]
# 必须在frp server全局唯一。
name = "app1-tcp-30000"
# UDP端口写udp
type = "tcp"
# frp client的系统IP,也可填写127.0.0.1
localIP = "172.16.0.14"
# 需被访问的内部端口。
localPort = 30000
# frp server端转发后的端口,必须在frp server全局唯一。
remotePort = 91

临时启动软件,验证可连接server,需看到success字样的日志,

./frpc -c frpc.toml

配置服务持久化。

修改文件/etc/systemd/system/frpc.service,配置如下,需删掉注释,

[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为frp的绝对路径
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml

[Install]
WantedBy = multi-user.target

重启,使配置生效

systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
reboot

重启系统后,查看frp是否正常启动

systemctl status frpc

若未自动启动,则修改配置文件/etc/systemd/system/frpc.service,改为以下配置,需删掉注释

[Unit]
Description = frp client
# 确保网络真正可用后再启动
After = network-online.target syslog.target
# 强化网络就绪的依赖关系
Wants = network-online.target

[Service]
Type = simple
# 启动frp的命令,需修改为frp绝对路径
ExecStart = /opt//frpc -c /opt/frp/frpc.toml
# 启动失败时自动重启(如网络临时未就绪)
Restart = on-failure
# 重启间隔3秒,避免频繁重试
RestartSec = 3
# 设置启动超时时间,防止卡死
TimeoutStartSec = 30

[Install]
WantedBy = multi-user.target

修改后,重启,使配置生效

systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
reboot

重启系统后,查看frp是否正常启动

systemctl status frpc

访问测试

在互联网访问frp server的IP:转发后的端口,注意,访问者应当在frp server的网络访问白名单。

常用参考

若忘记记录frp client的端口配置,可在frp server查询占用的端口,

ss -tulnp | grep frp
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐