frp learning notes及相关配置操作
什么是frp
大多数时候,我们的主机都会在局域网内而且通过DHCP协议获取动态IP。 那么我想通过外网获取局域网内的主机/服务器提供的服务, 但是局域网内的所有主机/服务器的外网IP只有路由器上的那一个,这个时候该则怎么定位到我要的内网服务器和服务呢?
当我们有这样一个需求的时候(即内网穿透),frp就可以派上用场。
frp (Fast Reverse Proxy)是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 frp可以把NAT/防火墙后面的本地服务器端口转发到公共服务器。
如何用frp实现内网穿透?
Prerequisites
- 有公网IP的服务器,现在一般上可以买一个云服务器(以腾讯云为例)
- 一个本地服务器(PC、树莓派等等)
云服务器侧(frp server)
- 购买云服务器拿到一个公网IP
- 在云服务器上下载FRP
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
cd frp_0.44.0_linux_amd64
该文件夹中的文件有
.
├── LICENSE
├── frpc --- 客户端侧的可执行程序
├── frpc.ini --- 客户端侧的配置文件
├── frpc_full.ini
├── frps --- 服务端侧的可执行程序
├── frps.ini --- 服务端侧的配置文件
└── frps_full.ini
- 在云服务器上配置文件
frps.ini
(frp server)
[common]
# 监听端口
bind_port = 7002
# 面板端口
dashboard_port = 7500
# 登录面板账号设置 (自定义)
dashboard_user = <your username>
dashboard_pwd = <your password>
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081
# 身份验证 token换一个安全点的
token = <your token>
配置好后,运行客户端程序 ./frps -c frps.ini
- 在浏览器中输入
<your public IP>:7500
,输入dashboard_user和dashboard_pwd,即可访问frp的管理界面 - 在管理界面可以查看frp连接情况,此时没有frp的连接,我们需要在本地服务器上配置frp客户端
本地服务器侧(frp client)
- 与云服务器上的操作一样,在本地服务器上下载FRP
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
mkdir /usr/local/bin/frp/
tar -zxvf frp_0.44.0_linux_amd64.tar.gz --strip-components 1 -C /usr/local/bin/frp/
cd /usr/local/bin/frp/
- 在本地服务器上配置文件
frpc.ini
(frp client)
[common]
server_addr = <云服务器地址>
authentication_method = token
token = <写在frps.ini中的token>
server_port = 7002 # 写在frps.ini中的bind_port
admin_addr =127.0.0.1
admin_port = 7400
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 20022
# add more port if needed.
- 设置 Linux Service 开机自启动frp 新建一个frpc.service文件
vi /etc/systemd/system/frpc.service
在该文件中输入以下内容
Description=Frp Client Daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frp/frpc -c /usr/local/bin/frp/frpc.ini
ExecStop=/usr/bin/killall frpc
#启动失败1分钟后再次启动
RestartSec=1min
KillMode=control-group
#重启控制:总是重启
Restart=always
[Install]
WantedBy=multi-user.target
保存该文件后,通过管理员权限(sudo)执行以下内容
systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
systemctl status frpc
- 以上操作完成后,访问
<your public IP>:7500
,即访问frp的管理界面,此时可以看到在frpc.ini
中配置的端口信息。此时可以看到 - !注意,此步骤在云服务器的管理界面上完成。 我们需要在云服务器上需要暴露相应的端口(此处为20022),云服务厂商一般都会有端口规则的管理界面(防火墙)
- 在所有操作完成后,通过公网IP以及设置的端口号,即可访问本地服务器的服务。 此处可以通过
ssh username@publicIP -p 20022
访问本地服务器。
frp的原理
Reverse proxy…之后有时间会分析他们的代码。
Reference
Enjoy Reading This Article?
Here are some more articles you might like to read next: