当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