目录

简介

先决条件

要求

使用的组件

Bash外壳DNS配置

Bash Shell DNS验证

步骤1.检验是否使用有效的网络命名空间进行测试。

步骤2.使用测试主机的主机名检验DNS解析的功能。

/etc/resolv.conf文件格式

Examples

相关信息

简介

本文档介绍在Bash中配置DNS服务器以允许将DNS主机名解析为IP地址的步骤。

Cisco Nexus 3000和9000系列设备允许通过Bash(Bourne-Again SHell)访问NX-OS的底层Linux系统。 Bash通过Linux环境实现系统管理和监控。有关NX-OS上的Bash的详细信息，请参阅Cisco Nexus 9000系列NX-OS可编程性指南的Bash一章。

在Bash外壳中执行正常任务时，可能需要将人性化域名转换为数字IP地址。这些任务包括使用curl或wget实用程序从Web服务器访问资源或使用docker pull命令下载Docker映像。

先决条件

要求

本文档不限于特定的软件和硬件版本。

注意：将在您的Cisco Nexus设备上启用Bash外壳。有关启用Bash外壳的说明，请参阅《Cisco Nexus 9000系列NX-OS可编程性指南》中Bash章节的“访问Bash”部分。

使用的组件

本文档中的信息基于以下软件和硬件版本：

- 从NX-OS版本6.1(2)I2(1)开始的Nexus 9000平台

- 从NX-OS版本6.0(2)U4(1)开始的Nexus 3000平台

本文档中的信息在特定实验室环境设备上创建。本文档中使用的所有设备最初均采用原始（默认）配置。如果您使用的是真实网络，请确保您已经了解所有命令的潜在影响。

Bash外壳DNS配置

通过Bash外壳访问的Linux环境使用/etc/resolv.conf文件存储DNS配置，与大多数其他类似Unix的操作系统类似。

1.通过运行bash sudo su — 命令以根用户身份登录到Bash shell。

Nexus# run bash sudo su -

root@Nexus#whoami

root

2.查看/etc/resolv.conf文件的当前内容。在本例中，文件为空。

root@Nexus#cat /etc/resolv.conf

root@Nexus#

3.打开/etc/resolv.conf文件，使用vi文本编辑器进行编辑。

root@Nexus#vi /etc/resolv.conf

4.按i键进入INSERT模式，然后输入所需的配置。有关/etc/resolv.conf文件中配置格式的详细信息，请参阅本文档的/etc/resolv.conf文件格式部分。

5.修改文件后，按ESC键退出“插入”模式，然后输入:x以保存对文件的所有更改并将其关闭。

Bash Shell DNS验证

对Bash外壳的DNS配置进行更改后，验证更改是否成功解析域名。测试域名解析的最简单方法是使用ping实用程序，将域主机名作为目标。本文档演示如何使用测试主机test.cisco.com和DNS服务器192.168.2.1和192.168.2.2验证有效的DNS配置。

步骤1.检验是否使用有效的网络命名空间进行测试。

默认情况下，除非另有说明，否则Bash shell使用默认网络命名空间。网络命名空间在逻辑上等同于NX-OS VRF，命令ip nets显示Bash外壳可用的命名空间列表，如下所示：

root@Nexus#ip netns

EXAMPLE-VRF (id: 2)

management (id: 1)

default (id: 0)

要测试的有效网络命名空间是具有与在/etc/resolv.conf文件中配置的DNS名称服务器的IP连接，以及与测试主机解析为的IP地址的IP连接的网络命名空间。

可以使用ip netns exec {namespace} {desired-command}命令在命名空间{namespace}中执行命令{desired-command}。或者，可以使用ip netns exec {namespace} bash命令在特定命名空间的上下文中执行Bash外壳。在本例中使用前一种方法，经验证管理命名空间具有与test.cisco.com主机（即192.168.2.100）和两台DNS服务器（192.168.2.1和192.160）拥有的IP地址的IP连接8.2.2)。

root@Nexus#ip netns exec management ping 192.168.2.100 -c 5

PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.

64 bytes from 192.168.2.100: icmp_seq=1 ttl=59 time=0.277 ms

64 bytes from 192.168.2.100: icmp_seq=2 ttl=59 time=0.284 ms

64 bytes from 192.168.2.100: icmp_seq=3 ttl=59 time=0.280 ms

64 bytes from 192.168.2.100: icmp_seq=4 ttl=59 time=0.274 ms

64 bytes from 192.168.2.100: icmp_seq=5 ttl=59 time=0.297 ms

--- 192.168.2.100 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4001ms

rtt min/avg/max/mdev = 0.274/0.282/0.297/0.017 ms

root@Nexus#ip netns exec management ping 192.168.2.1 -c 5

PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.

64 bytes from 192.168.2.1: icmp_seq=1 ttl=59 time=0.277 ms

64 bytes from 192.168.2.1: icmp_seq=2 ttl=59 time=0.284 ms

64 bytes from 192.168.2.1: icmp_seq=3 ttl=59 time=0.280 ms

64 bytes from 192.168.2.1: icmp_seq=4 ttl=59 time=0.274 ms

64 bytes from 192.168.2.1: icmp_seq=5 ttl=59 time=0.297 ms

--- 192.168.2.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4001ms

rtt min/avg/max/mdev = 0.274/0.282/0.297/0.017 ms

root@Nexus#ip netns exec management ping 192.168.2.2 -c 5

PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.

64 bytes from 192.168.2.2: icmp_seq=1 ttl=59 time=0.277 ms

