frp内网穿透

前一段时间买了一个刷了armbian系统的电视盒子,但是一直没办法在外访问搭建好的项目,于是使用frp搭建了内网穿透服务器。

要求:需要有一台有外网ip的服务器

下载frp

我的是linux系统,使用uname -a命令查看系统架构。
aarch64或arm64:https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_arm64.tar.gz
amd64:https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
其他版本下载地址:https://github.com/fatedier/frp/releases

服务器端配置

上传下载的压缩包

解压

1.解压安装包
tar -zxf frp_0.45.0_linux_amd64.tar.gz
2. 进入解压后的文件夹
cd frp_0.45.0_linux_amd64

配置

将frps.ini修改为以下内容

1
vi frps.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的,客户端连接使用
token = 1234

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# 通过该端口访问客户端
vhost_http_port = 9200

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

启动

1.后台启动

1
./frps -c frps.ini &

2.防火墙放开7000,vhost_http_port的端口
例如,查看9200端口是否已放行,其他端口同理
firewall-cmd --query-port=9200/tcp --zone=public
显示no说明未放行
放行:firewall-cmd --zone=public --add-port=9200/tcp --permanent
显示success即为成功
3.如果是云服务器厂商也有端口限制,则需要登录云服务器厂商控制台,放行端口

测试

ip:7500可访问可视化界面,如能成功访问即可

客户端(本地机器)配置

解压

同服务端一致

配置

客户端是frpc.ini,注意服务端是frps.ini,要区分开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 客户端配置
[common]
server_addr = 服务器公网ip
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = 1234

# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

# 配置http服务,如果没有可以不写下面的
[web]
type = http
# 本地项目服务
local_port = 8801
# 服务器公网ip或自定义域名
custom_domains = www.xxx.xx
# 服务器vhost_http_port端口,随后访问custom_domains:9200即可转发至本机器local_port服务
remote_port = 9200

启动

1
./frpc -c frpc.ini &

测试

访问custom_domains:9200测试是否正常

将frp安装为服务(可选操作)

服务端

创建frps.service文件

vim /etc/systemd/system/frps.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为刚才frp放置的地址
ExecStart = 安装路径/frps -c 安装路径/frps.ini

[Install]
WantedBy = multi-user.target

启动frps服务

1
2
3
4
# 启动frp
systemctl start frps
# 配置frps开机自启
systemctl enable frps

客户端

创建frpc.service文件

sudo vim /etc/systemd/system/frpc.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frpc的命令,需修改为刚才frp放置的地址
ExecStart = 安装路径/frpc -c 安装路径frpc.ini

[Install]
WantedBy = multi-user.target

启动frpc服务

1
2
3
4
# 启动frpc
systemctl start frpc
# 配置frpc开机自启
systemctl enable frpc

其他命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 停止frps
systemctl stop frps
# 重启frps
systemctl restart frps
# 查看frps状态
systemctl status frps

# 停止frpc
systemctl stop frpc
# 重启frpc
systemctl restart frpc
# 查看frpc状态
systemctl status frpc

安装时遇到的一些问题

使用自定义域名

  1. 在域名服务商配置A解析规则,记录值填写服务器ip
  2. 修改客户端配置文件frpc.ini,custom_domains=域名

-bash: ./frpc: cannot execute binary file: Exec format error

安装包下载错误,先查询系统架构,然后下载对应的安装包,具体请查看第一章节

do http proxy request [host:www.xxx.xxx] error: no root found: www.xxx.xxx

客户端配置域名访问和访问的域名不匹配,请访问custom_domains域名或修改custom_domains域名

The page you requested was not found

同do http proxy request [host:www.xxx.xxx] error: no root found: www.xxx.xxx