使用frp进行内网穿透

frp内网穿透反向代理好软推荐 by 老李菜刀 at 2020-12-05

frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。
下载地址:https://github.com/fatedier/frp/releases/

服务端设置:

下载对应版本的安装包(frps是服务器端,frpc是客户端,还有注意对应的CPU架构)

tar -xzvf frp_0.44.0_linux_amd64.tar.gz -C /usr/local/frps

编辑服务端frps.ini配置文件

nano /usr/local/frps/frps.ini
[common]
# 用于客户端和服务端连接的端口
bind_port = 7000 
# 用于客户端和服务端连接的口令
token = e8fxAAGBIS7KbhT0Z6iaeTEjTq6kxasb
# 服务端仪表板的端口
dashboard_port = 7500
# 打开仪表板页面登录的用户名和密码
dashboard_user = root
dashboard_pwd = admin

e.g

[common]
bind_addr = 0.0.0.0
bind_port = 6276
bind_udp_port = 6277
token = 30326276
max_pool_count = 10

dashboard_user = caidao
dashboard_pwd = ********
dashboard_port = 3030

vhost_ssh_port = 8022
vhost_http_port = 3080
vhost_tcp_port = 3081
vhost_tcp_port = 3082

vhost_tcp_port = 8822
vhost_tcp_port = 8006

vhost_tcp_port = 5230

#FRP服务器日志相关参数
log_file = /usr/local/frps/frps.log
log_level = info
log_max_days = 7
heartbeat_timeout = 30

配置systemctl来控制frps

nano /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frps service
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frps/frps -c /usr/local/frps/frps.ini

[Install]
WantedBy = multi-user.target

启动frps

# 启动frps
systemctl start frps
# 开机自动启动frps
systemctl enable frps
# 重启frps
systemctl restart frps
# 停止frps
systemctl stop frps
# 查看frps状态
systemctl status frps

设置开机自动启动

systemctl enable frpc

参考systemctl添加开机启动

客户端配置

COPY对应的frpc到相应的位置并配置frpc.ini

nano /usr/local/frpc/frpc.ini
[common]
server_addr = 服务器公网ip地址
server_port = 7000
token = e8fxAAGBIS7KbhT0Z6iaeTEjTq6kxasb

[web]
type = http
local_port = 8080
custom_domains = 域名

[rdp]
# 远程桌面
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001

[smb]
# 远程文件访问
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002

e.g

[common]
server_addr = 172.96.238.75
server_port = 6276
token = ********

[web]
type = http
local_ip = 10.129.245.168
local_port = 80
remote_port = 8080
custom_domains = photo.caidao.net

[ssh]
type = tcp
local_port = 22
remote_port = 8022

heartbeat_timeout = 30

同样的方法配置好客户端的启动控制

出现的一砦问题解决:

配置frps/c开机自启动失败

root@RVHost:~# systemctl status frpc
● frpc.service - frpc service
     Loaded: loaded (/etc/systemd/system/frpc.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2023-03-07 17:37:02 CST; 22s ago
    Process: 388 ExecStart=/usr/local/frpc/frpc -c /usr/local/frpc/frpc.ini (code=exited, status>
   Main PID: 388 (code=exited, status=1/FAILURE)
        CPU: 54ms

Mar 07 17:36:59 RVHost systemd[1]: Started frpc service.
Mar 07 17:37:02 RVHost frpc[388]: 2023/03/07 17:37:02 [W] [service.go:133] login to server faile>
Mar 07 17:37:02 RVHost frpc[388]: dial tcp 172.96.238.75:6276: connect: no route to host
Mar 07 17:37:02 RVHost systemd[1]: frpc.service: Main process exited, code=exited, status=1/FAIL>
Mar 07 17:37:02 RVHost systemd[1]: frpc.service: Failed with result 'exit-code'.

配置完frpc后不能开机自启动,出现如上错误的,可以在frpc的启动配置文件frpc.service里加上下面三条:

User=root #很多时候只要加下面两条就行了
Restart=on-failure #启动失败之后重启
RestartSec=5s #重启间隔为5s