DNS ALG
域名系统 (DNS) 应用层网关 (ALG) 服务可处理与查找域名并将域名转换为 IP 地址相关的数据。ALG 通常在端口 53 上运行。ALG 监控 DNS 查询和回复数据包,并且仅支持 UDP 流量。
DNS ALG 概述
DNS 应用层网关 (ALG) 服务提供应用程序级网关,可与 DNS 客户端配合使用。DNS ALG 服务允许客户端访问不同网络中的多个 DNS 服务器,并提供往返这些服务器的路由。它还支持 DNS 查询和响应数据包的灵活地址转换。这些功能允许 DNS 客户端从网络客户端上的单个 DNS 服务器实例查询许多不同的域。
DNS 服务器通过 UDP 端口 53 侦听来自 DNS 解析器的传入查询。解析器通过发送 DNS 查询和处理 DNS 响应与 DNS 服务器通信。
DNS ALG 的默认端口为端口 53。
DNS ALG 执行以下功能:
监控 DNS 查询和回复数据包,并在收到 DNS 回复时关闭会话
执行 DNS 诊断
执行 IPv4 和 IPv6 地址转换
域名系统 (DNS) 最初设计用于支持对静态配置的数据库进行查询,预计数据会发生变化。
除了 DNS 标准之外,现在还提供动态 DNS (DDNS) 支持。DNS 和 DDNS 之间的主要区别在于标头部分的消息格式和更新消息。
与 DNS 消息相比,DDNS 消息的处理方式不同。消息解析为 DDNS 重写。DDNS 在消息的查询部分中执行 NAT 和 NAT-PT,DNS 在消息的响应部分执行 NAT 和 NAT-PT。
另请参阅
示例:配置 DNS ALG
此示例说明如何配置 DNS ALG,以使用瞻博网络设备上的静态 NAT 池通过 DNS 流量。
要求
开始之前:
为所有 IP 地址配置静态 NAT 池。
了解 ALG for DNS 背后的概念。请参阅 DNS ALG 概述。
概述
在此示例中,DNS 的 ALG 配置为监控和允许客户端与位于瞻博网络设备对等端的服务器之间交换 DNS 流量。
此示例说明如何配置静态 NAT 池和规则集,并将 DNS ALG 与策略相关联。
配置
配置 NAT 静态池和规则集
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 CLI 中 [edit]
,然后从配置模式进入 commit
。
set security nat static rule-set rs1 from zone untrust set security nat static rule-set rs1 rule r1 match destination-address 203.0.113.100 set security nat static rule-set rs1 rule r1 then static-nat prefix 192.0.2.100 set security policies from-zone untrust to-zone trust policy u2t match source-address any set security policies from-zone untrust to-zone trust policy u2t match destination-address any set security policies from-zone untrust to-zone trust policy u2t match application junos-dns-udp set security policies from-zone untrust to-zone trust policy u2t then permit
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置静态 NAT 池:
创建 NAT 静态规则集。
[edit] user@host# set security nat static rule-set rs1 from zone untrust user@host# set security nat static rule-set rs1 rule r1 match destination-address 203.0.113.100 user@host# set security nat static rule-set rs1 rule r1 then static-nat prefix 192.0.2.100
使用策略关联 DNS 应用程序。
[edit] user@host# set security policies from-zone untrust to-zone trust policy u2t match source-address any user@host# set security policies from-zone untrust to-zone trust policy u2t match destination-address any user@host# set security policies from-zone untrust to-zone trust policy u2t match application junos-dns-udp user@host# set security policies from-zone untrust to-zone trust policy u2t then permit
结果
在配置模式下,输入命令以确认 show security nat
您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明,以便进行更正。
user@host# show security nat static { rule-set rs1 { from zone untrust; rule r1 { match { destination-address 203.0.113.100; } then { static-nat { prefix { 192.0.2.100; } } } } } }
[edit] user@host# show security policies from-zone untrust to-zone trust { policy u2t { match { source-address any; destination-address any; application [ junos-dns-udp]; } then { permit; } } } default-policy { permit-all; }
完成设备配置后,请从配置模式进入 commit
。
验证
要确认配置工作正常,请执行以下任务:
验证 DNS ALG
目的
验证 DNS ALG 是否已启用。
行动
在操作模式下,输入 show security alg status
命令。
user@host> show security alg status ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Disabled SQL : Disabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 DNS ALG 已启用。
验证 DNS ALG 安全流会话
目的
验证 ALG 安全流会话是否已启用。
行动
在操作模式下,输入 show security flow session application dns extensive
命令。
user@host> show security flow session application dns extensive Session ID: 24088, Status: Normal Flags: 0x40/0x0/0x2/0x2000103 Policy name: unt2tru/6 Source NAT pool: Null, Application: junos-dns-udp/16 Dynamic application: junos:UNKNOWN, Encryption: Unknown Application traffic control rule-set: INVALID, Rule: INVALID Maximum timeout: 60, Current timeout: 56 Session State: Valid Start time: 658866, Duration: 10 In: 192.0.2.0/38926 --> 198.51.100.0/53;udp, Conn Tag: 0x0, Interface: ge-0/0/3.0, Session token: 0xa, Flag: 0x621 Route: 0x110010, Gateway: 192.0.2.0, Tunnel: 0 Port sequence: 0, FIN sequence: 0, FIN state: 0, Pkts: 2, Bytes: 116 Out: 198.51.100.0/53 --> 192.0.2.0/38926;udp, Conn Tag: 0x0, Interface: ge-0/0/2.0, Session token: 0x9, Flag: 0x620 Route: 0x100010, Gateway: 198.51.100.0, Tunnel: 0 Port sequence: 0, FIN sequence: 0,
意义
输出显示有一个使用 DNS ALG 的活动流。
了解 DNS 和 DDNS 的诊治
Junos OS 支持用于 ALG 的域名系统 (DNS)。如果 DNS 标志指示数据包是回复消息,则 DNS ALG 会监控 DNS 查询和回复数据包,并关闭会话。要配置 DNS ALG,请在 edit security alg dns
层级使用语句 [edit security alg]
。
DNS 在路由类中提供名称到地址的映射,而网络地址转换 (NAT) 则尝试在同一路由类不同地址域内的主机之间提供透明路由。因此,NAT 可能会引发一些 DNS 问题,DNG ALG 必须通过称为 DNS 修正的过程来处理。
同样的诊断功能也适用于动态域名系统 (DDNS)。对于 NAT 模式下的 DDNS,您还可以在 DDNS 更新中执行 IP 转换。
为了解决 NAT 引发的问题,DNS 和 DDNS ALG 功能已得到扩展,以支持静态 NAT,从而可以通过 DNS 修复解决问题。
必须在设备上启用 DNS ALG,才能执行 DNS 诊断。在 SRX3400、SRX3600、SRX4600、SRX5600 和 SRX5800 设备上启用 DNS ALG 后,DNS 博士默认处于启用状态。(平台是否支持取决于安装中的 Junos OS 版本。)
修复和修复过程分两部分进行:
-
Packet sanity check
对于 DNS 数据包,DNS ALG 检查字段是问题、答案、授权和其他信息。如果问题数超过 1、域名超过 255 字节或标签长度超过 63 个字节,DNS ALG 将丢弃数据包。
对于 DDNS 数据包,DNS ALG 检查字段为区域、先决条件、更新和其他数据。如果区域数超过 1、域名超过 255 字节或标签长度超过 63 个字节,DNS ALG 将丢弃数据包。
对于 DNS 和 DDNS,DNS ALG 会丢弃不符合标准的数据包。
-
NAT
图 2 显示了 DNS 如何将专用地址转换为公共地址。
当 external.com 中的主机 X 希望通过 DNS 解析主机 A 的地址时,如果 DNS ALG 不支持 NAT,则采用专用地址,如 172.19.1.10,这对主机 X 无效。专用地址通过 DNS ALG 转换为公共地址 10,131.108.10。
图 3 显示了 DNS 如何将公共地址转换为专用地址。
当 private.com 中的主机 A 希望通过 DNS 解析主机 B 的地址时,如果 DNS ALG 不支持 NAT,它会从 external.com DNS 服务器获取一个公共地址,例如 10.131.108.8。如果主机 A 将流量发送至公共地址为 10.131.108.8 的主机 B,这对专用域中的主机 B 无效。因此,DNS 查询 A-记录中的公共地址将通过 DNS ALG 转换为专用地址 172.19.2.1。
DNS ALG 可以在单个 DNS 回复中转换前 32 条 A 记录。不处理前 32 条记录之后的 A 记录。另请注意,DNS ALG 支持 IPv4 和 IPv6 地址,并且不支持 VPN 隧道。
禁用 DNS 和 DDNS 诊断
必须在设备上启用 DNS ALG,才能执行 DNS 和 DDNS 诊断。在设备上启用 DNS ALG 后,DNS 和 DDNS 医生功能默认处于启用状态。您可以使用 CLI 禁用 DNS 和 DDNS 诊断。
要禁用 DNS 和 DDNS 诊断:
-
通过指定
none
配置选项禁用所有诊断功能。此命令将禁用所有诊断功能。
user@host#
set security alg dns doctoring none
-
禁用 NAT 功能,并通过指定
sanity-check
配置选项保留健全性检查功能。此选项将禁用 NAT 功能并保留健全性检查功能。
user@host#
set security alg dns doctoring sanity-check
-
如果完成设备配置,请提交配置。
-
要验证配置,请使用 vty 命令 show usp algs dns stats。