04-DNS透明代理配置
本章节下载: 04-DNS透明代理配置 (527.63 KB)
目 录
在企业租用多条出口链路的场景中,DNS透明代理技术可以解决由于客户端的DNS服务器地址配置不均导致的出口流量分配不均的问题。
如图1-1所示,企业内网用户可以通过运营商ISP 1的链路Link 1和ISP 2的链路Link 2分别访问提供相同网络服务的外网服务器External server A和External server B。企业内网用户通过域名访问外网服务器时,内网用户的所有DNS请求报文会发往同一DNS服务器。DNS服务器收到DNS请求报文后,将其解析为同一运营商网络内外网服务器的IP地址,这将使内网用户的所有流量都通过一条链路转发,导致一条链路拥塞,而其他链路闲置。
DNS透明代理功能可以有效解决由于客户端DNS服务器的配置导致流量分配不均的问题。通过DNS透明代理功能可以使DNS请求报文发往不同运营商网络内的DNS服务器,从而使内网用户访问外网服务器的流量较为均匀地分配到多条链路上,提高流量转发效率,提升服务质量;可以避免出现一条链路拥塞而其他链路闲置的情况;也可以在某条链路出现故障时,使用其他链路来访问外网服务器,避免因链路故障导致访问失败。
图1-1 DNS透明代理原理图
DNS透明代理功能是通过改变DNS请求报文的目的地址实现的。具体工作流程如图1-2所示。
图1-2 DNS透明代理工作流程图
DNS透明代理工作流程简述如表1-1所示。
表1-1 DNS透明代理工作流程简述
步骤 |
描述 |
源IP地址 |
目的IP地址 |
(1) |
内网用户向设备发送DNS请求报文 |
Host's IP |
DNS server A's IP |
(2) |
设备收到DNS请求报文后根据调度算法选出应将此请求分发给哪台DNS服务器 |
- |
- |
(3) |
设备将DNS请求报文的目的IP地址修改为选定的DNS服务器的IP地址 |
Host's IP |
DNS server B's IP |
(4) |
DNS服务器接收并处理DNS请求报文,返回DNS应答报文 |
DNS server B's IP |
Host's IP |
(5) |
设备收到DNS应答报文后,将其源IP地址修改为DNS请求报文中的目的IP地址 |
DNS server A's IP |
Host's IP |
(6) |
将目的地址转换后的DNS应答报文转发给内网用户 |
DNS server A's IP |
Host's IP |
(6) |
内网用户根据DNS应答报文中的IP地址访问外网服务器 |
Host's IP |
Web server B's IP |
(7) |
外网服务器应答内网用户 |
DNS server B's IP |
Host's IP |
负载均衡设备通过改变DNS请求报文的目的地址控制访问流量在多条链路上的转发,为内网用户访问外网服务器选择最佳链路。
Transparent DNS proxy |
DNS透明代理 |
DNS server pool |
DNS服务器池 |
DNS server |
DNS服务器 |
Link |
链路 |
LB class |
负载均衡类 |
LB action |
负载均衡动作 |
LB policy |
负载均衡策略 |
如图1-3所示,负载均衡设备上包括以下要素:
· DNS透明代理:只有当DNS请求的端口号匹配DNS透明代理的端口号时,负载均衡设备才对收到的DNS请求报文进行DNS透明代理。
· DNS服务器池:DNS服务器的集合。
· DNS服务器:处理用户DNS请求报文的实体。
· 链路:运营商提供的实体链路。
· 负载均衡类:将报文分类,以便对不同类型的报文执行不同的负载均衡动作。
· 负载均衡动作:制定丢弃、转发或修改报文的具体行为。
· 负载均衡策略:将负载均衡类和负载均衡动作关联起来就构成了负载均衡策略。负载均衡策略可被DNS透明代理引用。
当收到DNS请求的目的地址和端口号均匹配DNS透明代理的IP地址和端口号时,负载均衡设备会对DNS请求报文进行DNS透明代理。首先在DNS透明代理中查找关联的DNS服务器池。再依据池中配置的调度算法选出应将DNS请求分发给哪台DNS服务器。负载均衡设备将选定DNS服务器的IP地址作为目的地址发送DNS请求报文,DNS服务器接收并处理DNS请求报文,将其解析为同网络内外网服务器的IP地址,并返回DNS应答报文。内网用户收到应答报文后,就可以访问该外网服务器了。
负载均衡设备根据DNS服务器池的调度算法,计算出处理用户DNS请求的DNS服务器。设备支持以下几种调度算法:
将DNS请求报文随机分发给某台DNS服务器。经过一段时间后,各个实服务器的连接数大致相同。
随机算法适用于DNS服务器性能相近,每条流的负载大致相同的场景。
用户可根据DNS服务器性能的不同,为其分配不同的权值。加权轮转算法根据权值的大小将DNS请求依次分发给每台DNS服务器。
例如,DNS服务器Server A和Server B的权值为2和1,按照加权轮转调度算法,负载均衡设备会连续分配两条DNS请求给Server A,再分配DNS请求给Server B。
该算法适用于服务器业务处理能力不同,而每一条会话对服务器的负载大致相同的场景。
根据识别报文信息不同,DNS透明代理支持的哈希算法分为源IP哈希算法、源IP+端口哈希算法和目的IP哈希算法。
· 源IP哈希算法:对DNS请求的源IP地址进行哈希运算,依据生成的哈希值决定将DNS请求分发给哪台DNS服务器。该算法可实现将来自相同源IP地址的DNS请求发往同一台DNS服务器进行处理。
· 源IP及端口哈希算法:对DNS请求的源IP地址和端口号共同进行哈希运算,依据生成的哈希值决定将DNS请求发往哪台DNS服务器。该算法可实现将源IP地址和端口号均相同的DNS请求发往同一台DNS服务器进行处理。
· 目的IP哈希算法:对DNS请求的目的IP地址进行哈希运算,依据生成的哈希值决定将DNS请求发往哪台DNS服务器。该算法可实现将目的IP地址相同的DNS请求发往同一台DNS服务器进行处理。
根据DNS服务器的权值与剩余带宽乘积后的比例把DNS请求分发给每台DNS服务器。当剩余带宽相同时,该算法等价于加权轮转算法;当DNS服务器权值相同时,总是将用户请求分发给剩余带宽最大的链路所对应的DNS服务器;当DNS服务器权值和剩余带宽均不相同时,两者共同决定DNS服务器的调度。
例如,对于DNS服务器A和DNS服务器B对应的链路分别为lk1和lk2,如果其链路剩余带宽分别为150kbps和250kbps,而DNS服务器的权值分别为5和6,最终DNS服务器A和DNS服务器B的请求流量分配比例为150×5:250×6,即1:2。
总是将DNS请求分发给处于空闲状态且剩余带宽最大的链路所对应的DNS服务器。
例如,DNS服务器A和DNS服务器B对应的链路分别为lk1和lk2,链路lk1最大带宽1000Mbps,链路lk2最大带宽500Mbps,当请求流量1000Mbps,则链路lk1分750Mbps,链路lk2分250Mbps,剩余带宽各剩250Mbps。
将负载均衡类和动作关联起来就构成了负载均衡策略。通过负载均衡策略,用户可以为匹配特定规则的报文指定执行的负载均衡动作,从而实现更加灵活的负载均衡。
管理员可以在一个负载均衡策略中指定多条匹配规则,设备会按照配置顺序进行匹配。
· 当匹配方式为匹配任意一条规则时,与某条匹配规则匹配成功就执行调度动作,否则继续匹配下一条匹配规则,若所有匹配规则均未匹配成功,则不执行调度动作。
· 当匹配方式为匹配所有规则时,仅当所有规则都匹配成功时,才会执行调度动作,否则不执行调度动作。
对于规则匹配成功的报文,设备会为其执行指定的负载均衡动作,动作分为两大类:
· 转发类动作:确定是否转发以及如何转发报文。如果没有配置转发类动作,报文将被丢弃处理。
· 修改类动作:对报文执行一些修改行为。修改类动作应配合转发类动作使用,否则修改后的报文终将被丢弃。
如果用户想对报文进行丢弃处理,则可在创建负载均衡动作后,不为其指定任何上述动作。
持续性组的作用是根据某持续性方法将具有一定相关性的会话都分配给同一DNS服务器处理,这个分配规则就称为持续性表项。在一个会话中,当其首包通过持续性方法选择了同一DNS服务器之后,后续包都会沿用这个选择结果,减少了调度算法的重复运算,提升了转发效率。
持续性组的详细处理流程如下:
(1) 当设备首次收到具有某种特征的请求时,会根据调度算法将请求分发给某个DNS服务器。同时根据管理员配置的持续性方法生成持续性表项。
(2) 在持续性表项老化之前,若设备再次收到具有相同特征的请求,不会再根据调度算法进行计算,而是根据已生成的持续性表项,选择对应的DNS服务器进行转发。
健康检测功能可以对链路和DNS服务器进行周期性检测,保证其能够提供有效的服务。负载均衡设备主动向链路和DNS服务器发送探测报文,实时探测链路和DNS服务器的状态,避免将流量分配给故障的链路和DNS服务器,导致服务中断。
如图1-4所示,当探测到DNS服务器和对应的链路的状态均为正常时,设备根据调度算法将请求流量依次分配给每个DNS服务器(以DNS服务器权值相同的加权轮转算法为例)。
当探测到某DNS服务器发生故障时,设备立即停止向其分配流量,并将流量调度给其他处于正常状态的DNS服务器。
如图1-5所示,当探测到某个DNS服务器发生故障时,设备立即停止向该来那DNS服务器发送流量,并将流量调度给其他处于正常状态的DNS服务器,该DNS服务器对应链路的健康检测也为正常状态。
图1-5 健康检测示意图(DNS服务器故障状态)
如图1-6所示,当探测到某条链路发生故障时,就算该链路对应的DNS服务器处于正常状态,设备也会立即停止向该链路对应的DNS服务器发送流量,并将流量调度给其他处于正常状态的链路所对应的DNS服务器,该DNS服务器健康检测也为正常状态。
一段时间后,若故障的DNS服务器和链路状态恢复正常,设备会修改该DNS服务器和链路的健康检测状态,使对应的DNS服务器重新参与调度。
健康检测功能通过NQA探测模板实现。有关NQA探测模板的详细介绍,请参见“网络管理和监控配置指导”中的“NQA”。
本功能与域名解析模块的DNS源地址透明代理功能互斥,不允许同时配置。有关DNS源地址透明代理功能,请参见“三层技术-IP业务配置指导”的“域名解析”。
DNS透明代理功能配置任务如下:
(1) 配置DNS透明代理
(2) 配置DNS服务器池
(3) 配置DNS服务器池的调度算法
(4) 配置链路
(5) (可选)配置负载均衡策略
a. 配置负载均衡类
b. 配置负载均衡动作
c. 配置负载均衡策略
(6) (可选)配置持续性组
(7) (可选)配置负载均衡日志功能
通过配置DNS透明代理,负载均衡可以对匹配上DNS透明代理的DNS请求报文进行负载均衡处理。
配置DNS透明代理需要指定DNS服务池或引用负载均衡策略,否则匹配上DNS透明代理的报文将被丢弃。
如果同时指定DNS服务器池和引用负载均衡策略,报文会被优先交给负载均衡策略处理,当负载均衡策略无法处理时才交给DNS服务器池处理。
DNS透明代理配置任务如下:
(1) 创建DNS透明代理
(3) 配置报文处理策略
请至少选择其中一项进行配置:
¡ 引用负载均衡策略
(4) (可选)指定DNS透明代理所属的VPN实例
(5) (可选)开启带宽繁忙保护功能
(6) (可选)配置热备份功能
(7) (可选)引用脚本文件
(8) 开启DNS透明代理功能
(1) 进入系统视图。
system-view
(2) 创建DNS透明代理,并进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name type udp
在同时配置DNS透明代理功能和服务器负载均衡功能的情况下,为了使DNS透明代理功能正常使用,请避免将DNS透明代理的IP地址和端口号与UDP类型的虚服务器配置为同一IP地址和端口号。
建议将DNS透明代理的IP地址配置为全0地址,即对所有的DNS请求报文均进行DNS透明代理处理。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 配置DNS透明代理的IP地址。
(IPv4网络)
ip address ipv4-address [ mask-length | mask ]
(IPv6网络)
ipv6 address ipv6-address [ prefix-length ]
缺省情况下,未配置DNS透明代理的IP地址。
(4) 配置DNS透明代理的端口号。
port port-number
缺省情况下,DNS透明代理的端口号为53。
DNS透明代理指定缺省DNS服务器池后,匹配DNS透明代理的流量通过DNS服务器池进行转发。如果配置了DNS服务器池对应的持续性组,DNS服务器池的详细处理流程如下:
(1) 当设备首次收到具有某种特征的用户请求时,会根据调度算法将请求分发给某台DNS服务器。同时根据管理员配置的持续性方法生成持续性表项。
(2) 在持续性表项老化之前,若设备再次收到具有相同特征的用户请求,不会再根据调度算法进行计算,而是根据已生成的持续性表项,选择对应的DNS服务器进行转发。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 指定DNS透明代理引用的缺省DNS服务器池。
default dns-server-pool pool-name [ sticky sticky-name ]
缺省情况下,未指定DNS透明代理引用的缺省DNS服务器池。
通过在DNS透明代理视图下引用负载均衡策略,能够细化DNS请求的粒度。根据策略中的负载均衡类,对不同的报文内容进行不同的负载均衡动作处理,从而有效地丰富了DNS透明代理的负载功能,实现对链路带宽资源的合理利用。有关负载均衡策略的详细配置,请参见“配置负载均衡策略”。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 指定DNS透明代理引用的负载均衡策略。
lb-policy policy-name
缺省情况下,DNS透明代理未引用负载均衡策略。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 指定DNS透明代理所属的VPN实例。
vpn-instance vpn-instance-name
缺省情况下,DNS透明代理所属的VPN实例为公网。
带宽繁忙保护功能就是对DNS服务器对应链路的带宽繁忙比进行限制。当流量超过某条链路的带宽繁忙比(当前带宽与最大带宽的百分比,有关链路的带宽繁忙比的详细配置,请参见“配置链路”)后,新建流量将不再向该链路分发,而原有流量仍由该链路继续分发。
开启带宽繁忙保护功能后,DNS透明代理设备选择DNS服务器时,会检查DNS服务器使用的链路的带宽繁忙比是否超过配置的带宽繁忙比,如果超出则不选择该DNS服务器。
当DNS服务器池中的所有DNS服务器对应的链路都达到了带宽繁忙比时,带宽繁忙保护功能自动失效;只要此DNS服务器池中有任何一个DNS服务器对应链路恢复到配置的带宽繁忙比例以下,则该DNS服务器重新参与调度,带宽繁忙保护功能自动生效。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 开启DNS服务器对应链路的带宽繁忙保护功能。
bandwidth busy-protection enable
缺省情况下,DNS服务器对应的链路带宽繁忙保护功能处于关闭状态。
配置热备份功能时,为达到主备切换时业务不中断的目的,需要在DNS透明代理下开启会话扩展信息备份功能和持续性信息备份功能。会话扩展信息备份功能主要备份负载均衡业务的会话表项;持续性信息备份功能主要备份持续性表项。
在开启DNS透明代理的持续性表项备份功能之前,请确保主用和备用设备上均不存在持续性表项。可以通过先开启持续性表项备份功能,再引用持续性组,保证备份前设备上不存在持续性表项。
若设备的配置发生以下变化,则设备会删除当前已有的持续性表项,后续流量将会重新触发生成新的持续性表项。
· 关闭持续性表项备份功能
· 持续性表项备份由组间备份切换为全局备份
· 持续性表项备份由全局备份切换为组间备份
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 开启DNS透明代理的会话扩展信息备份功能。
connection-sync enable
缺省情况下,DNS透明代理的会话扩展信息备份功能处于关闭状态。
(4) 开启DNS透明代理的持续性信息备份功能。
sticky-sync enable
缺省情况下,DNS透明代理的持续性信息备份功能处于关闭状态。
iShell是一种可扩展的脚本编程接口,通过在负载均衡业务处理过程中嵌入该接口,可以利用编程脚本实现对负载均衡业务的灵活控制。iShell采用Lua脚本语言,通过在DNS透明代理视图下引用Lua脚本文件,可对匹配DNS透明代理的业务处理进行定制化的处理,以满足各种特定的业务需求。
设备已经预置了部分事件和接口可供参考和引用,管理员可以在设备Web页面下载并查阅“iShell帮助文档”,以便于更好的理解与编写iShell脚本文件。
在引用脚本文件之前,请先使用FTP或TFTP方式将Lua脚本文件上传到设备任一文件系统的目录下。FTP、TFTP和文件系统管理的具体介绍请参见“基础配置指导”中的“FTP和TFTP”和“文件系统管理”。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 引用脚本文件。
ishell filename
缺省情况下,未引用脚本文件。
配置完DNS透明代理后,需要将其开启后才能进入工作状态。
(1) 进入系统视图。
system-view
(2) 进入DNS透明代理视图。
loadbalance dns-proxy dns-proxy-name
(3) 开启DNS透明代理功能。
service enable
缺省情况下,DNS透明代理功能处于关闭状态。
通过配置DNS服务池,可对具有相同或相似功能的DNS服务器进行统一管理。
(1) 进入系统视图。
system-view
(2) 创建DNS服务器池,并进入DNS服务器池视图。
loadbalance dns-server-pool pool-name
(3) (可选)配置DNS服务器池的描述信息。
description text
缺省情况下,未配置DNS服务器池的描述信息。
设备支持通过两种方式向DNS服务器池中添加成员:
· 在DNS服务器池视图下,通过本配置创建DNS服务器池成员或添加已存在的DNS服务器。
· 在DNS服务器视图下,指定其所属的DNS服务器池。具体配置请参见“创建DNS服务器并指定其所属DNS服务器池”。
本配置用来指定DNS服务器在DNS服务器池内的权值、调用优先级以及健康检测功能。基于DNS服务器池成员的调度算法会依据这些配置选出当前DNS服务器池中最优的DNS服务器。
通过为DNS服务器池成员配置健康检测方法,可以对DNS服务器池成员的状态和性能进行检测,保证其可用。健康检测方法通过引用NQA模板来配置。NQA模板的相关配置,请参见“网络管理和监控配置指导”中的“NQA”。
用户可在DNS服务器视图下只对当前DNS服务器进行配置,也可在DNS服务器池视图下对池内的所有DNS服务器进行配置,或者在DNS服务器池成员视图下只对当前DNS服务池成员进行配置,这三者的配置优先级依次递增。
DNS服务器的健康检测结果影响DNS服务器池成员的使用,DNS服务器池成员的健康检测结果不影响DNS服务器的使用。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器池视图。
loadbalance dns-server-pool pool-name
(3) 创建并添加DNS服务器池成员,并进入DNS服务器池成员视图。
dns-server dns-server-name port port-number
若指定名称的DNS服务器已存在,则本命令只是在DNS服务器池视图下添加已存在的DNS服务器。
(4) (可选)配置DNS服务器池成员的描述信息。
description text
缺省情况下,未配置DNS服务器池成员的描述信息。
(5) 配置DNS服务器池成员的权值。
weight weight-value
缺省情况下,DNS服务器池成员的权值为100。
(6) (可选)配置DNS服务器池成员的调用优先级。
priority priority
缺省情况下,DNS服务器池成员的调度优先级为4。
(7) (可选)配置DNS服务器池成员的健康检测功能,请依次进行如下配置。
a. 指定DNS服务器池成员的健康检测方法。
probe template-name
缺省情况下,未指定DNS服务器池成员的健康检测方法。
b. 配置DNS服务器池成员健康检测的成功条件。
success-criteria { all | at-least min-number }
缺省情况下,只有全部方法都通过检测才认为健康检测成功。
负载均衡设备根据DNS服务器池的调度算法,计算出处理用户DNS请求的DNS服务器。对于调度算法的详细介绍,请参见“调度算法”。
缺省情况下,DNS服务器池中仅优先级最高的DNS服务器参与调度。用户可通过本功能限制可被调度算法调用的DNS服务器数量:
· 如果调用优先级最高的可用DNS服务器数量小于min-number时,除了调用全部优先级最高的可用DNS服务器外,还会调用优先级次高的可用DNS服务器,直至调用的可用DNS服务器数量达到min-number,或者没有可用的DNS服务器可调用为止。
· 如果调用某一优先级的可用DNS服务器后数量大于max-number时,则只选用max-number个DNS服务器。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器池视图。
loadbalance dns-server-pool pool-name
(3) 配置DNS服务池的调度算法。
¡ predictor hash address { destination | source | source-ip-port } [ mask mask-length ] [ prefix prefix-length ]
¡ predictor { random | round-robin | { bandwidth | max-bandwidth } [ inbound | outbound ] }
缺省情况下,DNS服务器池的调度算法为加权轮转算法。
(4) 配置DNS服务器池可被调度算法调用的DNS服务器数量限制。
selected-server min min-number max max-number
缺省情况下,DNS服务器池中调用优先级最高的DNS服务器全部被调度算法调用。
通过健康检测可以对DNS服务器进行检测,保证其能够提供有效的服务。
用户可在DNS服务器视图下只对当前DNS服务器进行配置,也可在DNS服务器池视图下对池内的所有DNS服务器进行配置,或者在DNS服务器池成员视图下只对当前DNS服务池成员进行配置,这三者的配置优先级依次递增。
设备支持通过引用NQA模板进行健康检测。有关NQA模板的详细介绍,请参见“网络管理和监控配置指导”中的“NQA”。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器池视图。
loadbalance dns-server-pool pool-name
(3) 指定DNS服务器池的健康检测方法。
probe template-name
缺省情况下,未指定DNS服务器池的健康检测方法。
(4) 配置DNS服务器池健康检测的成功条件。
success-criteria { all | at-least min-number }
缺省情况下,只有全部方法都通过检测才认为健康检测成功。
通过配置DNS服务器,指定负载均衡设备上处理和响应DNS请求报文的实体。此处配置的DNS服务器对应于运营商网络内的DNS服务器。一个DNS服务器可以属于多个DNS服务器池,一个DNS服务器池也可以包含多个DNS服务器。
DNS服务器配置如下:
(2) 配置DNS服务器的IP地址
请选择以下一项进行配置:
(3) 指定DNS服务器所属的VPN实例
(4) 指定与DNS服务器关联的链路
(5) (可选)配置健康检测功能
(1) 进入系统视图。
system-view
(2) 创建DNS服务器,并进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) (可选)配置DNS服务器的描述信息。
description text
缺省情况下,DNS服务器未配置描述信息。
(4) 指定DNS服务器所属的DNS服务器池。
dns-server-pool pool-name
缺省情况下,未指定DNS服务器所属的DNS服务器池。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) 配置DNS服务器的IP地址。
(IPv4网络)
ip address ipv4-address
(IPv6网络)
ipv6 address ipv6-address
缺省情况下,未配置DNS服务器IP地址。
(4) 配置DNS服务器的端口号。
port port-number
缺省情况下,DNS服务器的端口号为0(表示继续使用原报文携带的端口号)。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) 指定DNS服务器所属的VPN实例。
vpn-instance vpn-instance-name
缺省情况下,DNS服务器所属的VPN实例为公网。
在出口链路使用PPPoE动态获取IP地址的应用场景下,建议通过本配置动态获取DNS服务器的IP地址。
配置本功能前,需要在链路视图下配置链路对应的出接口。否则不能获取到DNS服务器IP地址。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) 开启动态获取DNS服务器IP地址的功能。
auto-alloc address
缺省情况下,动态获取DNS服务器IP地址的功能处于关闭状态。
每台DNS服务器仅支持与一条链路相关联,同一条链路可以关联多台DNS服务器。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) 指定与DNS服务器关联的链路。
link link-name
缺省情况下,未指定与DNS服务器关联的链路。
通过健康检测可以对DNS服务器进行检测,保证其能够提供有效的服务。
用户可在DNS服务器视图下只对当前DNS服务器进行配置,也可在DNS服务器池视图下对池内的所有DNS服务器进行配置,或者在DNS服务器池成员视图下只对当前DNS服务池成员进行配置,这三者的配置优先级依次递增。
DNS服务器的健康检测结果影响DNS服务器池成员的使用,DNS服务器池成员的健康检测结果不影响DNS服务器的使用。
(1) 进入系统视图。
system-view
(2) 进入DNS服务器视图。
loadbalance dns-server dns-server-name
(3) 指定DNS服务器的健康检测方法。
probe template-name
缺省情况下,未指定DNS服务器的健康检测方法。
(4) 配置DNS服务器健康检测的成功条件。
success-criteria { all | at-least min-number }
缺省情况下,只有全部方法都通过检测才认为健康检测成功。
链路是运营商提供的实体链路。为了确保流量的正确引流,需要配置链路的下一跳IP地址或出接口:
· 通过在链路视图下配置通往外网方向的下一跳IP地址,实现对流量的引流。
· 配置链路对应的出接口,负载均衡设备可从指定接口动态获取链路通往外网的下一跳IP地址,确保负载均衡设备能够根据实际情况动态获取下一跳IP地址。适用于出口链路使用PPPoE动态获取IP地址的应用场景下。
通过为链路配置健康检测方法,可以对链路的质量、链路的状态等进行检测,保证其可用。链路的健康检测方法通过引用NQA模板来配置。NQA模板的相关配置,请参见“网络管理和监控配置指导”中的“NQA”。
链路的最大带宽是指链路所能够支持的最高数据传输速率,配置最大带宽可以对链路进行限速。
链路的最大期望带宽指的是链路预计可承载的上/下行流量带宽上限,所配置的最大期望带宽不仅用于繁忙保护功能,还用于带宽算法和最大带宽算法中剩余带宽的计算。
带宽繁忙比为当前链路实际带宽与配置的最大期望带宽的百分比值,若最大期望带宽配置为不受限,则使用其可设置的最大值进行计算。其中:
· 带宽繁忙比:用于界定链路是否处于繁忙状态,若访问某个链路的实际带宽与链路的最大期望带宽之比超过了该链路恶毒带宽繁忙比,则链路进入繁忙状态,不再参与调度。
· 带宽繁忙恢复比:用于界定链路是否解除繁忙状态,若链路流量的实际带宽与链路的最大期望带宽之比小于等于该链路的带宽繁忙恢复比,则链路解除繁忙状态,重新参与调度。
配置和修改链路的最大期望带宽、带宽繁忙比和带宽繁忙恢复比仅对新建流量(不包括匹配持续性表项的流量)生效,对已经存在的连接不生效。
在最大带宽算法和带带算法中,当没有配置链路最大期望带宽时,计算剩余带宽时会使用链路配置的最大带宽值。
(1) 进入系统视图。
system-view
(2) 创建链路,并进入链路视图。
loadbalance link link-name
(3) (可选)配置链路的描述信息。
description text
缺省情况下,未配置链路的描述信息。
(4) 链路的IP地址或出接口。请选择以下一项进行配置:
¡ 指定链路通往外网方向的下一跳IP地址。
(IPv4网络)
router ip ipv4-address
(IPv6网络)
router ipv6 ipv6-address
缺省情况下,未指定链路通往外网方向的下一跳IP地址。
¡ 配置链路对应的出接口。
router interface interface-type interface-number
缺省情况下,未配置链路对应的出接口。
(5) (可选)指定链路所属的VPN实例。
vpn-instance vpn-instance-name
缺省情况下,链路属于公网。
(6) (可选)配置链路的健康检测功能,请依次进行如下配置。
a. 指定链路的健康检测方法。
probe template-name
缺省情况下,未指定链路的健康检测方法。
b. 配置链路健康检测的成功条件。
success-criteria { all | at-least min-number }
缺省情况下,只有全部方法都通过检测才认为健康检测成功。
(7) (可选)配置链路所允许的最大带宽。
rate-limit bandwidth [ inbound | outbound ] bandwidth-value kbps
缺省情况下,链路所允许的最大带宽不受限制。
(8) (可选)配置链路的带宽繁忙比与最大期望带宽,请依次进行如下配置。
a. 配置链路的带宽繁忙比。
bandwidth [ inbound | outbound ] busy-rate busy-rate-number [ recovery recovery-rate-number ]
缺省情况下,链路的总带宽繁忙比为70。
b. 配置链路最大期望带宽。
max-bandwidth [ inbound | outbound ] bandwidth-value kbps
缺省情况下,链路最大期望带宽不受限制。
负载均衡类的作用是将报文分类,即通过匹配规则将报文按照一定条件进行匹配,以便将不同类型的报文在不同的负载均衡动作流程中处理。一个负载均衡类中最多允许创建65535条匹配规则。
如果指定编号或名称的ACL不存在,此匹配规则将不参与匹配。
(1) 进入系统视图。
system-view
(2) 创建DNS类型的负载均衡类,并进入负载均衡类视图。
loadbalance class class-name type dns [ match-all | match-any ]
创建负载均衡类时必须为其指定类型;而在进入已创建的负载均衡类视图时可以不指定类型,但若要指定类型,则必须与创建时的类型一致。
(3) (可选)配置负载均衡类的描述信息。
description text
缺省情况下,未配置负载均衡类的描述信息。
(4) 创建匹配规则。请至少选择以下一项进行配置:
¡ 创建嵌套类的匹配规则。
match [ match-id ] class class-name
¡ 创建源IP地址类型的匹配规则。
match [ match-id ] source { ip address ipv4-address [ mask-length | mask ] | ipv6 address ipv6-address [ prefix-length ] }
¡ 创建目的IP地址类型的匹配规则。
match [ match-id ] destination { ip address ipv4-address [ mask-length | mask ] | ipv6 address ipv6-address [ prefix-length ] }
¡ 创建ACL类型的匹配规则。
match [ match-id ] acl [ ipv6 ] { acl-number | name acl-name }
¡ 创建域名类型的匹配规则。
match [ match-id ] domain-name domain-name
缺省情况下,不存在匹配规则。
负载均衡动作可分为两大类:
· 转发类动作:确定是否转发以及如何转发报文。如果没有配置转发类动作,报文将被丢弃处理。
· 修改类动作:对报文执行一些修改行为。修改类动作应配合转发类动作使用,否则修改后的报文终将被丢弃。
如果用户想对报文进行丢弃处理,则可在创建负载均衡动作后,不为其指定任何上述动作。
在配置转发类动作时,配置报文的转发模式为转发、指定指导转发的DNS服务器池、和配置跳过当前DNS透明代理两两互斥。当配置了其中一条后,其他的配置将被自动取消。
负载均衡动作配置如下:
(1) 创建负载均衡动作
(2) (可选)配置转发类动作
请从配置报文的转发模式为转发、指定指导转发的DNS服务器池和配置跳过当前DNS透明代理中选择一项进行配置。
¡ (可选)配置查找可用DNS服务器失败时继续匹配下一条引用规则
¡ (可选)配置繁忙处理方式为继续匹配下一条引用规则
(3) (可选)配置修改类动作
(1) 进入系统视图。
system-view
(2) 创建DNS类型的负载均衡动作,并进入负载均衡动作视图。
loadbalance action action-name type dns
创建负载均衡动作时必须为其指定类型;而在进入已创建的负载均衡动作视图时可以不指定类型,但若要指定类型,则必须与创建时的类型一致。
(3) (可选)配置负载均衡动作的描述信息。
description text
缺省情况下,未配置负载均衡动作的描述信息。
设备支持配置五种转发类动作,包括:
· 报文的转发模式为转发:当配置本功能的动作在负载均衡策略中被引用时,直接对匹配当前策略的报文进行转发。
· 指定指导转发的DNS服务器池:当配置本功能的动作在负载均衡策略中被引用时,可将报文转发到指定的DNS服务器池进行处理。
· 跳过当前DNS透明代理:配置报文的转发模式为跳过当前DNS透明代理,可使匹配了DNS透明代理的报文跳过当前DNS透明代理,并重新匹配DNS透明代理或虚服务器。
· 查找DNS服务器失败时继续匹配下一条引用规则:当配置该功能的动作在负载均衡策略中被引用时,在转发中根据该配置判断当前动作查找可用DNS服务器失败时,可继续顺序匹配策略中的下一条引用规则。
· 配置繁忙处理方式为继续匹配下一条引用规则:当该动作在负载均衡策略中被引用时,判断当前动作查找DNS服务器全部繁忙时,可继续顺序匹配策略中的下一条引用规则。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡动作视图。
loadbalance action action-name
(3) 配置报文的转发模式为转发。
forward all
缺省情况下,报文转发模式为丢弃。
本命令对于SIP类型的虚服务不生效。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡动作视图。
loadbalance action action-name
(3) 指定指导转发的DNS服务器池。
dns-server-pool pool-name
缺省情况下,未指定指导转发的DNS服务器池。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡动作视图。
loadbalance action action-name
(3) 配置报文的转发模式为跳过当前DNS透明代理。
skip current-dns-proxy
缺省情况下,报文的转发模式为丢弃。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡动作视图。
loadbalance action action-name
(3) 配置查找DNS服务器失败时继续匹配下一条引用规则。
fallback-action continue
缺省情况下,当前动作查找可用DNS服务器失败时,不再继续匹配下一条引用规则,直接丢弃报文。
(1) 进入系统视图。
system-view
(2) 进入负载均衡动作视图。
loadbalance action action-name
(3) 配置繁忙处理方式为继续匹配下一条引用规则。
busy-action continue
缺省情况下,繁忙处理方式为强制调度。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡动作视图。
loadbalance action action-name
(3) 配置发往DNS服务器的IP报文中的ToS字段。
set ip tos tos-number
缺省情况下,不改变发往DNS服务器的IP报文中的ToS字段。
负载均衡策略配置如下:
(1) 创建负载均衡策略
(2) 指定负载均衡动作
(3) 指定缺省负载均衡动作
(1) 进入系统视图。
system-view
(2) 创建DNS类型的负载均衡策略,并进入负载均衡策略视图。
loadbalance policy policy-name type dns
创建负载均衡策略时必须为其指定类型;而在进入已创建的负载均衡策略视图时可以不指定类型,但若要指定类型,则必须与创建时的类型一致。
(3) (可选)配置负载均衡策略的描述信息。
description text
缺省情况下,未配置负载均衡策略的描述信息。
DNS类型的负载均衡策略只能引用DNS类型的负载均衡类和负载均衡动作。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡策略视图。
loadbalance policy policy-name
(3) 为负载均衡类指定负载均衡动作。
class class-name [ insert-before before-class-name | insert-after [ after-class-name ] ] action action-name
缺省情况下,没有为负载均衡类指定负载均衡动作。
通过指定缺省负载均衡动作,可以为未匹配任何负载均衡类的报文指定其执行的缺省动作。
DNS类型的负载均衡策略只能引用DNS类型的负载均衡动作作为其缺省负载均衡动作。
(1) 进入系统视图。
system-view
(2) 进入DNS类型的负载均衡策略视图。
loadbalance policy policy-name
(3) 指定缺省负载均衡动作。
default-class action action-name
缺省情况下,未指定缺省负载均衡动作。
持续性组的作用是根据某持续性方法将具有一定相关性的会话都分配给同一台DNS服务器处理,这个分配规则就称为持续性表项。在一个会话中,当其首包通过持续性方法选择了一台DNS服务器之后,后续包都会延用这个选择结果。
(1) 进入系统视图。
system-view
(2) 创建地址端口类型的持续性组,并进入持续性组视图。
sticky-group group-name type address-port
创建持续性组时必须为其指定类型;而在进入已创建的持续性组视图时可以不指定类型,但若要指定类型,则必须与创建时的类型一致。
(3) (可选)配置持续性组的描述信息。
description text
缺省情况下,未配置持续性组的描述信息。
(4) 配置IP持续性方法。
(IPv4网络)
ip [ port ] { both | destination | source } [ mask mask-length ]
(IPv6网络)
ipv6 [ port ] { both | destination | source } [ prefix prefix-length ]
缺省情况下,未配置IP持续性方法。
(5) 配置持续性表项的超时时间。
timeout timeout-value
缺省情况下,持续性表项的超时时间为60秒。
负载均衡日志是为了满足网络管理员安全审计的需要,对负载均衡相关信息进行的记录,包括NAT日志和链路带宽繁忙日志。
通过开启负载均衡NAT日志功能,可以实现对源或目的地址进行过地址转换的连接信息进行记录,包括IP地址及端口的转换信息、用户的访问信息等。
通过开启负载均衡链路带宽繁忙日志功能,可以实现对所有链路的繁忙状态进行记录。
(1) 进入系统视图。
system-view
(2) 开启负载均衡NAT日志功能。
loadbalance log enable nat
缺省情况下,负载均衡NAT日志功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 开启负载均衡链路带宽繁忙日志功能。
loadbalance log enable bandwidth-busy
缺省情况下,负载均衡链路带宽繁忙日志功能处于关闭状态。
在完成上述配置后,在任意视图下执行display命令可以显示配置后DNS透明代理的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除DNS透明代理的统计信息。
表1-2 DNS透明代理显示和维护
配置 |
命令 |
|
显示DNS服务器池的信息 |
display loadbalance dns-server-pool [ brief | name pool-name ] |
|
显示DNS服务器的信息 |
display loadbalance dns-server [ brief | name dns-server-name ] |
|
显示DNS服务器池成员的信息 |
display loadbalance dns-server dns-server-pool dns-server-pool-name [ name dns-server-name port port-number ] |
|
显示DNS服务器的统计信息 |
display loadbalance dns-server statistics [ name dns-server-name ] [ slot slot-number ] |
|
显示DNS服务器池成员的统计信息 |
display loadbalance dns-server statistics dns-server-pool dns-server-pool-name [ name dns-server-name port port-number ] [ slot slot-number ] |
|
显示DNS透明代理的信息 |
display loadbalance dns-proxy [ brief | name dns-proxy-name ] |
|
显示DNS透明代理的统计信息 |
display loadbalance dns-proxy statistics [ name dns-proxy-name ] [ slot slot-number ] |
|
显示链路的信息 |
display loadbalance link [ brief | name link-name ] |
|
显示链路的统计信息 |
display loadbalance link statistics [ name link-name ] [ slot slot-number ] |
|
显示负载均衡类的信息 |
display loadbalance class [ name class-name ] |
|
显示负载均衡动作的信息 |
display loadbalance action [ name action-name ] |
|
显示负载均衡策略的信息 |
display loadbalance policy [ name policy-name ] |
|
显示DNS透明代理的持续性表项信息 |
display sticky dns-proxy [ dns-proxy-name dns-proxy-name ] [ class { class-name | default-class } | client-addr { ipv4-address | ipv6-address } | dns-server-addr { ipv4-address | ipv6-address } | dns-server-pool pool-name | dns-server-port port-number | key sticky-key ] * [ brief ] [ slot slot-number ] |
|
显示持续性组的信息 |
display sticky-group [ name group-name ] |
|
显示负载均衡热备份的统计信息 |
display loadbalance hot-backup statistics [ slot slot-number ] |
|
清除DNS服务器的统计信息 |
reset loadbalance dns-server statistics [ dns-server-name ] |
|
清除DNS服务器池成员的统计信息 |
reset loadbalance dns-server statistics dns-server-pool dns-server-pool-name [ name dns-server-name port port-number ] |
|
清除DNS透明代理的统计信息 |
reset loadbalance dns-proxy statistics [ dns-proxy-name ] |
|
清除链路的统计信息 |
reset loadbalance link statistics [ link-name ] |
|
清除负载均衡热备份的统计信息 |
reset loadbalance hot-backup statistics |
|
清除DNS透明代理的持续性表项信息 |
reset sticky dns-proxy [ dns-proxy-name dns-proxy-name ] [ class { class-name | default-class } | client-addr { ipv4-address | ipv6-address } | dns-server-addr { ipv4-address | ipv6-address } | dns-server-pool pool-name | dns-server-port port-number | key sticky-key ] * [ slot slot-number ] |
|
用户从两个运营商ISP 1和ISP 2处分别租用了带宽相同的两条链路Link 1和Link 2。属于ISP 1 DNS服务器的IP地址为10.1.2.100,属于ISP 2的DNS服务器的IP地址为20.1.2.100。
当内网用户通过域名www.example.com访问外网的Web服务器Web Server A和Web Server B时,使上网流量均匀地分布在不同的链路上。
图1-7 DNS透明代理基本组网配置组网图
(1) 配置接口IP地址
# 根据组网图中规划的信息,配置各接口的IP地址,具体配置步骤如下。
<Device> system-view
[Device] interface gigabitethernet 1/0/1
[Device-GigabitEthernet1/0/1] ip address 192.168.1.100 255.255.255.0
[Device-GigabitEthernet1/0/1] quit
请参考以上步骤配置其他接口的IP地址,具体配置步骤略。
(2) 配置接口加入安全域。
# 请根据组网图中规划的信息,将接口加入对应的安全域,具体配置步骤如下。
[Device] security-zone name trust
[Device-security-zone-Trust] import interface gigabitethernet 1/0/1
[Device-security-zone-Trust] quit
[Device] security-zone name untrust
[Device-security-zone-Untrust] import interface gigabitethernet 1/0/2
[Device-security-zone-Untrust] import interface gigabitethernet 1/0/3
[Device-security-zone-Untrust] quit
(3) 配置安全策略
配置安全策略放行Trust与Untrust安全域、Local与Untrust安全域之间的流量,用于用户访问外网服务器。
# 配置名称为lbrule1的安全策略规则,使用户可以访问外网服务器,具体配置步骤如下。
[Device] security-policy ip
[Device-security-policy-ip] rule name lbrule1
[Device-security-policy-ip-1-lbrule1] source-zone trust
[Device-security-policy-ip-1-lbrule1] destination-zone untrust
[Device-security-policy-ip-1-lbrule1] source-ip-subnet 192.168.1.0 255.255.255.0
[Device-security-policy-ip-1-lbrule1] action pass
[Device-security-policy-ip-1-lbrule1] quit
# 配置名称为lblocalout的安全策略规则,使Device可以向链路下一跳发送健康检测报文,具体配置步骤如下。
[Device-security-policy-ip] rule 2 name lblocalout
[Device-security-policy-ip-2-lblocalout] source-zone local
[Device-security-policy-ip-2-lblocalout] destination-zone untrust
[Device-security-policy-ip-2-lblocalout] destination-ip-subnet 10.1.1.0 255.255.255.0
[Device-security-policy-ip-2-lblocalout] destination-ip-subnet 20.1.1.0 255.255.255.0
[Device-security-policy-ip-2-lblocalout] action pass
[Device-security-policy-ip-2-lblocalout] quit
[Device-security-policy-ip] quit
(4) 配置链路
# 创建名为link1和link2的链路,指定链路link1出方向的下一跳IP地址为10.1.1.2,指定链路link2出方向的下一跳IP地址为20.1.1.2
[Device] loadbalance link link1
[Device-lb-link-link1] router ip 10.1.1.2
[Device-lb-link-link1] quit
[Device] loadbalance link link2
[Device-lb-link-link2] router ip 20.1.1.2
[Device-lb-link-link2] quit
(5) 配置DNS服务器池
# 创建名为dsp的DNS服务器池
[Device] loadbalance dns-server-pool dsp
[Device-lb-dspool-dsp] quit
(6) 配置DNS服务器
# 创建名为ds1的DNS服务器,配置其IPv4地址为10.1.2.100,所属DNS服务器池为dsp,并指定ds1对应的链路为link1。
[Device] loadbalance dns-server ds1
[Device-lb-ds-ds1] ip address 10.1.2.100
[Device-lb-ds-ds1] dns-server-pool dsp
[Device-lb-ds-ds1] link link1
[Device-lb-ds-ds1] quit
# 创建名为ds2的DNS服务器,配置其IPv4地址为20.1.2.100,所属DNS服务器池为dsp,并指定ds2对应的链路为link2。
[Device] loadbalance dns-server ds2
[Device-lb-ds-ds2] ip address 20.1.2.100
[Device-lb-ds-ds2] dns-server-pool dsp
[Device-lb-ds-ds2] link link2
[Device-lb-ds-ds2] quit
(7) 配置DNS透明代理
# 创建名为dns-proxy1的UDP类型的DNS透明代理,配置其IPv4地址为0.0.0.0,指定DNS服务器池为dsp,并开启DNS透明代理功能。
[Device] loadbalance dns-proxy dns-proxy1 type udp
[Device-lb-dp-udp-dp] ip address 0.0.0.0 0
[Device-lb-dp-udp-dp] default dns-server-pool dsp
[Device-lb-dp-udp-dp] service enable
[Device-lb-dp-udp-dp] quit
# 显示所有DNS服务器的简要信息。
[Device] display loadbalance dns-server brief
DNS server Address Port Link State DNS server pool
ds1 10.1.2.100 0 link1 Active dsp
ds2 20.1.2.100 0 link2 Active dsp
# 显示所有DNS服务器池的详细信息。
[Device] display loadbalance dns-server-pool
DNS server pool: dsp
Description:
Predictor: Round robin
Selected server: Disabled
Probe information:
Probe success criteria: All
Probe method:
Total DNS servers: 2
Active DNS servers: 2
DNS server list:
Name State Address port Link Weight Priority
ds1 Active 10.1.2.100 0 link1 100 4
ds2 Active 20.1.2.100 0 link2 100 4
# 显示所有DNS透明代理的详细信息。
[Device] display loadbalance dns-proxy
DNS proxy: dns-proxy1
Type: UDP
State: Active
Service state: Enabled
VPN instance:
IPv4 address: 0.0.0.0/0
IPv6 address: --
Port: 53
DNS server pool: dsp
Sticky:
LB policy:
Connection synchronization: Enabled
Sticky synchronization: Enabled
Bandwidth busy protection: Disabled
完成上述配置后,负载均衡设备可以将DNS请求报文均匀地分发到DNS Server A和DNS Server B上,从而将内网用户访问外网Web服务器的流量均匀地分配到Link 1和Link 2上。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!