1. frp介绍
https://github.com/fatedier/frp
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
2. 安装
1 2 3 4 5
| $ wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
$ wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_windows_amd64.zip
|
1 2
| $ tar -xzf frp_0.37.0_linux_amd64.tar.gz
|
3. 使用
3.1 使用TCP暴露内网的服务
前期准备
- 一台拥有公网ip的服务器:运行frps,进行流量转发
- 一台能访问到服务器的内网机器:运行frpc,提供流量服务
- 访问端:访问公网服务器,并由frps将流量转发到frpc端,实现访问内网机器的功能
服务器端配置(假设ip
地址为x.x.x.x
)
服务器开放7000端口监听来自客户端的连接
1 2
| [common] bind_port = 7000
|
内网机器配置
客户端连接到服务器的7000端口,然后将本地的4000端口的tcp服务映射到服务器的10010端口上,之后访问服务器ip:10010
端口的流量都会被转发到客户端:4000
端口上。
- frpc.ini(将本地4000端口的tcp服务映射到远程服务器的10010端口上)
1 2 3 4 5 6 7 8 9
| [common] server_addr = x.x.x.x server_port = 7000
[hexo] type = tcp local_ip = 127.0.0.1 local_port = 4000 remote_port = 10010
|
访问
- 使用浏览器打开
x.x.x.x:10010
即可访问内网 4000
端口的服务。
3.2 使用frp搭建点到点内网穿透,来访问windows远程桌面
服务器起桥梁作用,帮助两台内网机器建立连接。
一旦建立链接,所有的流量只在两台内网机器之间传递(要求两台机器都运行frpc)
- 具有公网ip的服务器
- 内网机器1:被访问
- 内网机器2:执行访问
服务器(桥梁)
1 2 3
| [common] bind_port = 7000 bind_udp_port = 7001
|
内网机器1(被访问)
1 2 3 4 5 6 7 8 9 10
| [common] server_addr = xx.xx.xx.xx server_port = 7000
[p2p_rdp] type = xtcp
sk = abcdefg local_ip = 127.0.0.1 local_port = 3389
|
- 启动
1
| $ ./frpc.exe -c frpc.ini
|
内网机器2(访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [common] server_addr = x.x.x.x server_port = 7000
[p2p_rdp_visitor] type = xtcp role = visitor
server_name = p2p_rdp
sk = abcdefg bind_addr = 127.0.0.1 bind_port = 89
|
1
| $ ./frpc.exe -c frpc.ini
|
访问127.0.0.1:89,然后127.0.0.1:89会将数据转发到远程服务器的3389端口建立rdp连接