@zhongdao
2018-03-26T02:23:40.000000Z
字数 2013
阅读 2765
当内网安装有服务例如ssh,web时,因为从公网无法访问内网,需要借助内网穿透的软件。
frp 是一个开源的可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
frp的基本原理是在公网搭设一个具有公网ip的服务器,然后建立与内网的通道,转发所有的端口流量到内网相应服务器,实现了内网服务的对外提供。架构图如下:

github上的官方说明内容太多,而且没有清晰的结构化和顺序,所以编写了如下教程,针对典型的ssh访问和web访问,给出了简明的步骤和说明,便于快速上手使用。
各种平台的软件包下载地址:
https://github.com/fatedier/frp/releases
包括linux, windows等不同版本。
下面以常见的linux 64位为过程演示
mkdir ~frpcd ~frpwget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gztar -zxvf frp_0.16.0_linux_amd64.tar.gzcd frp_0.16.0_linux_amd64/
因为下载的文件同时包含服务端和客户端,所以基本无需安装。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
事先申请域名,将域名指向服务器的ip. 这里的域名为 p2pnet.club
编辑 frps.ini
[common]bind_addr = 0.0.0.0bind_port = 7000# udp port to help make udp hole to penetrate natbind_udp_port = 7001dashboard_port = 7500# dashboard 用户名密码,默认都为 admindashboard_user = admindashboard_pwd = adminvhost_http_port = 2780subdomain_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.xserver_port = 7000admin_addr = 127.0.0.1admin_port = 7400[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 7022[web]type = httplocal_port = 2780subdomain = office
[common]server_addr = x.x.x.xserver_port = 7000admin_addr = 127.0.0.1admin_port = 7400[ssh2]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 7023[web2]type = httplocal_port = 2780subdomain = 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/
