是否可以在cisco ios中实现一种基于策略的路由,根据主机头信息(http地址)将外部IP上的80端口请求转发到内部主机。
因此如果有人访问http://server1.com(外部 IP)它将请求转发到 internal_ip1,如果是http://server2.com它将请求转发到 internal_ip2
我非常清楚这涉及分析 HTTP 数据(应用程序级别),并且可以使用 ISA Server 或 Varnish 代理来实现这种情况。
但在思科上能做到这样的技巧吗?
答案1
因此如果有人访问http://server1.com(外部 IP)它将请求转发到 internal_ip1,如果是http://server2.com它将请求转发到 internal_ip2
我非常清楚这涉及分析 HTTP 数据(应用程序级别),并且可以使用 ISA Server 或 Varnish 代理来实现这种情况。
但在思科上能做到这样的技巧吗?
是的,但您必须在感兴趣的 HTTP 流量中重新标记 DSCP 位。下面我的解决方案使用 NBAR(基于网络的应用程序识别)在感兴趣的流量上重新标记 DSCP 位,并使用 PBR(基于策略的路由)根据上述标记进行路由。
要求:
- 路由器必须支持恩巴;通常这是基于 CPU 的路由器,例如 Cisco 1800/1900 系列。Cisco ASR 还支持 NBAR
- 路由器必须支持基于策略的路由
- 你不能使用数据保护协议AF12,或网络中任何其他地方的 AF13。
配置:
class-map match-all CLASSIFY_HTTP_01
match protocol http host *server1.com*
class-map match-all CLASSIFY_HTTP_02
match protocol http host *server2.com*
!
policy-map REMARK_HTTP
class CLASSIFY_HTTP_01
set dscp af12
class CLASSIFY_HTTP_02
set dscp af13
!
ip access-list extended AF12
permit ip any any dscp af12
!
ip access-list extended AF13
permit ip any any dscp af13
!
route-map PBR permit 10
match ip address AF12
! This is a next-hop leading to internal_ip1
set ip next-hop 192.0.2.129
match ip address AF13
! This is a next-hop leading to internal_ip2
set ip next-hop 192.0.2.130
!
interface FastEthernet0/1
description [All HTTP ingress to this interface]
ip address 192.0.2.2 255.255.255.252
ip policy route-map PBR
service-policy input REMARK_HTTP
尽管如此,很多时候,使用真正的 HTTP 负载平衡器(如 F5)来处理这种情况会更好。您可以强制路由器执行此操作,但这有点不自然。
答案2
该解决方案仅部分解决了问题,因为我没有提到我们使用 NAT。
因此,NBAR 通过外部接口上的服务策略检查所有入站数据包,并为它们分配 DSCP 位。
现在,问题是让这些数据包通过 NAT 转换为内部 IP。从原理上讲,我需要类似这样的内容:
nat inside source static tcp <internal_ip_1> 80 interface <outside_interface> 80 <if dscp bits = af13>
nat inside source static tcp <internal_ip_2> 80 interface <outside_interface> 80 <if dscp bits = af12>
答案3
除了原始答案之外,为了解决 NAT 问题,您应该能够使用以下行将服务策略分配给内部接口:
interface FastEthernet0/1
description Inside Interface
ip address 192.0.2.2 255.255.255.252
ip nat inside
ip policy route-map PBR
service-policy output REMARK_HTTP
我目前还无法测试这一点,但由于网络地址转换已经处理完毕,我想这应该可以正常工作。
抱歉挖出了旧帖子,但我有兴趣做与原始发帖人相同的事情,并想添加此内容以造福其他人。