使用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-frontendbind 192.168.123.77:8577balance roundrobinmode tcpoption tcplogserver 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 下载

TOA - TCP Option Address相关推荐

  1. TOA(tcp option adress)安装

    1.说明 1.1.场景说明 TOA 属于 4层转发系统的一个功能模块,缺省情况下服务经过 4层转发系统,服务源站查看到的请求IP为NAT的回源地址,这对于一些特殊业务来说(比如游戏),是无法满足的,T ...

  2. tcp option

    一.奇怪现象: 三次握手时,前两次syn|syn+ack中的window size明明很大,但是第三次握手的时候window size却突然变得很小, 并且后续的数据传输的过程中,window siz ...

  3. tcp option 结构体_基于 Kotlin 实现一个简单的 TCP 自定义协议

    一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~. 我们的项目需要开发一款智能硬件.它由 Web 后台发送指令到一款桌面端应用 ...

  4. 关于 FullNat 模式的 Toa 实现原理【转】

    目录 背景 获取client ip的几种方法 toa/uoa 获取client ip 原理 tcp option 字段 lvs中的toa格式与插入 格式 插入 后端获取client ip ss/net ...

  5. TiDB 如何在 LVS FULL NAT 模式下显示客户端真实 IP

    原文来源: https://tidb.net/blog/1d65166f [是否原创]是 [首发渠道]TiDB 社区 [正文] 作者: 靳献旗 汽车之家 DBA,TUG 2021 MVA 1.背景 公 ...

  6. TCP连接的建立(二)

    被动打开 SYN cookies TCP协议开辟了一个比較大的内存空间请求连接队列来存储连接请求块,当SYN请求不断添加,请求连接数目到达上限时,会致使系统丢弃SYN连接请求.SYN cookies技 ...

  7. 【Boost】boost库asio详解9——TCP的简单例子2

    客户端: // Client.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostream> #inclu ...

  8. linux内核对TCP的连接状态管理

    TCP协议实例连接状态存放在struct sock数据结构的state数据域中. 当TCP协议实例连接处于不同状态时,对数据包的处理不一样,所以每个输入的数据包都要来查询TCP状态机,整个状态机制划分 ...

  9. TCP 连接状态及相关命令学习

    在平时的开发工作中,我们都使用被封装完好的 TCP/HTTP 库去完成需求开发,很少关心底层 TCP 的连接状态,但是一旦遇到较难定位的线上事故,往往都是因为 TCP 连接参数或者使用姿势不对导致的, ...

最新文章

  1. Java实现AES和RSA算法
  2. 帝国cms php点击删除,帝国CMS删除内容非本站链接的方法(非插件)
  3. bash下: () {} [] [[]] (())的解释
  4. 如何设计销售CRM×运营CRM×社交化SCRM系统?(一)
  5. 如何开启和使用windows 10中的Hyper-v
  6. Log4j2架构分析与实战
  7. docker 配置selenium调用Firefox无界面浏览器
  8. 马蜂窝等多家旅游平台针对肺炎疫情推出旅客保障措施
  9. 童话 计算机教程,数学绘本 | 脑袋里装了个计算器(第四讲)
  10. 【转】学习理论,注重细节
  11. SQLServer数据库字典维护方法
  12. r语言折线图_R语言基础入门视频教程——语法篇(完结)
  13. 取出Cookie中的中文显示乱码解决方法。经验证第三种方法有效。
  14. 小白学 Python 爬虫(18):Requests 进阶操作
  15. android3d动画的实现,Android 3D旋转动画库
  16. adsl双网卡共享上网的设置(win2003)
  17. Java基础321 - 如何重写equals方法
  18. 5个增加数据科学学习的技巧
  19. Ajax的异步和同步
  20. Docker--容器挂载

热门文章

  1. 分布式消息通信ActiveMQ原理 分析一
  2. 默认拷贝构造函数 与 自定义拷贝构造函数
  3. 预防NSA勒索病毒攻击脚本
  4. 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
  5. java和以太坊交互_java类库EthereumJ如何操作以太坊区块链
  6. 怀念在青岛的那段日子
  7. 速锐得解码宝马B48远光灯结构总成设计电路控制DEMO方案
  8. JDBC编程--jdbc基本操作步骤
  9. 湖南计算机高等专科学校并入湖南大学,合并的更名的新增大学都有谁?对填报志愿有大影响...
  10. android 刺激战场 目录,刺激战场最全资源分布:最肥的点在哪?