很多应用软件不支持frp的tcp获取真实ip proxy protocol v2协议,可能是有性能问题
很多应用软件不支持frp的tcp获取真实ip proxy protocol v2协议,可能是有性能问题实现应该不难,主要我猜测可能有性能问题,本来说c语言能直接调用系统api去处理tcp协议层,这么做要集成frp在软件内部持续不间断抓包流量,分析出协议头来识别,要获取frp后的真实ip有一定性能影响吧,再加上frp是单核心cpu工作的软件,等实现成功可能宽带吞吐量缩水成200M宽带,本来直接调用系统是能跑3000M宽带的,楼上说的隧道层可能是更好的解决方案
微软C语言开发者文档里面,翻了好一会没查到相关的函数调用方式,等于说没办法调用系统api
网上检索frp获取真实ip协议都指向为haproxy的源码,文中也提到了有性能问题,只能做到尽可能减少影响
https://www.haproxy.org/download/2.0/doc/proxy-protocol.txt
等于说要加载个 libproxy.h 库文件去处理这些tcp流量数据,要做高级选项的话记得考虑到utp打洞ip地址传递之类不要冲突了
假设为比特彗星增加支持
需要一个内存缓冲区来记录所有接收到的tcp流量,然后分析是不是头,然后在取头的值,在没有分析流量之前你并不知道这个包里面的内容是什么
找到用户列表相关联的peer,然后对peer重写ip地址,或者标注为127.0.0.1[注册用户][真实ip],记得给处理的用户打个标注,,比如说这种样子二选一,真实ip[注册用户]
需要注意的是,应当使用ip白名单,仅允许填写的ip地址使用proxy protocol v2,大部分非特殊的情况下,frp流量都来自127.0.0.1,但也可能是其他方式建立连接来获取tcp端口(网页在线一键端那种,这种情况本地电脑不需要运行frp客户端,或者是把frp客户端运行在局域网其它设备上),也可能要用CIDR来处理多个frp服务器比较方便点
文档底部有个示例调用库代码可以参考,frp就是这篇文章教程了
https://bbs.itzmx.com/thread-98648-1-1.html
为什么还需要正代?
参考我的文章,正向代理的主要作用是把请求在frp远程服务器上发起,以便提交frp服务器的ip地址给tracker,这样别人才能找到frp的ip地址来连接到本地的比特彗星
本地发起的请求不会经过frp服务器,只接收远程的流量,然后搭配socks5正向代理,把本地发向tracker服务器连接的请求通过正向代理,实现在frp服务器上发起给tracker
别人不知道frp的ip地址,正向代理的用途就是告知tracker服务器,frp的ip和端口,然后frp在把请求转发给peerB就成功了
我文章底部也有说,frp没有提供正向代理,所以要搭配v2之类的其它代理软件,安装在与frp同一个服务器上,他的意思是你在frp服务器上的测试过程可以用ssh来创建一个socks5正向代理,这样才能把frp的ip地址给tracker服务器
对于现有2.12最新版比特彗星,需要勾选的是
使用代理连接Tracker:汇报frp的ip地址给追踪器服务器,以便其它peer连接
使用代理端口转发检测:让比特彗星客户端实现绿灯,可作用于长效种子上传
可选
使用Socks5代理进行DNS解析:在远程服务器中解析域名,防止国内dns污染
性能问题tap和nf wfp确实是极好的,拉满网卡完全不在话下,frp测过极限宽带在200M,也就是大约30MB/s的速度,本地性能就是上面haproxy文章提到的实现proxy procotol v2获取会有一定性能损耗
哦对,2.11版本把这个细分了一下,还要勾上 使用代理查询长效种子
页:
[1]