配置DNS透明代理和全局选路策略实现上网流量的负载分担
介绍通过DNS透明代理和全局选路策略实现上网流量负载分担的配置举例。
组网需求
如图1所示,企业分别从ISP1和ISP2租用了一条链路,ISP1链路的带宽为100M,ISP2链路的带宽为50M。ISP1的DNS服务器地址为8.8.8.8和8.8.8.9,ISP2的DNS服务器地址为9.9.9.8和9.9.9.9。一般情况下,企业内网用户的客户端都会配置为一个相同的DNS服务器地址,此用例假设配置为10.2.0.70。
配置思路
通过在FW上配置DNS透明代理功能,可以使内网用户的DNS请求报文按照2:1的比例分配到ISP1与ISP2的DNS服务器上。DNS透明代理功能处理DNS请求报文时,使用出接口上绑定的DNS服务器地址替换报文的目的地址,出接口的选择需要利用智能选路功能,由于企业希望上网流量能够根据带宽比例(2:1)进行分配,所以智能选路的方式设置为根据链路带宽负载分担,本例中配置全局选路策略。为了保证上网流量不会绕道其他ISP,而是直接通过目的地址所在ISP网络到达Web服务器,需要配置ISP选路功能。
- 可选:配置健康检查功能,分别为ISP1和ISP2链路配置健康检查。
-
配置DNS透明代理功能。在出接口上绑定DNS服务器地址,配置DNS透明代理策略来指定做DNS透明代理的流量,并配置要排除的域名。
-
配置全局选路策略。配置智能选路方式为根据链路带宽负载分担,并指定FW和ISP1、ISP2网络直连的出接口作为智能选路成员接口。
本例着重介绍智能选路相关的配置,其余配置如NAT请根据实际组网进行配置。
此场景下流量是否能进行过载切换,依赖DNS透明代理的DNS解析结果。
操作步骤
- 可选:开启健康检查功能,并为ISP1和ISP2链路分别新建一个健康检查。
<FW> system-view [FW] healthcheck enable [FW] healthcheck name isp1_health [FW-healthcheck-isp1_health] destination 8.8.8.8 interface GigabitEthernet1/0/1 protocol dns [FW-healthcheck-isp1_health] destination 8.8.8.9 interface GigabitEthernet1/0/1 protocol dns [FW-healthcheck-isp1_health] quit [FW] healthcheck name isp2_health [FW-healthcheck-isp2_health] destination 9.9.9.8 interface GigabitEthernet1/0/5 protocol dns [FW-healthcheck-isp2_health] destination 9.9.9.9 interface GigabitEthernet1/0/5 protocol dns [FW-healthcheck-isp2_health] quit
DNS透明代理功能和智能选路一起配合使用且需要同时启用DNS透明代理的健康检查和智能选路接口下的健康检查时,智能选路接口下的健康检查探测目的地址需要配置为接口绑定的DNS服务器地址,探测协议配置为DNS,以确保两处健康检查结果一致,接口链路在正常状态下可以始终支持DNS代理,避免因为DNS请求失败导致业务访问失败。
如果健康检查配置完后,状态一直为down,请检查健康检查的配置。
- 配置接口的IP地址和网关地址,配置接口所在链路的带宽和过载保护阈值,并应用对应的健康检查。
[FW] interface GigabitEthernet 1/0/1 [FW-GigabitEthernet1/0/1] ip address 1.1.1.1 255.255.255.0 [FW-GigabitEthernet1/0/1] gateway 1.1.1.254 [FW-GigabitEthernet1/0/1] bandwidth ingress 100000 threshold 90 [FW-GigabitEthernet1/0/1] bandwidth egress 100000 threshold 90 [FW-GigabitEthernet1/0/1] healthcheck isp1_health [FW-GigabitEthernet1/0/1] quit [FW] interface GigabitEthernet 1/0/3 [FW-GigabitEthernet1/0/3] ip address 10.3.0.1 255.255.255.0 [FW-GigabitEthernet1/0/3] quit [FW] interface GigabitEthernet 1/0/5 [FW-GigabitEthernet1/0/5] ip address 2.2.2.2 255.255.255.0 [FW-GigabitEthernet1/0/5] gateway 2.2.2.254 [FW-GigabitEthernet1/0/5] bandwidth ingress 50000 threshold 90 [FW-GigabitEthernet1/0/5] bandwidth egress 50000 threshold 90 [FW-GigabitEthernet1/0/5] healthcheck isp2_health [FW-GigabitEthernet1/0/5] quit
- 上传ISP地址文件到FW,可以使用SFTP方式进行传输,导入的ISP地址文件固定存放在根目录下名称为isp的文件夹内,具体步骤略。
- 为ISP1和ISP2分别创建运营商名称isp1_ifgrp和isp2_ifgrp,并关联对应的ISP地址文件。
[FW] isp name isp1_ifgrp set filename isp1.csv [FW] isp name isp2_ifgrp set filename isp2.csv
- 为ISP1和ISP2分别新建一个ISP接口组,并将接口加入对应的ISP接口组,缺省下发对应的ISP路由。
[FW] interface-group 1 isp isp1_ifgrp [FW-interface-isp-group-1] add interface GigabitEthernet 1/0/1 [FW-interface-isp-group-1] quit [FW] interface-group 2 isp isp2_ifgrp [FW-interface-isp-group-2] add interface GigabitEthernet 1/0/5 [FW-interface-isp-group-2] quit
- 配置DNS透明代理功能。在出接口上绑定DNS服务器地址并启用健康检查,限定源地址为10.3.0.0/24网段的流量做DNS透明代理,并配置要排除的域名。
[FW] dns-transparent-policy [FW-policy-dns] dns transparent-proxy enable [FW-policy-dns] dns server bind interface GigabitEthernet 1/0/1 preferred 8.8.8.8 alternate 8.8.8.9 health-check enable [FW-policy-dns] dns server bind interface GigabitEthernet 1/0/5 preferred 9.9.9.8 alternate 9.9.9.9 health-check enable [FW-policy-dns] dns transparent-proxy exclude domain www.example.com server preferred 8.8.8.10 [FW-policy-dns] rule name abc [FW-policy-dns-rule-abc] action tpdns [FW-policy-dns-rule-abc] source-address 10.3.0.0 24 [FW-policy-dns-rule-abc] quit [FW-policy-dns] quit
- 配置全局选路策略,流量根据链路带宽负载分担。
[FW] multi-interface [FW-multi-inter] add interface GigabitEthernet 1/0/1 [FW-multi-inter] add interface GigabitEthernet 1/0/5 [FW-multi-inter] mode proportion-of-bandwidth [FW-multi-inter] quit
- 将接口加入安全区域。
[FW] firewall zone trust [FW-zone-trust] add interface GigabitEthernet 1/0/3 [FW-zone-trust] quit [FW] firewall zone untrust [FW-zone-untrust] add interface GigabitEthernet 1/0/1 [FW-zone-untrust] add interface GigabitEthernet 1/0/5 [FW-zone-untrust] quit
- 配置Local到Untrust区域的安全策略,允许FW向目的设备发送相应的健康检查探测报文。
对于V500R001C80之前的版本,需要在FW上配置对应的安全策略,允许FW向目的设备发送健康检查探测报文。对于V500R001C80及之后的版本,健康检查的探测报文不受安全策略控制,默认放行,无需配置相应安全策略。
[FW] security-policy [FW-policy-security] rule name policy_sec_local_untrust [FW-policy-security-rule-policy_sec_local_untrust] source-zone local [FW-policy-security-rule-policy_sec_local_untrust] destination-zone untrust [FW-policy-security-rule-policy_sec_local_untrust] destination-address 8.8.8.8 32 [FW-policy-security-rule-policy_sec_local_untrust] destination-address 8.8.8.9 32 [FW-policy-security-rule-policy_sec_local_untrust] destination-address 9.9.9.8 32 [FW-policy-security-rule-policy_sec_local_untrust] destination-address 9.9.9.9 32 [FW-policy-security-rule-policy_sec_local_untrust] service dns [FW-policy-security-rule-policy_sec_local_untrust] action permit [FW-policy-security-rule-policy_sec_local_untrust] quit
- 配置Trust到Untrust区域的安全策略,允许企业内网用户访问外网资源。假设内部用户网段为10.3.0.0/24。
[FW-policy-security] rule name policy_sec_trust_untrust [FW-policy-security-rule-policy_sec_trust_untrust] source-zone trust [FW-policy-security-rule-policy_sec_trust_untrust] destination-zone untrust [FW-policy-security-rule-policy_sec_trust_untrust] source-address 10.3.0.0 24 [FW-policy-security-rule-policy_sec_trust_untrust] action permit [FW-policy-security-rule-policy_sec_trust_untrust] quit [FW-policy-security] quit
配置脚本
# isp name isp1_ifgrp set filename isp1.csv isp name isp2_ifgrp set filename isp2.csv # healthcheck enable healthcheck name isp1_health destination 8.8.8.8 interface GigabitEthernet 1/0/1 protocol dns destination 8.8.8.9 interface GigabitEthernet 1/0/1 protocol dns healthcheck name isp2_health destination 9.9.9.8 interface GigabitEthernet 1/0/5 protocol dns destination 9.9.9.9 interface GigabitEthernet 1/0/5 protocol dns # interface GigabitEthernet 1/0/1 ip address 1.1.1.1 255.255.255.0 healthcheck isp1_health gateway 1.1.1.254 bandwidth ingress 100000 threshold 90 bandwidth egress 100000 threshold 90 # interface GigabitEthernet 1/0/3 ip address 10.3.0.1 255.255.255.0 # interface GigabitEthernet 1/0/5 ip address 2.2.2.2 255.255.255.0 healthcheck isp2_health gateway 2.2.2.254 bandwidth ingress 50000 threshold 90 bandwidth egress 50000 threshold 90 # firewall zone trust set priority 85 add interface GigabitEthernet 1/0/3 # firewall zone untrust set priority 5 add interface GigabitEthernet 1/0/1 add interface GigabitEthernet 1/0/5 # interface-group 1 isp isp1_ifgrp add interface GigabitEthernet 1/0/1 # interface-group 2 isp isp2_ifgrp add interface GigabitEthernet 1/0/5 # multi-interface mode proportion-of-bandwidth add interface GigabitEthernet 1/0/1 add interface GigabitEthernet 1/0/5 # security-policy rule name policy_sec_local_untrust source-zone local destination-zone untrust destination-address 8.8.8.8 mask 255.255.255.255 destination-address 8.8.8.9 mask 255.255.255.255 destination-address 9.9.9.8 mask 255.255.255.255 destination-address 9.9.9.9 mask 255.255.255.255 service dns action permit rule name policy_sec_trust_untrust source-zone trust destination-zone untrust source-address 10.3.0.0 mask 255.255.255.0 action permit # dns-transparent-policy rule name abc source-address 10.3.0.0 mask 255.255.255.0 action tpdns dns transparent-proxy enable dns server bind interface GigabitEthernet 1/0/1 preferred 8.8.8.8 alternate 8.8.8.9 health-check enable dns server bind interface GigabitEthernet 1/0/5 preferred 9.9.9.8 alternate 9.9.9.9 health-check enable dns transparent-proxy exclude domain www.example.com server preferred 8.8.8.10 mode based-on-multi-interface # return
