frp 是一个专一于内网穿透的高性能的反向代理利用,反对 TCP、UDP、HTTP、HTTPS 等多种协定。能够将内网服务以平安、便捷的形式通过具备公网 IP 节点的直达裸露到公网。
本文将以裸露内网 Web 服务为例,实际 frp 的装置部署。更多利用场景,可见 frp 示例。
装置
frp 次要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具备公网 IP 的机器上,客户端通常部署在须要穿透的内网服务所在的机器上。
能够在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件。
本文公网、内网机器都是 Linux x86_64
,所以抉择了 frp_0.39.0_linux_amd64.tar.gz
。解压:
$ tar xzvf frp_0.39.0_linux_amd64.tar.gzfrp_0.39.0_linux_amd64/frp_0.39.0_linux_amd64/frpsfrp_0.39.0_linux_amd64/frps_full.inifrp_0.39.0_linux_amd64/systemd/frp_0.39.0_linux_amd64/systemd/frpc@.servicefrp_0.39.0_linux_amd64/systemd/frps@.servicefrp_0.39.0_linux_amd64/systemd/frpc.servicefrp_0.39.0_linux_amd64/systemd/frps.servicefrp_0.39.0_linux_amd64/LICENSEfrp_0.39.0_linux_amd64/frpc.inifrp_0.39.0_linux_amd64/frpc_full.inifrp_0.39.0_linux_amd64/frps.inifrp_0.39.0_linux_amd64/frpc
公网
拷贝 frps
文件进公网机器,假如其 IP 为 x.x.x.x
:
scp frps* ubuntu@x.x.x.x:
批改 frps.ini
文件,设置监听 HTTP 申请端口为 8080:
cat <<-EOF > ~/frps.ini[common]bind_port = 7000vhost_http_port = 8080EOF
装置 supervisor
进行部署,后盾长期运行:
# 装置 supervisorsudo apt install supervisor -y# 增加配置sudo -icat <<-EOF >> /etc/supervisor/supervisord.conf[program:frps]directory=/home/ubuntucommand=/home/ubuntu/frps -c /home/ubuntu/frps.inipriority=999autostart=trueautorestart=truestartsecs=10startretries=3stdout_logfile=/var/log/frps_out.logstdout_logfile_maxbytes=1MBstdout_logfile_backups=10stdout_capture_maxbytes=1MBstderr_logfile=/var/log/frps_err.logstderr_logfile_maxbytes=1MBstderr_logfile_backups=10stderr_capture_maxbytes=1MBenvironment=nocleanup=falseEOFexit# 更新服务sudo supervisorctl update all# 查看服务sudo supervisorctl status all
内网
拷贝 frpc
文件进内网机器,假如其 IP 为 192.168.1.100
:
scp frpc* ubuntu@192.168.1.100:
批改 frpc.ini
文件,假如 frps
所在的服务器的 IP 为 x.x.x.x
,local_port
为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains
。
cat <<-EOF > ~/frpc.ini[common]server_addr = x.x.x.xserver_port = 7000[web]type = httplocal_port = 8000custom_domains = www.yourdomain.comEOF
将 www.yourdomain.com
的域名 A 记录解析到 IP x.x.x.x
。
如果服务器曾经有对应的域名,也能够将 CNAME 记录解析到服务器原先的域名。或者能够通过批改 HTTP 申请的 Host 字段来实现同样的成果。
简略运行服务,进行测试:
# 运行 HTTP 服务python3 -m http.server 8000# 运行 frpc 服务./frpc -c ./frpc.ini# 拜访测试curl http://www.yourdomain.com:8080/
以 systemd
进行部署,后盾长期运行:
# 拷贝文件sudo cp frpc /usr/bin/frpcsudo mkdir -p /etc/frpsudo cp frpc.ini /etc/frp/frpc.ini# 增加配置(frp 给的 systemd 配置)sudo -icat <<-EOF > /etc/systemd/system/frpc.service[Unit]Description=Frp Client ServiceAfter=network.target[Service]Type=simpleUser=nobodyRestart=on-failureRestartSec=5sExecStart=/usr/bin/frpc -c /etc/frp/frpc.iniExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.iniLimitNOFILE=1048576[Install]WantedBy=multi-user.targetEOFexit# 重载配置sudo systemctl daemon-reload# 开机启动sudo systemctl enable frpc.service# 启动服务sudo systemctl start frpc.service# 查看状态sudo systemctl status frpc.service
GoCoding 集体实际的教训分享,可关注公众号!