当前位置: 首页 > news >正文

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 事务的正确格式)相比,使用这两种方法对性能的影响应该很小。

  1. Log in to the Configuration utility.登录到 Configuration 实用程序。
  2. Go to Local Traffic > Profiles. 转到 Local Traffic > Profiles
  3. For Services, select HTTP. 对于 Services (服务),选择 HTTP。
  4. Select Create. 选择 创建
  5. Enter a name for the HTTP profile.输入 HTTP 配置文件的名称。
  6. 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

  7. For Insert X-Forwarded-For, select Enabled.对于 Insert X-Forwarded-For(插入 X-Forwarded-For),选择 Enabled(已启用)。
  8. 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 标头
  1. Log in to the Configuration utility.登录到 Configuration 实用程序。
  2. Go to Local Traffic > iRules. 转到 iRules > 本地流量
  3. Select Create. 选择 创建
  4. Enter a name for the iRule. 输入 iRule 的名称。
  5. 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

操作

  1. Login to the Configuration Terminal.登录到 Configuration 终端
  2. Navigate to Local Traffic > Pools > Pool List.导航到 本地流量 > 池 > 池列表
  3. Click the Pool Name associate with the Virtual Server you want to disable NAT/SNAT.单击与要禁用 NAT/SNAT 的虚拟服务器关联的池名称
  4. Change Configuration to Advanced. 将 Configuration (配置) 更改为 Advanced (高级)。
  5. Change Allow SNAT to No. 将 Allow SNAT 更改为 No
  6. Change Allow NAT to No. 将 Allow NAT 更改为 No
  7. 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的模块,适用于各种游戏场景中物体的移动变化,解决了许多关于摄像机间的复杂控制,混合&#xff0c…...

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、更新系统和安装基础依赖&#xff…...

使用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微服务间的接口调用

依赖&#xff1a;<!-- spring-boot启动依赖 --> <!-- 提供者 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- openFeign --> <…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...