前言
frp是什么
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
项目地址:https://github.com/fatedier/frp/
为什么要写这篇文章
最近在折腾arma3的服务器,饱受没有公网ip之困扰。为此写下这篇教程记录我折腾内网穿透的整个过程。
本文部分参考了官方文档的内容
全文以写作这篇文章的最新版(v0.43.0)为准
配置环境:Debian 10 64-bit
下载frp
wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz
安装frp
解压
tar -zxvf frp_0.43.0_linux_amd64.tar.gz
复制到系统目录
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:
[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
随后执行
systemctl enable frps
内网机
新建/usr/lib/systemd/system/frpc.service:
[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
随后执行
systemctl enable frpc
启动frp
公网机
systemctl start frps
内网机
systemctl start frpc
注:每次修改完配置应通过systemctl restart
重启服务
配置frp
普通服务(以SSH为例)
公网机修改/etc/frp/frps.ini
[common]
bind_port = 7000
内网机修改/etc/frp/frpc.ini
[common]
server_addr = 公网机ip
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 本地SSH端口
remote_port = 公网访问服务用的端口
其他服务以此类推,如我的Arma 3服务器配置为:
[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
中添加一行
vhost_http_port = 8080
即设置http请求端口为8080
在内网机frpc.ini
中添加
[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
中添加
vhost_https_port = 443
即设置https请求端口为443
暴露本地HTTP服务
在内网机/etc/frp/frpc.ini
中添加
[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
中添加
[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.ini
的common
中添加
dashboard_port = 7500
# 用户名和密码
dashboard_user = admin
dashboard_pwd = admin
通过http://[公网机ip]:7500
来访问服务端Web界面
客户端Web界面
在内网机的/etc/frp/frpc.ini
的common
中添加
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
通过http://127.0.0.1:7400
来访问客户端Web界面