TOATCPOptionAddress
使用Haproxy转发TCP到业务服务器端,后端报文看到的源 IP 地址是代理服务器的IP 。
为了让后端能够获取到用户端实际的 IP 地址,有三个方案:
1. http 请求记录标识:
在客户端和服务器建立TCP连接之前,一般都是先http请求拿到服务器的IP和PORT。
在http请求时,使用客户端的ID或者macid,device_id,golbal_id等唯一标识映射用户的ip,存储起来,ex:redis的hash 或 zset。
这样,后端tcp服务器就可以根据唯一标识,在存储中拿到用户的ip。虽然不是最精准的,但是也是最接近真实的。
2. haproxy 配置添加send-proxy:
ex:
listen tcp-frontend bind 192.168.123.77:8577
balance roundrobin
mode tcp
option tcplog
server tcp-backend 192.168.123.60:8577 send-proxy
加了send-proxy后,第一次socket连接时,服务端会收到proxy协议:
PROXY TCP4 192.168.123.55 192.168.123.77 52505 8577 PROXY TCP6 ... .. ... ...
#PROXY TCP4/6 client_ip, proxy_ip, client_port, proxy_port
里面有haproxy的Ip与用户真实IP。改造下tcp服务器,就可以拿到客户端tcp连接时的真实ip。
3. TOA(TCP Option Address):
TCP 协议下,为了将客户端 IP 传给服务器,会将客户端的 IP,port 在转发时放入了自定义的 tcp option 字段。
华为云的弹性负载均衡(ELB):
https://support.huaweicloud.com/eu-west-0-usermanual-elb/zh_cn_elb_06_0001.html
TOA模块源代码地址:
https://github.com/Huawei/TCP_option_address
腾讯云的宙斯盾安全防护:
https://cloud.tencent.com/document/product/685/18805
TOA内核安装包地址:
(1) Centos 6.x 下载
(2) Centos 7.x 下载
以上是 TOATCPOptionAddress 的全部内容, 来源链接: utcz.com/z/516246.html