基于frp的udp穿透
·
相关文章
目录
简介
frp是一种快速反向代理,可帮助您将NAT或防火墙后面的本地服务器公开到Internet。到目前为止,它支持TCP和UDP以及HTTP和HTTPS协议,在这些协议中,请求可以通过域名转发到内部服务。
frp还具有P2P连接模式。
相关文档
官方文档:https://github.com/fatedier/frp
基于UDP的穿透方案
-
服务器和客户端分别下载相应的frp版本(当前0.31.1),下载地址 https://github.com/fatedier/frp/releases
-
首先布置服务器(当前阿里云windows版本),具体步骤如下:
- 将下载好的frp_0.31.1_windows_amd64.zip解压到文件夹
- 打开文件夹选择服务器配置文件进行修改
- 这里进行简单配置,配置如下
[common] #绑定服务器端口 bind_port = 7000 #管理查看端口、账号、密码 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin
- 配置好过后保存,在当前目录下运行frps -c frps.ini
-
部署需要穿透的客户端(这里也是windows版本),具体如下:
- 配置客户端frpc.ini,修改如下
[common] #服务器ip地址 server_addr = 39.104.xxx.xxx #服务器绑定端口 server_port = 7000 [udp] #服务类型 type = udp #本地客户端udp端口 local_port = 9000 #自定义远程调用端口 remote_port = 9001
- 配置好过后保存,在当前目录下运行frpc -c frpc.ini
demo测试
注意:1.udp访问地址为服务器地址39.104.xxx.xxx,端口为自定义端口9001
2.请确认自己的云服务器已经配置了相应的安全访问规则
try {
DatagramSocket socket = new DatagramSocket(10001);
InetSocketAddress address= new InetSocketAddress("39.104.xxx.xxx",9001);
String udpStr = "upd打洞成功!";
DatagramPacket packet = new DatagramPacket(udpStr.getBytes(),udpStr.getBytes().length,address);
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}
判断是否穿透成功
方式一:利用Wireshark抓包获取对应端口的数据,编码查看是否是自己发送的数据
方式二:直接启动穿透的udp客户端服务,将收到的数据打印出来查看
是否直连
应用udp的方式一般都是想通过内网打洞直连,不走frp中转流量,这里经过测试,通过监测流量大小发现frp还是走的转发,基于xtcp的frp方案也测试失败,具体的点对点传输还需研究
更多推荐
已为社区贡献1条内容
所有评论(0)