Frp搭建

  1. 1. 1.前言
  2. 2. 2.准备
  3. 3. 3.教程
    1. 3.1. 3.1 服务端搭建
      1. 3.1.1. *Linux 作为服务端
      2. 3.1.2. *Windows 作为服务端
    2. 3.2. 3.2 客户端搭建
      1. 3.2.1. *Linux 作为客户端
      2. 3.2.2. *Windows 作为客户端
  4. 4. 4.设置自启动
    1. 4.1. 4.1 Linux
    2. 4.2. 4.1.1 Ubuntu
    3. 4.3. 4.1.2 Centos
    4. 4.4. 4.2 Windows客户端
  5. 5. 5.配置文件
  6. 6. 6.常见错误
  7. 7. 7.后记

1.前言

因为一些原因,我开始接触Frp

然而我发现,网上相关的教程不是很全,于是这篇文章就诞生了!

本篇文章主要是帮助我以后使用而记录的

其实事实是想水篇文章

2.准备

  • 一台有公网的服务器/电脑
  • 一台没有公网的服务器/电脑
  • 下载 Frp

3.教程

服务器端和内网机器端下载的版本要相同,否则可能会影响内网穿透;根据服务器系统选择合适的版本

Tips:frps前缀的是服务端所需的文件,frpc前缀的是客户端所需的文件;服务端可只保留服务端文件,客户端同理

3.1 服务端搭建

*Linux 作为服务端

1.将解压压缩包并命重命名文件夹为frp:

1
2
3
4
5
mkdir frp
tar xzvf frp_0.42.0_linux_386.tar.gz
mv frp_0.42.0_linux_386 frp

# 创建frp文件夹,然后上传linux压缩包至文件夹并解压

如果版本与我的不同,请不要忘记更改!

2.修改服务端配置文件(Frps.ini)

