使用FRP内网穿透

一、下载

github仓库:

https://github.com/fatedier/frp

官方文档:

https://gofrp.org/

二、部署

2.1 解压

tar -xf frp_0.44.0_linux_amd64.tar.gz
#解压缩

mv frp_0.44.0_linux_amd64 frp
#目录改名

cd frp
#进入目录

2.2 目录结构

frp
├── frpc   <== 作为客户端时运行
├── frpc_full.ini  <==  完整的客户端配置文件范例
├── frpc.ini    <==  精简客户端配置文件
├── frps  <==  作为服务端时运行
├── frps_full.ini    <==  完整的服务端配置文件范例
├── frps.ini    <==  精简客户端配置文件
└── LICENSE

2.3 添加systemd管理

2.3.1 服务端
cat << EOF >> /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=/apps/frp/frps -c /apps/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
2.3.2 客户端
cat << EOF >> /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=/apps/frp/frpc -c /apps/frp/frpc.ini
ExecReload=/apps/frp/frpc reload -c /apps/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload

三、配置

官方配置范例:

https://gofrp.org/docs/examples/

3.1 常规配置范例

服务器端是一台有公网IP的云服务器,运行frps。

3.1.1 服务器端配置
[common]
bind_port = 7000
#指定监听端口,用于接收client请求
vhost_http_port = 8080
#指定用于接受http请求的端口
vhost_https_port = 8081
#指定用于接受https请求的端口
token = 12345678
#连接密码
3.1.2 客户端配置
[common]
server_addr = x.x.x.x
#这里指定服务的的IP地址
server_port = 7000
#与服务的的监听地址(bind_port)保持一致
token = 12345678
#与服务端的连接密码保持一致

#tcp范例
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 22

#http范例
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = epms.paper1.cc

#https范例
[web-https]
type = https
local_ip = 127.0.0.1
local_port = 80
custom_domains = epms.paper1.cc
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = /opt/frp/cert/web.example_chain.crt
plugin_key_path = /opt/frp/cert/web.example_key.key

3.2 P2P穿透配置范例

3.2.1 服务器端
[common]
bind_port = 7000
#指定监听端口,用于接收client请求
vhost_http_port = 8080
#指定用于接受http请求的端口
vhost_https_port = 8081
#指定用于接受https请求的端口
token = 12345678
#连接密码
3.2.2 内网暴露客户端
[common]
server_addr = 192.168.1.1
#这里指定服务的的IP地址
server_port = 7000
#与服务的的监听地址(bind_port)保持一致
token = 12345678
#与服务端的连接密码保持一致

[p2p_ssh]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
3.2.3 外网访问客户端1
[common]
server_addr = 192.168.1.1
#这里指定服务的的IP地址
server_port = 7000
#与服务的的监听地址(bind_port)保持一致
token = 12345678
#与服务端的连接密码保持一致

[p2p_ssh_visitor]
type = xtcp
role = visitor
#角色是xtcp的访问者
server_name = p2p_ssh
#要访问的 xtcp 代理的名字
sk = abcdefg
#sk与内网暴露客户端的sk一致

# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000

通过 SSH 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@127.0.0.1

3.3 热加载配置文件

当修改了 frpc 中的代理配置,可以通过 frpc reload 命令来动态加载配置文件,通常会在 10 秒内完成代理的更新。

启用此功能需要在 frpc 中启用 admin 端口,用于提供 API 服务。配置如下:

# frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400

之后执行重启命令:

frpc reload -c ./frpc.ini

等待一段时间后客户端会根据新的配置文件创建、更新、删除代理。

需要注意的是,[common] 中的参数除了 start 外目前无法被修改。

标签: none

添加新评论