简介
本文档介绍在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
相关信息