(1)进入frp文件夹下:cd frp,修改frps.ini文件 (vim frps.ini

(2)修改完成,:wq 退出

默认的配置文件:

1
2
3
4
5
[common]
# 内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7001

如果无特殊需要可不更改

3.启动服务端

启动命令:

1
./frps -c frps.ini

停止服务:
Ctrl+C

如果看到 Start frps success ,说明启动成功

4.端口开放

这部分建议根据自己的系统百度~

懒得写了

如果是 腾讯云,阿里云 这些服务商的,请不要忘记在 安全组/防火墙 开放端口!

*Windows 作为服务端

1.将解压压缩包并命重命名文件夹为frp

2.修改服务端配置文件(Frps.ini)
(参考 使用 Linux 作为服务端 )

3.启动服务端

进入frp文件夹,按住 Shift 并右键点击空白处,点击在此处打开 PowerShell 窗口

Tips:我这里是 Windows10 ,如果是 Windows7 可能为 cmd窗口,直接执行 frps.exe -c frps.ini 即可

然后在 Powershell 输入 cmd

最后输入 frps.exe -c frps.ini 即可启动服务端

如果看到 Start frps success ,说明启动成功

Ctrl+C 停止服务

(如果觉得麻烦可自行写一个bat脚本)

4.端口开放

这部分建议根据自己的系统百度~

懒得写了

如果是 腾讯云,阿里云 这些服务商的,请不要忘记在 安全组/防火墙 开放端口!

3.2 客户端搭建

*Linux 作为客户端

1.将解压压缩包并命重命名文件夹为frp:

1
2
3
4
5
mkdir frp
tar xzvf frp_0.42.0_linux_386.tar.gz
mv frp_0.42.0_linux_386 frp

# 创建frp文件夹,然后上传linux压缩包至文件夹并解压

如果版本与我的不同,请不要忘记更改!

2.修改服务端配置文件(Frpc.ini)

(1)进入frp文件夹下:cd frp,修改frps.ini文件 (vim frpc.ini

(2)修改完成,:wq 退出

配置文件请根据自己的需求更改!

[common]部分是服务端的配置,请与服务端的配置保持一致!

例:

1
2
3
4
5
6
7
8
9
10
11
12
# 客户端配置
[common]
server_addr = 服务器ip
server_port = 7000 # 与frps.ini的bind_port一致
token = 52010 # 与frps.ini的token一致

# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 这个自定义,之后再ssh连接的时候要用

3.启动客户端

启动命令:

1
./frpc -c ./frpc.ini

停止服务:
Ctrl+C

如果看到 start proxy success ,说明启动成功

*Windows 作为客户端

1.将解压压缩包并命重命名文件夹为frp

2.修改客户端配置文件(Frpc.ini)
(参考 使用 Linux 作为客户端 )

3.启动客户端

进入frp文件夹,按住 Shift 并右键点击空白处,点击在此处打开 PowerShell 窗口

Tips:我这里是 Windows10 ,如果是 Windows7 可能为 cmd窗口

然后在 Powershell 输入 cmd

最后输入 frpc.exe -c frpc.ini 即可启动服务端

如果看到 start proxy success ,说明启动成功

Ctrl+C 停止服务

(如果觉得麻烦可自行写一个bat脚本)

在启动 服务端 & 客户端 的时候请不要忘记:需要进入Frp所在的文件目录!!!

4.设置自启动

4.1 Linux

4.1.1 Ubuntu

1.安装 Supervisor(进程管理器)

1
sudo apt install supervisor -y

2.在 /etc/supervisor/conf.d 下新建一个配置文件 frp.conf

1
vim /etc/supervisor/conf.d/frp.conf

3.输入 i 编辑 frp.conf

  • *服务端

    1
    2
    3
    [program:frp]
    command = /etc/frp/frps -c /etc/frp/frps.ini
    autostart = true
  • *客户端

    1
    2
    3
    [program:frp]
    command = /etc/frp/frpc -c /etc/frp/frpc.ini
    autostart = true

4.点击Esc退出编辑模式,输入:wq保存

5.运行

1
2
3
4
5
6
7
8
9
10
11
# 重启supervisor
sudo systemctl restart supervisor

# 查看运行状态
sudo systemctl status supervisor

# 查看frp服务是否已经启动
ps -ef | grep frp

# 设置开机启动
sudo systemctl enable supervisor

4.1.2 Centos

  • *服务端

1.在 /lib/systemd/system 下新建一个配置文件 frps.service

1
vim /lib/systemd/system/frps.service

2.输入 i 编辑 frps.service

1
2
3
4
5
6
7
8
9
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/etc/frp/frps -c / etc/frp/frps.ini
[Install]
WantedBy=multi-user.target

3.点击Esc退出编辑模式,输入:wq保存

4.运行

1
2
3
4
5
6
systemctl daemon-reload      #重载 systemctl
systemctl start frps #启动
sudo systemctl stop frps #关闭
sudo systemctl restart frps #重启
systemctl status frps #查看状态
systemctl enable frps #设置开机启动
  • *客户端

1.在 /lib/systemd/system 下新建一个配置文件 frpc.service

1
vim /lib/systemd/system/frpc.service

2.输入 i 编辑 frpc.service

1
2
3
4
5
6
7
8
9
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/etc/frp/frpc -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target

3.点击Esc退出编辑模式,输入:wq保存

4.运行

1
2
3
4
5
6
systemctl daemon-reload      #重载 systemctl
systemctl start frpc #启动
sudo systemctl stop frpc #关闭
sudo systemctl restart frpc #重启
systemctl status frpc #查看状态
systemctl enable frpc #设置开机启动

4.2 Windows客户端

暂无(建议自行百度)

5.配置文件

服务端 frps.ini

1
2
3
4
5
6
[common]
bind_port = 7000 #服务端端口
token = 12345678 #客户端连接服务端的密码
dashboard_port = 7500 #控制面板端口
dashboard_user = admin #控制面板用户名
dashboard_pwd = admin #控制面板密码

客户端 frpc.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 = 1.1.1.1 #服务端IP
server_port = 7000 #服务端端口
token = 12345678 #连接服务端的密码

[test_http]
type = http #通信数据类型
local_ip = 127.0.0.1 #客户端ip
local_port = 8000 #客户端需要映射的端口
custom_domains = test.test.com #服务端要代理的域名

[https]
type = https #通信数据类型
local_ip = 127.0.0.1 #客户端ip
local_port = 8000 #客户端需要映射的端口
custom_domains = test.test.com #服务端要代理的域名
# 以下为https新加的内容
plugin = https2http #将https请求转换成http请求后再发送给本地服务
plugin_local_addr = 127.0.0.1:8000 #转换http后的端口
#证书相关配置
plugin_crt_path = /usr/local/frp/test_test_com.pem #注意后缀
plugin_key_path = /usr/local/frp/test_test_com.key #注意后缀
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

6.常见错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.(frps):Create vhost http listener error, listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
# 端口被其他应用程序占用,关闭其他应用程序或改用其他端口。

2.(frpc):[rdp] start error: port already used
# 远程端口已被使用,改用其他端口。

3.(frpc):[web01] start error: proxy name [web01] is already in use
# 代理名称[web01]已被使用,检查并更换一个代理名称。

4.(frpc):[web01] start error: router config conflict
# [web01]指定的域名(custom_domains)已被使用,检查并更换其他域名。

5.(frpc):work connection closed, EOF
# 连不上服务器端,检查服务器端运行是否正常,服务器端恢复后客户端会自动恢复连接。

6.(frpc):gen TLS config error: open ./frpc/ssl/rise.rs.crt: no such file or directory
# 找不到SSL相关文件,可将路径设置为绝对路径(使用Systemd启动可能会遇到)

7.后记

本篇已于2022/10/16更新!

个人吐槽:好久不写博文,都不太会 Markdown 了啊啊啊

~~~在写完这篇文章后,我发现了一个问题~~

~~~似乎没什么写的必要…~~~

不过能水个文章也是值得的!