使用FRP内网穿透
使用FRP内网穿透
一、下载
github仓库:
https://github.com/fatedier/frp
官方文档:
二、部署
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 <== 精简客户端配置文件
└── LICENSE2.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-reload2.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 = 223.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.13.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 外目前无法被修改。