64 bytes from 192.168.2.2: icmp_seq=2 ttl=59 time=0.284 ms

64 bytes from 192.168.2.2: icmp_seq=3 ttl=59 time=0.280 ms

64 bytes from 192.168.2.2: icmp_seq=4 ttl=59 time=0.274 ms

64 bytes from 192.168.2.2: icmp_seq=5 ttl=59 time=0.297 ms

--- 192.168.2.2 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4001ms

rtt min/avg/max/mdev = 0.274/0.282/0.297/0.017 ms

步骤2.使用测试主机的主机名检验DNS解析的功能。

将ping实用程序与测试主机主机名的目标一起使用。如果从测试主机收到ICMP应答，且ICMP应答中包含的IP地址是我们期望的主机名解析到的IP地址，则DNS解析确认在Bash外壳内工作。

此示例演示了如何在管理命名空间中使用ping实用程序来验证正确的DNS解析。注意test.cisco.com的域主机名如何解析为192.168.2.100，这是我们期望该主机名解析为的IP地址。

root@Nexus#ip netns exec management ping test.cisco.com -c 5

PING test.cisco.com (192.168.2.100) 56(84) bytes of data.

64 bytes from test.cisco.com (192.168.2.100): icmp_seq=1 ttl=59 time=0.617 ms

64 bytes from test.cisco.com (192.168.2.100): icmp_seq=2 ttl=59 time=0.341 ms

64 bytes from test.cisco.com (192.168.2.100): icmp_seq=3 ttl=59 time=0.310 ms

64 bytes from test.cisco.com (192.168.2.100): icmp_seq=4 ttl=59 time=0.379 ms

64 bytes from test.cisco.com (192.168.2.100): icmp_seq=5 ttl=59 time=0.296 ms

--- test.cisco.com ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4004ms

rtt min/avg/max/mdev = 0.296/0.388/0.617/0.119 ms

如果用于测试DNS解析的命名空间具有到Internet的IP连接，则除了内部域名外，还可以ping cisco.com以验证是否可以解析外部域名。如果需要对公共Web服务器使用curl和wget等实用程序，则这一点尤为重要。此处的示例演示了如何在管理命名空间（具有与Internet的IP连接）中使用ping实用程序来验证正确的外部DNS解析。

root@Nexus#ip netns exec management ping cisco.com -c 5

PING cisco.com (72.163.4.161) 56(84) bytes of data.

64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=1 ttl=239 time=29.2 ms

64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=2 ttl=239 time=29.2 ms

64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=3 ttl=239 time=29.3 ms

64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=4 ttl=239 time=29.2 ms

64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=5 ttl=239 time=29.2 ms

--- cisco.com ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4005ms

rtt min/avg/max/mdev = 29.261/29.283/29.335/0.111 ms

/etc/resolv.conf文件格式

此处介绍一些常见配置参数。确保修改所有配置参数以匹配您的环境。

- 域{domain-name.tld} — 定义默认域名{domain-name.tld}，以附加到不以句点结尾的主机名。/etc/resolv.conf文件中只能有一个域条目。

- 搜索{domain-name-1.tld} [domain-name-2.tld...] — 定义一个以空格分隔的域名列表({domain-name-1.tld}，或者[domain-name-2.tld])，以附加到主机名。

注意：域和搜索条目是互斥的 — 一次只能使用一个。如果两个条目都包含在/etc/resolv.conf文件中，则使用文件中最后出现的条目。

- 名称服务器{address-1} — 为DNS解析请求转发到的DNS服务器定义IP地址{address-1}。单个文件中允许多个名称服务器条目，最多允许三个。

Examples

本示例显示/etc/resolv.conf文件的内容，其中环境的默认域为cisco.com，且环境中的DNS服务器的IP地址为192.168.2.1和192.168.2.2。在此场景中，如果Bash外壳需要解析主机名为cisco.com的设备的IP地址foo，它会将cisco.com附加到主机名的末尾，以便主机的完全限定域名(FDQN)是foo.cisco.com。

domain cisco.com

nameserver 192.168.2.1

nameserver 192.168.2.2

以下示例显示/etc/resolv.conf文件的内容，其中cisco.com或bar.com域名可用于解析DNS主机名。环境中的DNS服务器的IP地址为192.168.2.1和192.168.2.2。在此场景中，如果Bash外壳需要解析主机名为foo的设备的IP地址，它会先尝试解析foo.cisco.com，然后尝试解析foo 如果foo.cisco.com的解析失败，则选择“.bar.com”。

search cisco.com bar.com

nameserver 192.168.2.1

nameserver 192.168.2.2

相关信息

- Cisco Nexus 9000系列NX-OS可编程性指南，版本9.x

- Cisco Nexus 9000系列NX-OS可编程性指南，版本7.x

- Cisco Nexus 9000系列NX-OS可编程性指南，版本6.x

- Cisco Nexus 3000系列NX-OS可编程性指南，版本9.x

- Cisco Nexus 3000系列NX-OS可编程性指南，版本7.x

- Cisco Nexus 3000系列NX-OS可编程性指南，版本6.x

- Cisco Nexus 3500系列NX-OS可编程性指南，版本9.x

- Cisco Nexus 3500系列NX-OS可编程性指南，版本7.x

- Cisco Nexus 3500系列NX-OS可编程性指南，版本6.x

- Cisco Nexus 3600系列NX-OS可编程性指南，版本9.x

- Cisco Nexus 3600系列NX-OS可编程性指南，版本7.x

- 借助思科开放式NX-OS实现可编程性和自动化