发布于 

frp内网穿透教程

前言

frp是什么

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

项目地址:https://github.com/fatedier/frp/

为什么要写这篇文章

最近在折腾arma3的服务器,饱受没有公网ip之困扰。为此写下这篇教程记录我折腾内网穿透的整个过程。

本文部分参考了官方文档的内容

全文以写作这篇文章的最新版(v0.43.0)为准

配置环境:Debian 10 64-bit

下载frp

1
wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz

安装frp

解压

1
tar -zxvf frp_0.43.0_linux_amd64.tar.gz

复制到系统目录

1
2
3
4
cd frp_0.43.0_linux_amd64/
mkdir -p /etc/frp
mv *.ini /etc/frp
mv frpc frps /usr/bin

配置systemd

公网机

新建/usr/lib/systemd/system/frps.service:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

随后执行

1
systemctl enable frps

内网机

新建/usr/lib/systemd/system/frpc.service:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

随后执行

1
systemctl enable frpc

启动frp

公网机

1
systemctl start frps

内网机

1
systemctl start frpc

注:每次修改完配置应通过systemctl restart重启服务

配置frp

普通服务(以SSH为例)

公网机修改/etc/frp/frps.ini

1
2
[common]
bind_port = 7000

内网机修改/etc/frp/frpc.ini

1
2
3
4
5
6
7
8
9
[common]
server_addr = 公网机ip
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 本地SSH端口
remote_port = 公网访问服务用的端口

其他服务以此类推,如我的Arma 3服务器配置为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000

[arma3-1]
type = udp
local_ip = 127.0.0.1
local_port = 2302
remote_port = 2302

[arma3-2]
type = udp
local_ip = 127.0.0.1
local_port = 2303
remote_port = 2303

Web服务(HTTP)

在公网机frps.ini中添加一行

1
vhost_http_port = 8080

即设置http请求端口为8080

在内网机frpc.ini中添加

1
2
3
4
[web]
type = http
local_port = 80
custom_domains = your.domain

分别启动frps,frpc。并将your.domain的A记录解析至公网机

访问http://your.domain:8080来访问内网服务

Web服务(HTTPS)

在公网机/etc/frp/frps.ini中添加

1
vhost_https_port = 443

即设置https请求端口为443

暴露本地HTTP服务

在内网机/etc/frp/frpc.ini中添加

1
2
3
4
5
6
7
8
9
10
11
12
[test_htts2http]
type = https
custom_domains = your.domain

plugin = https2http
plugin_local_addr = 127.0.0.1:80

# HTTPS 证书相关的配置
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

分别启动frpc,frps

访问https://your.domain来访问内网服务

暴露本地HTTPS服务

在内网机/etc/frp/frpc.ini中添加

1
2
3
4
5
6
7
8
9
[https2https]
type = https
custom_domains = your.domain

plugin = https2https
plugin_local_addr = 127.0.0.1:443
# 证书和密钥位置
plugin_crt_path = /etc/frp/server.crt
plugin_key_path = /etc/frp/server.key

杂项

服务端Web界面

在公网机的/etc/frp/frps.inicommon中添加

1
2
3
4
dashboard_port = 7500
# 用户名和密码
dashboard_user = admin
dashboard_pwd = admin

通过http://[公网机ip]:7500来访问服务端Web界面

客户端Web界面

在内网机的/etc/frp/frpc.inicommon中添加

1
2
3
4
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

通过http://127.0.0.1:7400来访问客户端Web界面