frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。当想从公网环境访问家里或公司局域网内的服务器时便可以使用frp搭建内网穿透服务实现此功能。
1、原理介绍
Frp是C/S
架构,在具有公网IP的服务器上搭建Frp的服务端,在本地局域网搭建Frp客户端;Frp通过将局域网内的IP端口映射到公网IP的某个端口上,当我们访问公网IP的这个端口时,相当于访问了其映射的局域网内的 IP:Port
2、服务条件
- 具有公网IP的服务器
- 客户端和服务端使用相同或相近的版本
3、服务端搭建
下载对应系统的最新的程序frp 解压缩,进入解压目录
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $ vim frps.ini [common] bind_port = 7000 bind_udp_port = 7001 kcp_bind_port = 7000
dashboard_port = 7500
dashboard_user = admin dashboard_pwd = admin vhost_http_port = 80
token = xxxx max_pool_count = 5 max_ports_per_client = 0 authentication_timeout = 900 subdomain_host = xxxxx.com tcp_mux = true
|
启动Frp服务端
$ nohup ./frps -c ./frps.ini &
4、客户端搭建
下载相同的程序
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| $ vim frpc.ini [common] server_addr = x.x.x.x server_port = 7000
log_file = /usr/local/frp/frpc.log
log_level = info log_max_days = 3
token = xxxxxx pool_count = 5 tcp_mux = true user = pi login_fail_exit = true protocol = tcp
[ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
[gogs] type = http local_ip = 172.16.10.80 local_port = 3000 use_encryption = true use_compression = false subdomain = gogs
|
启动本地客户端
$ nohup ./frpc -c ./frpc.ini &
ssh连接局域网内的服务器
$ ssh -oPort=6000 root@x.x.x.x
也可在局域网搭建能够被公网访问的Web服务器,开启80或443端口,更多高级的配置请参考下面的文档。
5.systemctl管理frpc服务
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ vim /lib/systemd/system/frpc.service [Unit] Description=frpc daemon After=network.target syslog.target Wants=network.target
[Service] Type=simple Restart=always ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
[Install] WantedBy=multi-user.target
|
服务端同理,把frpc
改为frps
5、参考文档
1、Frp说明文档