前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FRP 内网穿透、反向代理

FRP 内网穿透、反向代理

作者头像
GoCoding
发布2022-02-23 14:02:36
4720
发布2022-02-23 14:02:36
举报
文章被收录于专栏:GoCodingGoCoding

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

本文将以暴露内网 Web 服务为例,实践 frp 的安装部署。更多应用场景,可见 frp 示例[2]

安装

frp 主要由 客户端(frpc)服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

可以在 Github 的 Release[3] 页面中下载到最新版本的客户端和服务端二进制文件。

本文公网、内网机器都是 Linux x86_64,所以选择了 frp_0.39.0_linux_amd64.tar.gz。解压:

代码语言:javascript
复制
$ tar xzvf frp_0.39.0_linux_amd64.tar.gz
frp_0.39.0_linux_amd64/
frp_0.39.0_linux_amd64/frps
frp_0.39.0_linux_amd64/frps_full.ini
frp_0.39.0_linux_amd64/systemd/
frp_0.39.0_linux_amd64/systemd/frpc@.service
frp_0.39.0_linux_amd64/systemd/frps@.service
frp_0.39.0_linux_amd64/systemd/frpc.service
frp_0.39.0_linux_amd64/systemd/frps.service
frp_0.39.0_linux_amd64/LICENSE
frp_0.39.0_linux_amd64/frpc.ini
frp_0.39.0_linux_amd64/frpc_full.ini
frp_0.39.0_linux_amd64/frps.ini
frp_0.39.0_linux_amd64/frpc

公网

拷贝 frps 文件进公网机器,假设其 IP 为 x.x.x.x

代码语言:javascript
复制
scp frps* ubuntu@x.x.x.x:

修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080:

代码语言:javascript
复制
cat <<-EOF > ~/frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
EOF

安装 supervisor 进行部署,后台长期运行:

代码语言:javascript
复制
# 安装 supervisor
sudo apt install supervisor -y

# 添加配置
sudo -i
cat <<-EOF >> /etc/supervisor/supervisord.conf

[program:frps]
directory=/home/ubuntu
command=/home/ubuntu/frps -c /home/ubuntu/frps.ini
priority=999
autostart=true
autorestart=true
startsecs=10
startretries=3
stdout_logfile=/var/log/frps_out.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/frps_err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
environment=
nocleanup=false
EOF
exit

# 更新服务
sudo supervisorctl update all

# 查看服务
sudo supervisorctl status all

内网

拷贝 frpc 文件进内网机器,假设其 IP 为 192.168.1.100

代码语言:javascript
复制
scp frpc* ubuntu@192.168.1.100:

修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.xlocal_port 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains

代码语言:javascript
复制
cat <<-EOF > ~/frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 8000
custom_domains = www.yourdomain.com
EOF

www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x

如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。或者可以通过修改 HTTP 请求的 Host 字段来实现同样的效果。

简单运行服务,进行测试:

代码语言:javascript
复制
# 运行 HTTP 服务
python3 -m http.server 8000

# 运行 frpc 服务
./frpc -c ./frpc.ini

# 访问测试
curl http://www.yourdomain.com:8080/

systemd 进行部署,后台长期运行:

代码语言:javascript
复制
# 拷贝文件
sudo cp frpc /usr/bin/frpc
sudo mkdir -p /etc/frp
sudo cp frpc.ini /etc/frp/frpc.ini

# 添加配置(frp 给的 systemd 配置)
sudo -i
cat <<-EOF > /etc/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
EOF
exit

# 重载配置
sudo systemctl daemon-reload

# 开机启动
sudo systemctl enable frpc.service

# 启动服务
sudo systemctl start frpc.service

# 查看状态
sudo systemctl status frpc.service

脚注

[1]

frp: https://github.com/fatedier/frp

[2]

frp 示例: https://gofrp.org/docs/examples/

[3]

Release: https://github.com/fatedier/frp/releases

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 公网
  • 内网
    • 脚注
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档