F5中获取客户端ip地址(client ip)
当F5设备对其原始设置上的所有IP地址使用NAT时,连接到poo成员(nodes、backend servers)的出站连接将是NAT IP地址。
pool 成员(nodes、backend servers)将无法看到真实的客户端 ip地址,因为看到的是F5上的NAT IP地址。
如果池是HTTP WEB服务器,则可以使用X-Forwarded-For HTTP标头。
但是,对于非HTTP池服务器,需要禁用BIG-IP NAT,以允许客户端ip在访问pool成员是成为源IP地址。
1.环境
1.BIG-IP
2.配置了NAT或者SNAT
3.NAT 的源设置为 All IPv4 Addresses
4.NAT的 VLAN / Tunnel Traffic 配置为 All
5.Virtual Server's Source Address Translation 配置为 None
2.操作
2.1.Pool 是一个 HTTP Web 服务器
本文介绍在 BIG-IP 系统上配置了 SNAT 对象时,如何允许池成员 Web 服务器接收原始客户端 IP 地址。
SNAT 对象将原始客户端 IP 地址映射到 BIG-IP 设备上定义的转换地址。当 BIG-IP 系统收到来自客户端 IP 地址的请求时,如果请求中的客户端 IP 地址是在 SNAT 中定义的,则 BIG-IP 系统会将传入数据包的源 IP 地址转换为 SNAT 地址。
当 BIG-IP 系统将传入数据包的源 IP 地址转换为 SNAT 地址时,Web 服务器会将请求视为源自 SNAT 地址,而不是原始客户端 IP 地址。如果需要 Web 服务器记录请求的原始客户端 IP 地址,则 SNAT 地址转换行为可能会出现问题。
为避免记录 SNAT 地址,可以将 BIG-IP 系统配置为在 X-Forwarded-For (XFF) HTTP 标头中插入原始客户端 IP 地址,并将接收请求的 Web 服务器配置为记录标头中的客户端 IP 地址,而不是 SNAT 地址。
BIG-IP 系统仅插入一个 HTTP X-Forwarded-For 标头。如果请求中存在现有的 X-Forwarded-For 标头,则 BIG-IP 会将客户端 IP 地址附加到末尾。例如:
X-Forwarded-For: 192.0.2.1, 198.51.100.1X-转发对象:192.0.2.1、198.51.100.1
注意:在 BIG-IP 13.0.0 及更早版本中,如果请求中存在现有的 X-Forwarded-For 标头,系统会附加新的 X-Forwarded-For 标头。运行 BIG-IP 13.0.0 及更早版本时,对于需要单个 X-Forwarded-For 标头的应用程序,可以使用 iRule 而不是 HTTP 配置文件选项,将客户端 IP 地址附加到任何现有 X-Forwarded-For 标头的末尾。F5 DevCentral iRules 代码共享包含一个示例 iRule:X Forwarded For Single Header Insert。
注意:只有当客户端连接到配置了客户端 SSL 配置文件的 BIG-IP 虚拟服务器时,才能在 HTTPS 流量中插入 HTTP 标头。当 BIG-IP 系统终止 SSL 连接时,它可以访问未加密的 HTTP 数据。有关配置 SSL 虚拟服务器的信息,请参阅 BIG-IP 配置指南。有关如何查找 F5 产品手册的信息,请参阅K98133564:搜索 AskF5 和查找产品文档的提示。
2.1.1 插入 X-Forwarded-For HTTP 标头
若要将 BIG-IP 系统配置为在 X-Forwarded-For HTTP 标头中插入原始客户端 IP 地址,请使用以下方法之一:
在 HTTP 配置文件中启用 Insert X-Forwarded-For 选项
使用 iRule 将原始客户端 IP 地址插入 X-Forwarded-For HTTP 标头中
与所需的性能(例如验证 HTTP 1.x 事务的正确格式)相比,使用这两种方法对性能的影响应该很小。
- Log in to the Configuration utility.登录到 Configuration 实用程序。
- Go to Local Traffic > Profiles. 转到 Local Traffic > Profiles。
- For Services, select HTTP. 对于 Services (服务),选择 HTTP。
- Select Create. 选择 创建。
- Enter a name for the HTTP profile.输入 HTTP 配置文件的名称。
- Select the Insert X-Forwarded-For check box.选中 Insert X-Forwarded-For 复选框。
Note: Older versions of BIG-IP software may display the option as Insert XForwarded For instead of Insert X-Forwarded-For.注意:旧版本的 BIG-IP 软件可能会将选项显示为 Insert XForwarded For 而不是 Insert X-Forwarded-For。
- For Insert X-Forwarded-For, select Enabled.对于 Insert X-Forwarded-For(插入 X-Forwarded-For),选择 Enabled(已启用)。
- Select Finished. 选择 Finished (完成)。
You must now associate the new HTTP profile with the virtual server.现在,您必须将新的 HTTP 配置文件与虚拟服务器关联。详细步骤如下图:
这里存在一个问题,就是在服务器端抓包是可以看到客户端IP但是在日志记录上还是F5的服务IP。
2.1.2 使用 iRule 将原始客户端 IP 地址插入 X-Forwarded-For HTTP 标头
- Log in to the Configuration utility.登录到 Configuration 实用程序。
- Go to Local Traffic > iRules. 转到 iRules > 本地流量。
- Select Create. 选择 创建。
- Enter a name for the iRule. 输入 iRule 的名称。
- For Definition, enter the following iRule:对于“定义”,输入以下 iRule:
when HTTP_REQUEST { 当HTTP_REQUEST {HTTP::header insert X-Forwarded-For [IP::remote_addr]
HTTP::header 插入 X-Forwarded-For [IP::remote_addr]}
X-Forwarded-For 是一个常见的 HTTP 标头,可能是接收系统预期的 HTTP 标头。在提供的示例 iRule 中,您还可以使用自定义 HTTP 标头名称而不是通用的 X-Forwarded-For,以更好地识别 BIG-IP 系统插入的 HTTP 标头。使用自定义 X-Forwarded-For HTTP 报头名称可能需要在接收系统上进行自定义配置,以便能够使用自定义 HTTP 报头值信息。
为了提高安全性,您可以先删除自定义 X-Forwarded-For HTTP 标头(如果 HTTP 请求中存在),然后使用描述的 iRules 语法添加它。标头值在到达 BIG-IP 系统之前可能已经被修改。如果系统使用自定义 X-Forwarded-For HTTP 标头信息进行身份验证或允许列表(例如在 Web 应用程序防火墙中),则可能需要先删除自定义标头。有关安全注意事项的更多信息,请参阅 RFC7239 的 Security Considerations 部分。
6.Select Finished. 选择 Finished (完成)。
You must now associate the new iRule with the virtual server.
现在,您必须将新的 iRule 与虚拟服务器相关联。
2.2 Pool is a non-HTTP server
环境
- BIG-IP BIG-IP 协议
- NAT or SNAT is configured 配置了 NAT 或 SNAT
- SNAT's Origin is set to All IPv4 AddressesSNAT 的 Origin 设置为 All IPv4 Addresses
- NAT or SNAT's VLAN / Tunnel Traffic is set to AllNAT 或 SNAT 的 VLAN/隧道流量 (VLAN/隧道流量) 设置为 全部
- Virtual Server's Source Address Translation is NoneVirtual Server 的源地址转换为 None
操作
- Login to the Configuration Terminal.登录到 Configuration 终端。
- Navigate to Local Traffic > Pools > Pool List.导航到 本地流量 > 池 > 池列表。
- Click the Pool Name associate with the Virtual Server you want to disable NAT/SNAT.单击与要禁用 NAT/SNAT 的虚拟服务器关联的池名称。
- Change Configuration to Advanced. 将 Configuration (配置) 更改为 Advanced (高级)。
- Change Allow SNAT to No. 将 Allow SNAT 更改为 No。
- Change Allow NAT to No. 将 Allow NAT 更改为 No。
- Click Update. 单击 Update (更新)。
重要提示:禁用 NAT/SNAT 后,请确保池服务器能够将流量返回给 BIG-IP。如果流量返回到另一个网关,这将导致非对称路由问题。避免这种情况的一种方法是将面向内部的 BIG-IP 自身 IP 配置为池服务器的网关。
这里存在一个问题,当virual Pool中的server与self ip不在一个vlan时,设置gateway生效不了。
只有在同一个vlan的时候,gateway才生效,而且设置了gateway后过ssh就不通,需要单独添加路由。
参考文章:
https://my.f5.com/manage/s/article/K09202229
https://my.f5.com/manage/s/article/K47059113
https://my.f5.com/manage/s/article/K4816
相关文章:

F5中获取客户端ip地址(client ip)
当F5设备对其原始设置上的所有IP地址使用NAT时,连接到poo成员(nodes、backend servers)的出站连接将是NAT IP地址。 pool 成员(nodes、backend servers)将无法看到真实的客户端 ip地址,因为看到的是F5上的…...

Maven(生命周期、POM、模块化、聚合、依赖管理)详解
目录 Maven构建项目的生命周期 Maven的常用命令 POM 依赖管理 依赖导入 依赖范围设置 依赖版本维护 依赖传递 依赖冲突 解决依赖冲突的方法 使用maven提供的依赖调节原则 排除依赖,排除依赖的jar包 锁定版本 项目模块化 Maven项目的继承 Maven项目…...

电力场景绝缘子缺陷识别分割数据集labelme格式1099张3类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1099 标注数量(json文件个数):1099 标注类别数:3 标注类别名称:["brokenpart","brokeninsulator…...

【k8s集群应用】Kubernetes 容器编排系统
文章目录 Kubernetes 容器编排系统背景与发展Kubernetes 基本概念Kubernetes 集群架构与组件Kubernetes 核心组件Master 组件配置存储中心Node 组件 Kubernetes核心概念1. Pod2. Pod控制器3. Label与Label选择器4. Service5. Ingress6. Volume7. Name与Namespace K8S创建Pod资源…...

Unity3D仿星露谷物语开发2之工程初始化
1、依赖包安装 进入【Window -> Package Manager】 安装如下插件: 1)Cinemachine 它是一套专门控制Unity Camera的模块,适用于各种游戏场景中物体的移动变化,解决了许多关于摄像机间的复杂控制,混合,…...
Kafka篇之参数优化进而提高kafka集群性能
1. Kafka性能优化分类 Kafka集群的性能优化涉及多个方面,包括硬件资源、网络、配置文件参数等。 调优目标通常是为了提高吞吐量、减少延迟、提升稳定性和故障恢复能力。 以下是Kafka集群调优的常见策略,以及调优后的配置文件示例。 1. 硬件资源调优 C…...

关于SAP Router连接不稳定的改良
这个也是网上看来的,之前在用的时候也在想是不是建立一个长连接,就不至于断线。今天正好看到。 关于SAP Router连接不稳定的改良 我们在使用SAPRouter时经常会碰到断线,其发生原因有很多,如:网络不稳定、操作间隔时间…...
使用pygame做游戏(2):2048游戏的进一步改造,以失败告终
前言 受《Python树莓派编程从零开始》里的示例启发,我决定将上篇的2048游戏进行“面向对象化”改造。 这次除了要建立一些对象,还要能有移动效果,并能显示中文。 另外我还发现一个bug:方块放满了不代表输了,还要检查能…...

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

泷羽sec学习打卡-brupsuite7搭建IP炮台
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-IP炮台搭建 搭建炮台服务端安装zmap1、更新系统和安装基础依赖ÿ…...
使用Svelte构建轻量级应用详解
文章目录 前言一、为什么选择Svelte?二、快速上手Svelte三、理解Svelte的核心概念四、优化性能与用户体验五、案例研究:构建一个待办事项应用结语 前言 Svelte是一款新兴的前端框架,以其小巧的体积、高效的性能和直观的API赢得了开发者的青睐…...

Qt设置部件的阴影效果
QT中的比如QWidget,QLabel,QPushbutton,QCheckBox都可以设置阴影效果,就像这样: 以QWidget为例,开始尝试使用样式表的形式添加阴影,但没有效果,写法如下: QWidget#widget1::shadow{color: rgb…...
Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现
批量数据库服务器连接测试与数据汇总:Python实现方案 作为数据库服务器运维人员,我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案,可以帮助我们快速完成这些任务。 需求概述 从配置文件…...

vue响应式数据-修改对象的属性值,视图不更新
如图: 一:问题是: 我把数据处理后能console.log()打印出来,但是页面的内容不能同步的更新渲染; 二:要求: 在数组循环列表里面,我点击单个的item按钮时,需要实时加载进度…...

【OpenCV计算机视觉】图像处理——平滑
本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 编辑(2) 高斯噪声 &a…...

C#编程报错- “ComboBox”是“...ComboBox”和“...ComboBox”之间的不明确的引用
1、问题描述 在学习使用C#中的Winform平台编写一个串口助手程序时, 在编写一个更新ComboBox列表是遇到了问题,出错的代码是 2、报错信息 CS1503 参数 2: 无法从“System.Windows.Forms.ComboBox”转换为“System.Windows.Forms.ComboBox” CS1503 …...

JAVA:访问者模式(Visitor Pattern)的技术指南
1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...

YashanDB共享集群产品能力观测:细节足见功底
本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成,主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试,并分享了测试环境和测试结论。 年初,基于某些商业…...

【Linux】—简单实现一个shell(myshell)
大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦! 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客&…...
@FeignClient用于Nacos微服务间的接口调用
依赖:<!-- spring-boot启动依赖 --> <!-- 提供者 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- openFeign --> <…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...