@zhongdao
2018-03-26T10:23:40.000000Z
字数 2013
阅读 2373
当内网安装有服务例如ssh,web时,因为从公网无法访问内网,需要借助内网穿透的软件。
frp 是一个开源的可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
frp的基本原理是在公网搭设一个具有公网ip的服务器,然后建立与内网的通道,转发所有的端口流量到内网相应服务器,实现了内网服务的对外提供。架构图如下:
github上的官方说明内容太多,而且没有清晰的结构化和顺序,所以编写了如下教程,针对典型的ssh访问和web访问,给出了简明的步骤和说明,便于快速上手使用。
各种平台的软件包下载地址:
https://github.com/fatedier/frp/releases
包括linux, windows等不同版本。
下面以常见的linux 64位为过程演示
mkdir ~frp
cd ~frp
wget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gz
tar -zxvf frp_0.16.0_linux_amd64.tar.gz
cd frp_0.16.0_linux_amd64/
因为下载的文件同时包含服务端和客户端,所以基本无需安装。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
事先申请域名,将域名指向服务器的ip. 这里的域名为 p2pnet.club
编辑 frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 2780
subdomain_host = p2pnet.club
可通过7500的管理端口来查看连接情况。 具体通过
http://ip:7500/ 来访问。
运行
./frps -c ./frps.ini
修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;
需要注意多个客户端时字段区域section的 ssh, web的名字不要重复。可以通过ssh, ssh2,web,web2来改变。
ssh的端口在服务端不能重复,设置为7022,7023.
web通过二级域名office,home来区分,可以采用相同的端口配置,这里是2780。
[common]
server_addr = x.x.x.x
server_port = 7000
admin_addr = 127.0.0.1
admin_port = 7400
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022
[web]
type = http
local_port = 2780
subdomain = office
[common]
server_addr = x.x.x.x
server_port = 7000
admin_addr = 127.0.0.1
admin_port = 7400
[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7023
[web2]
type = http
local_port = 2780
subdomain = home
启动 frpc:
./frpc -c ./frpc.ini
修改配置文件重新载入frpc:
./frpc reload
查看frpc状态:
./frpc status
http://p2pnet.club:7500/
通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=7022 test@x.x.x.x
ssh -oPort=7023 test@x.x.x.x
通过浏览器访问内网机器
http://home.p2pnet.club:8080/
http://office.p2pnet.club:8080/