本章介绍管理 TCP/IP 网络的任务。本章包含以下主题:
这些任务假设您的站点拥有正常运行的 TCP/IP 网络,该网络仅启用了 IPv4 或启用了双栈 IPv4/IPv6。如果希望在站点实施 IPv6 但尚未实现,请参阅以下各章以获取更多信息:
下表列出了进行初始配置后的其他网络管理任务,例如显示网络信息。此表中包含对各项任务要完成的工作的说明,以及当前文档中详细介绍用于执行任务的特定步骤的章节。
任务 |
说明 |
参考 |
---|---|---|
显示有关接口的配置信息。 |
确定系统上每个接口的当前配置。 | |
显示指定的接口地址。 |
确定为本地系统上所有接口指定的地址。 | |
按协议显示统计信息。 |
监视特定系统上网络协议的性能。 | |
显示网络状态。 |
通过显示所有套接字和路由表项来监视系统。输出包括 IPv4 的 inet 地址族和 IPv6 的 inet6 地址族。 | |
显示网络接口的状态。 |
监视网络接口的性能,这对于解决传输问题非常有用。 | |
显示包传输状态。 |
监视包在网络上传送时的状态。 | |
控制与 IPv6 相关的命令的显示输出。 |
控制 ping、netstat、 ifconfig 和 traceroute 命令的输出。创建名为 inet_type 的文件。在此文件中设置 DEFAULT_IP 变量。 | |
监视网络通信。 |
使用 snoop 命令显示所有 IP 包。 | |
跟踪网络路由器已知的所有路由。 |
使用 traceroute 命令显示所有路由。 |
可以使用 ifconfig 命令为接口手动指定 IP 地址并手动配置接口参数。此外,Oracle Solaris : 启动脚本还运行 ifconfig 来配置伪接口,例如 6to4 隧道端点。
本书介绍多个使用通用 ifconfig 命令的各种选项的任务。有关此命令及其选项和变量的完整说明,请参阅 ifconfig(1M) 手册页。ifconfig 的基本语法如下所示:
ifconfig interface [protocol-family]
使用 ifconfig 命令可确定有关特定系统的接口的基本信息。例如,执行简单的 ifconfig 查询便可获取以下信息:
系统上所有接口的设备名称
为接口指定的所有 IPv4 地址以及所有 IPv6 地址(如果适用)
当前是否已配置这些接口
以下过程说明了如何使用 ifconfig 命令来获取有关系统接口的基本配置信息。
在本地主机上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
获取有关特定接口的信息。
# ifconfig interface |
状态行
ifconfig 命令输出中的第一行包括接口名称以及当前与接口关联的状态标志。此外,状态行还包括为特定接口配置的最大传输单元 (maximum transmission unit, MTU) 以及索引号。使用状态行可确定接口的当前状态。
IP 地址信息行
ifconfig 输出的第二行包括为接口配置的 IPv4 地址或 IPv6 地址。对于 IPv4 地址,还显示已配置的网络掩码和广播地址。
MAC 地址行
以超级用户或类似角色的身份运行 ifconfig 命令时,ifconfig 输出包含第三行。对于 IPv4 地址,第三行显示了为接口指定的 MAC 地址(以太网层地址)。对于 IPv6 地址,输出中的第三行显示了 IPv6 in.ndpd 守护进程根据 MAC 地址生成的链路本地地址。
以下示例说明了如何使用 ifconfig 命令来获取有关特定主机上的 eri 接口的信息。
# ifconfig eri eri0: flags=863<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 1 inet 10.0.0.112 netmask ffffff80 broadcast 10.8.48.127 ether 8:0:20:b9:4c:54 |
下表描述 ifconfig 查询中的变量信息,同时说明如何在屏幕上显示变量以及提供的信息类型。使用上述输出作为示例。
变量 |
屏幕输出 |
说明 |
---|---|---|
接口名称 |
eri0 |
指示已在 ifconfig 命令中请求其状态的接口的设备名称。 |
接口状态 |
flags=863<UP |
显示接口的状态,包括当前与接口关联的所有标志。可以据此确定接口当前已初始化 (UP) 还是未初始化 (DOWN)。 |
广播状态 |
BROADCAST |
指示接口支持 IPv4 广播。 |
传输状态 |
RUNNING |
指示系统正在通过接口传输包。 |
多点传送状态 |
MULTICAST, IPv4 |
显示接口支持多点传送传输。示例中的接口支持 IPv4 多点传送传输。 |
最大传输单元 |
mtu 1500 |
显示此接口的最大传输大小为 1500 个八位字节。 |
IP 地址 |
inet 10.0.0.112 |
显示为接口指定的 IPv4 或 IPv6 地址。示例接口 eri0 的 IPv4 地址为 10.0.0.112。 |
网络掩码 |
netmask ffffff80 |
显示特定接口的 IPv4 网络掩码。请注意,IPv6 地址不使用网络掩码。 |
MAC 地址 |
ether 8:0:20:b9:4c:54 |
显示接口的以太网层地址。 |
路由器和多宿主主机具有多个接口,并且通常为每个接口指定多个 IP 地址。可以使用 ifconfig 命令来显示为系统接口指定的所有地址,还可以使用 ifconfig 命令仅显示指定的 IPv4 或 IPv6 地址。要另外显示接口的 MAC 地址,您必须首先以超级用户或相应角色的身份登录。
有关 ifconfig 命令的更多信息,请参见 ifconfig(1M) 手册页。
在本地系统上,承担网络管理角色或成为超级用户。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
获取有关所有接口的信息。
您可以使用 ifconfig -a 命令的变体执行以下操作:
查看系统上所有接口的所有地址。
# ifconfig -a |
查看为系统接口指定的所有 IPv4 地址。
# ifconfig -a4 |
如果本地系统启用了 IPv6,则显示为系统接口指定的所有 IPv6 地址。
ifconfig -a6 |
此示例显示只具有一个主网络接口 (qfe0) 的主机的地址项。但是,ifconfig 输出显示当前为 qfe0 指定的三种形式的地址: 回送 (lo0)、IPv4 (inet) 和 IPv6 (inet6)。请注意,在输出的 IPv6 部分中,接口 qfe0 的行显示本地链路 IPv6 地址。qfe0 的第二个地址显示在 qfe0:1 行中。
% ifconfig -a lo0: flags=1000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 qfe0: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 10.0.0.112 netmask ffffff80 broadcast 10.0.0.127 ether 8:0:20:b9:4c:54 lo0: flags=2000849 <UP,RUNNING,MULTICAST,IPv6> mtu 8252 index 1 inet6 ::1/128 qfe0: flags=2000841 <UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2 ether 8:0:20:b9:4c:54 inet6 fe80::a00:20ff:feb9:4c54/10 qfe0:1: flags=2080841 <UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2 inet6 2001:db8:3c4d:48:a00:20ff:feb9:4c54/64 |
此示例显示了为多宿主主机配置的 IPv4 地址。不需要以超级用户的身份登录便可运行此形式的 ifconfig 命令。
% ifconfig -a4 lo0: flags=1000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 qfe0: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 10.0.0.112 netmask ffffff80 broadcast 10.0.0.127 ether 8:0:20:b9:4c:54 qfe1: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 10.0.0.118 netmask ffffff80 broadcast 10.0.0.127 ether 8:0:20:6f:5e:17 |
此示例仅显示了为特定主机配置的 IPv6 地址。不需要以超级用户的身份登录,便可运行此形式的 ifconfig 命令。
% ifconfig -a6 lo0: flags=2000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1 inet6 ::1/128 qfe0: flags=2000841 <UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2 ether 8:0:20:b9:4c:54 inet6 fe80::a00:20ff:feb9:4c54/10 qfe0:1: flags=2080841 <UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2 inet6 2001:db8:3c4d:48:a00:20ff:feb9:4c54/64 |
此 ifconfig 输出显示了为主机的单个接口指定的以下三种形式的 IPv6 地址:
IPv6 回送地址。
为主网络接口指定的链路本地地址。
IPv6 地址,包括子网前缀。输出中的 ADDRCONF 一词指示此地址是由主机自动配置的。
netstat 命令生成包含网络状态和协议统计信息的显示内容。可以通过表格形式显示 TCP、SCTP(流控制传输协议)和 UDP(用户数据报协议)端点的状态,还可以显示路由表信息和接口信息。
netstat 可显示各种类型的网络数据,具体取决于所选择的命令行选项。这些显示信息对于系统管理非常有价值。netstat 的基本语法如下所示:
netstat [-m] [-n] [-s] [-i | -r] [-f address-family]
本节介绍最常用的 netstat 命令选项。有关所有 netstat 选项的详细说明,请参阅 netstat(1M) 手册页。
netstat -s 选项显示 UDP、TCP、SCTP、ICMP 和 IP 协议的统计信息。
可以使用 Oracle Solaris : 用户帐户获取 netstat 命令的输出。
以下示例显示了 netstat -s 命令的输出。某些输出信息已被截断。输出可以指明存在协议问题的区域。例如,ICMPv4 和 ICMPv6 的统计信息可以指明 ICMP 协议发现错误的位置。
RAWIP rawipInDatagrams = 4701 rawipInErrors = 0 rawipInCksumErrs = 0 rawipOutDatagrams = 4 rawipOutErrors = 0 UDP udpInDatagrams = 10091 udpInErrors = 0 udpOutDatagrams = 15772 udpOutErrors = 0 TCP tcpRtoAlgorithm = 4 tcpRtoMin = 400 tcpRtoMax = 60000 tcpMaxConn = -1 . . tcpListenDrop = 0 tcpListenDropQ0 = 0 tcpHalfOpenDrop = 0 tcpOutSackRetrans = 0 IPv4 ipForwarding = 2 ipDefaultTTL = 255 ipInReceives =300182 ipInHdrErrors = 0 ipInAddrErrors = 0 ipInCksumErrs = 0 . . ipsecInFailed = 0 ipInIPv6 = 0 ipOutIPv6 = 3 ipOutSwitchIPv6 = 0 IPv6 ipv6Forwarding = 2 ipv6DefaultHopLimit = 255 ipv6InReceives = 13986 ipv6InHdrErrors = 0 ipv6InTooBigErrors = 0 ipv6InNoRoutes = 0 . . rawipInOverflows = 0 ipv6InIPv4 = 0 ipv6OutIPv4 = 0 ipv6OutSwitchIPv4 = 0 ICMPv4 icmpInMsgs = 43593 icmpInErrors = 0 icmpInCksumErrs = 0 icmpInUnknowns = 0 . . icmpInOverflows = 0 ICMPv6 icmp6InMsgs = 13612 icmp6InErrors = 0 icmp6InDestUnreachs = 0 icmp6InAdminProhibs = 0 . . icmp6OutGroupQueries= 0 icmp6OutGroupResps = 2 icmp6OutGroupReds = 0 IGMP: 12287 messages received 0 messages received with too few bytes 0 messages received with bad checksum 12287 membership queries received SCTP sctpRtoAlgorithm = vanj sctpRtoMin = 1000 sctpRtoMax = 60000 sctpRtoInitial = 3000 sctpTimHearBeatProbe = 2 sctpTimHearBeatDrop = 0 sctpListenDrop = 0 sctpInClosed = 0 |
可以通过 netstat 命令显示传输协议的状态。有关详细信息,请参阅 netstat(1M) 手册页。
显示系统上 TCP 和 SCTP 传输协议的状态。
$ netstat |
显示系统上特定传输协议的状态。
$ netstat -P transport-protocol |
transport-protocol 变量的值为 tcp、sctp 或 udp。
此示例显示基本 netstat 命令的输出。请注意,仅显示与 IPv4 有关的信息。
$ netstat TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State ----------------- -------------------- ----- ------ ----- ------ ------- lhost-1.login abc.def.local.Sun.COM.980 49640 0 49640 0 ESTABLISHED lhost-1.login ghi.jkl.local.Sun.COM.1020 49640 1 49640 0 ESTABLISHED remhost-1.1014 mno.pqr.remote.Sun.COM.nfsd 49640 0 49640 0 TIME_WAIT SCTP: Local Address Remote Address Swind Send-Q Rwind Recv-Q StrsI/O State ---------------- -------------- ----- ------ ------ ------ ------ ------- *.echo 0.0.0.0 0 0 102400 0 128/1 LISTEN *.discard 0.0.0.0 0 0 102400 0 128/1 LISTEN *.9001 0.0.0.0 0 0 102400 0 128/1 LISTEN |
此示例显示指定了 netstat 的 -P 选项时的结果。
$ netstat -P tcp TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State ----------------- -------------------- ----- ------ ----- ------ ------- lhost-1.login abc.def.local.Sun.COM.980 49640 0 49640 0 ESTABLISHED lhost.login ghi.jkl.local.Sun.COM.1020 49640 1 49640 0 ESTABLISHED remhost.1014 mno.pqr.remote.Sun.COM.nfsd 49640 0 49640 0 TIME_WAIT TCP: IPv6 Local Address Remote Address Swind Send-Q Rwind Recv-Q State If ---------------- ---------------------- ------ ----- ------ ----------- ----- localhost.38983 localhost.32777 49152 0 49152 0 ESTABLISHED localhost.32777 localhost.38983 49152 0 49152 0 ESTABLISHED localhost.38986 localhost.38980 49152 0 49152 0 ESTABLISHED |
netstat 命令的 i 选项显示本地系统上配置的网络接口的状态。可以使用此选项确定系统在每个网络中传输和接收的包数。
下面的示例显示通过主机接口的 IPv4 和 IPv6 包流的状态。
例如,每次客户机尝试引导时,显示的服务器输入包计数 (Ipkts) 都会增加,而输出包计数 (Opkts) 保持不变。这种情况表示服务器正在查看来自客户机的引导请求包。但是,服务器却不知道对它们做出响应。这种混乱可能是由 hosts、ipnodes 或 ethers 数据库中的错误地址引起的。
但是,如果输入包计数在一段时间内保持不变,则说明计算机根本未查看包。这种情况说明出现了其他类型的故障,如硬件问题。
Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue lo0 8232 loopback localhost 142 0 142 0 0 0 hme0 1500 host58 host58 1106302 0 52419 0 0 0 Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis lo0 8252 localhost localhost 142 0 142 0 0 hme0 1500 fe80::a00:20ff:feb9:4c54/10 fe80::a00:20ff:feb9:4c54 1106305 0 52422 0 0 |
使用 netstat 命令的 -a 选项,可以查看本地主机上套接字的状态。
netstat -a 命令的输出显示详细的统计信息。以下示例显示 netstat -a 典型输出的各部分信息。
UDP: IPv4 Local Address Remote Address State -------------------- -------------------- ------- *.bootpc Idle host85.bootpc Idle *.* Unbound *.* Unbound *.sunrpc Idle *.* Unbound *.32771 Idle *.sunrpc Idle *.* Unbound *.32775 Idle *.time Idle . . *.daytime Idle *.echo Idle *.discard Idle UDP: IPv6 Local Address Remote Address State If --------------------------------- --------------------------------- ---------- ----- *.* Unbound *.* Unbound *.sunrpc Idle *.* Unbound *.32771 Idle *.32778 Idle *.syslog Idle . . TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State -------------------- -------------------- ----- ------ ----- ------ ------- *.* *.* 0 0 49152 0 IDLE localhost.4999 *.* 0 0 49152 0 LISTEN *.sunrpc *.* 0 0 49152 0 LISTEN *.* *.* 0 0 49152 0 IDLE *.sunrpc *.* 0 0 49152 0 LISTEN . . *.printer *.* 0 0 49152 0 LISTEN *.time *.* 0 0 49152 0 LISTEN *.daytime *.* 0 0 49152 0 LISTEN *.echo *.* 0 0 49152 0 LISTEN *.discard *.* 0 0 49152 0 LISTEN *.chargen *.* 0 0 49152 0 LISTEN *.shell *.* 0 0 49152 0 LISTEN *.shell *.* 0 0 49152 0 LISTEN *.kshell *.* 0 0 49152 0 LISTEN *.login . . *.* 0 0 49152 0 LISTEN *TCP: IPv6 Local Address Remote Address Swind Send-Q Rwind Recv-Q State If ----------------------- ----------------------- ----- ------ ----- ------ ---- *.* *.* 0 0 49152 0 IDLE *.sunrpc *.* 0 0 49152 0 LISTEN *.* *.* 0 0 49152 0 IDLE *.32774 *.* 0 0 49152 |
使用 netstat 命令的 -f 选项可查看与特定地址族的包传输相关的统计信息。
查看 IPv4 或 IPv6 包传输的统计信息。
$ netstat -f inet | inet6 |
要查看 IPv4 传输信息,请键入 inet 作为 netstat -f 的参数。使用 inet6 作为 netstat -f 的参数可查看 IPv6 信息。
以下示例显示了 netstat -f inet 命令的输出。
TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State -------------------- -------------------- ----- ------ ----- ------ ------- host58.734 host19.nfsd 49640 0 49640 0 ESTABLISHED host58.38063 host19.32782 49640 0 49640 0 CLOSE_WAIT host58.38146 host41.43601 49640 0 49640 0 ESTABLISHED host58.996 remote-host.login 49640 0 49206 0 ESTABLISHED |
以下示例显示了 netstat - f inet6 命令的输出。
TCP: IPv6 Local Address Remote Address Swind Send-Q Rwind Recv-Q State If ------------------ ------------------------- ----- ------ ----- ------ --------- ----- localhost.38065 localhost.32792 49152 0 49152 0 ESTABLISHED localhost.32792 localhost.38065 49152 0 49152 0 ESTABLISHED localhost.38089 localhost.38057 49152 0 49152 0 ESTABLISHED |
netstat 命令的 -r 选项显示本地主机的路由表。该表显示主机知晓的所有路由的状态。使用用户帐户便可运行 netstat 的 -r 选项。
以下示例显示了 netstat -r 命令的输出。
Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ------ --------- host15 myhost U 1 31059 hme0 10.0.0.14 myhost U 1 0 hme0 default distantrouter UG 1 2 hme0 localhost localhost UH 42019361 lo0 Routing Table: IPv6 Destination/Mask Gateway Flags Ref Use If --------------------------- --------------------------- ----- --- ------ ----- 2002:0a00:3010:2::/64 2002:0a00:3010:2:1b2b:3c4c:5e6e:abcd U 1 0 hme0:1 fe80::/10 fe80::1a2b:3c4d:5e6f:12a2 U 1 23 hme0 ff00::/8 fe80::1a2b:3c4d:5e6f:12a2 U 1 0 hme0 default fe80::1a2b:3c4d:5e6f:12a2 UG 1 0 hme0 localhost localhost UH 9 21832 lo0 |
下表解释了 netstat —r 命令的屏幕输出的各种参数。
参数 |
说明 |
---|---|
目标 Destination/Mask |
指定作为路由目标端点的主机。请注意,IPv6 路由表将 6to4 隧道端点 (2002:0a00:3010:2::/64) 的前缀显示为路由目标端点。 |
Gateway |
指定用于转发包的网关。 |
Flags |
指示路由的当前状态。U 标志指示路由处于运行状态。G 标志指示路由指向网关。 |
Use |
显示已发送的包数。 |
Interface |
指示作为传输源端点的本地主机上的特定接口。 |
可以使用 ping 命令确定远程主机的状态。运行 ping 时,ICMP 协议会将数据报发送到指定的主机,并请求响应。ICMP 是负责 TCP/IP 网络中错误处理的协议。使用 ping,可查明是否存在与指定的远程主机的 IP 连接。
/usr/sbin/ping host [timeout]
在此语法中,host 是远程主机的名称。timeout 参数(可选)指示 ping 命令继续尝试到达远程主机所用的时间(以秒为单位)。缺省值为 20 秒。有关其他语法和选项,请参阅 ping(1M) 手册页。
键入以下形式的 ping 命令:
$ ping hostname |
如果主机 hostname 正在接受 ICMP 传输,则会显示以下消息:
hostname is alive |
此消息指示 hostname 对 ICMP 请求做出了响应。但是,如果 hostname 出现故障或者无法接收 ICMP 包,则会从 ping 命令接收到以下响应:
no answer from hostname |
使用 -ping 命令的 s 选项可确定远程主机是否虽在运行但丢失了包。
ping -s hostname 命令连续不断地将包发送到指定的主机,直到您发送中断字符或出现超时为止。屏幕上显示的响应信息与以下内容类似:
& ping -s host1.domain8 PING host1.domain8 : 56 data bytes 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=0. time=1.67 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=1. time=1.02 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=2. time=0.986 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=3. time=0.921 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=4. time=1.16 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=5. time=1.00 ms 64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=5. time=1.980 ms ^C ----host1.domain8 PING Statistics---- 7 packets transmitted, 7 packets received, 0% packet loss round-trip (ms) min/avg/max/stddev = 0.921/1.11/1.67/0.26 |
包丢失统计信息指示主机是否已丢弃包。如果 ping 失败,请检查由 ifconfig 和 netstat 命令报告的网络状态。请参阅使用 ifconfig 命令监视接口配置和使用 netstat 命令监视网络状态。
以下任务说明如何使用已知的网络命令来检查网络状态。
可以将 netstat 和 ifconfig 命令的输出控制为仅显示 IPv4 信息或同时显示 IPv4 和 IPv6 信息。
创建 /etc/default/inet_type 文件。
根据您的网络需要,将以下某一项添加到 /etc/default/inet_type:
仅显示 IPv4 信息:
DEFAULT_IP=IP_VERSION4 |
同时显示 IPv4 和 IPv6 信息:
DEFAULT_IP=BOTH |
或
DEFAULT_IP=IP_VERSION6 |
有关 inet_type 文件的更多信息,请参见 inet_type(4) 手册页。
ifconfig 命令中的 -4 和 -6 标志将覆盖 inet_type 文件中设置的值。netstat 命令中的 -f 标志也将覆盖 inet_type 文件中设置的值。
在 inet_type 文件中指定 DEFAULT_IP=BOTH 或 DEFAULT_IP=IP_VERSION6 变量时,应该显示以下输出:
% ifconfig -a lo0: flags=1000849 mtu 8232 index 1 inet 10.10.0.1 netmask ff000000 qfe0: flags=1000843 mtu 1500 index 2 inet 10.46.86.54 netmask ffffff00 broadcast 10.46.86.255 ether 8:0:20:56:a8 lo0: flags=2000849 mtu 8252 index 1 inet6 ::1/128 qfe0: flags=2000841 mtu 1500 index 2 ether 8:0:20:56:a8 inet6 fe80::a00:fe73:56a8/10 qfe0:1: flags=2080841 mtu 1500 index 2 inet6 2001:db8:3c4d:5:a00:fe73:56a8/64 |
当您在 inet_type 文件中指定 DEFAULT_IP=IP_VERSION4 或 DEFAULT_IP=IP_VERSION6 变量时,应该显示以下输出:
% ifconfig -a lo0: flags=849 mtu 8232 inet 10.10.0.1 netmask ff000000 qfe0: flags=843 mtu 1500 inet 10.46.86.54 netmask ffffff00 broadcast 10.46.86.255 ether 8:0:20:56:a8 |
如果怀疑 routed(IPv4 路由选择守护进程)不能正常运行,则可以启动跟踪此守护进程活动的日志。此日志包括启动 routed 守护进程时的所有包传送。
在本地主机上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
创建路由选择守护进程操作的日志文件:
# /usr/sbin/in.routed /var/log-file-name |
在繁忙的网络中,此命令生成的输出几乎是连续的。
以下示例显示由如何记录 IPv4 路由选择守护进程的操作过程创建的日志的开始部分。
-- 2003/11/18 16:47:00.000000 -- Tracing actions started RCVBUF=61440 Add interface lo0 #1 127.0.0.1 -->127.0.0.1/32 <UP|LOOPBACK|RUNNING|MULTICAST|IPv4> <PASSIVE> Add interface hme0 #2 10.10.48.112 -->10.10.48.0/25 <UP|BROADCAST|RUNNING|MULTICAST|IPv4> turn on RIP Add 10.0.0.0 -->10.10.48.112 metric=0 hme0 <NET_SYN> Add 10.10.48.85/25 -->10.10.48.112 metric=0 hme0 <IF|NOPROP> |
如果您怀疑 IPv6 in.ndpd 守护进程不能正常运行,则可以启动跟踪此守护进程的活动的日志。此跟踪显示在标准输出中,直到终止。此跟踪包括启动 in.ndpd 守护进程时的所有包传送。
在本地 IPv6 节点上承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
启动对 in.ndpd 守护进程的跟踪。
# /usr/lib/inet/in.ndpd -t |
根据需要按 Ctrl-C 组合键终止跟踪。
以下输出显示了对 in.ndpd 的跟踪的开始部分。
# /usr/lib/inet/in.ndpd -t Nov 18 17:27:28 Sending solicitation to ff02::2 (16 bytes) on hme0 Nov 18 17:27:28 Source LLA: len 6 <08:00:20:b9:4c:54> Nov 18 17:27:28 Received valid advert from fe80::a00:20ff:fee9:2d27 (88 bytes) on hme0 Nov 18 17:27:28 Max hop limit: 0 Nov 18 17:27:28 Managed address configuration: Not set Nov 18 17:27:28 Other configuration flag: Not set Nov 18 17:27:28 Router lifetime: 1800 Nov 18 17:27:28 Reachable timer: 0 Nov 18 17:27:28 Reachable retrans timer: 0 Nov 18 17:27:28 Source LLA: len 6 <08:00:20:e9:2d:27> Nov 18 17:27:28 Prefix: 2001:08db:3c4d:1::/64 Nov 18 17:27:28 On link flag:Set Nov 18 17:27:28 Auto addrconf flag:Set Nov 18 17:27:28 Valid time: 2592000 Nov 18 17:27:28 Preferred time: 604800 Nov 18 17:27:28 Prefix: 2002:0a00:3010:2::/64 Nov 18 17:27:28 On link flag:Set Nov 18 17:27:28 Auto addrconf flag:Set Nov 18 17:27:28 Valid time: 2592000 Nov 18 17:27:28 Preferred time: 604800 |
traceroute 命令将跟踪发往远程系统的 IP 包所经过的路由。有关 traceroute 的详细技术信息,请参见 traceroute(1M) 手册页。
可以使用 traceroute 命令查找所有的路由配置错误以及路由路径错误。如果无法到达特定的主机,则可以使用 traceroute 来查看发往远程主机的包所经由的路径以及可能出现故障的位置。
traceroute 命令还显示在通向目标主机的路径上每个网关的往返时间。此信息对于分析两个主机之间何处出现通信缓慢非常有用。
以下 traceroute 命令输出显示了包从本地系统 nearhost 到达远程系统 farhost 所经由的具有七个跃点的路径。此输出还显示包遍历每个跃点所用的时间。
istanbul% traceroute farhost.faraway.com traceroute to farhost.faraway.com (172.16.64.39), 30 hops max, 40 byte packets 1 frbldg7c-86 (172.16.86.1) 1.516 ms 1.283 ms 1.362 ms 2 bldg1a-001 (172.16.1.211) 2.277 ms 1.773 ms 2.186 ms 3 bldg4-bldg1 (172.16.4.42) 1.978 ms 1.986 ms 13.996 ms 4 bldg6-bldg4 (172.16.4.49) 2.655 ms 3.042 ms 2.344 ms 5 ferbldg11a-001 (172.16.1.236) 2.636 ms 3.432 ms 3.830 ms 6 frbldg12b-153 (172.16.153.72) 3.452 ms 3.146 ms 2.962 ms 7 sanfrancisco (172.16.64.39) 3.430 ms 3.312 ms 3.451 ms |
此过程使用 traceroute 命令的 -a 选项来跟踪所有路由。
此示例显示通向双栈主机的所有可能路由。
% traceroute -a v6host.remote.com traceroute: Warning: Multiple interfaces found; using 2::56:a0:a8 @ eri0:2 traceroute to v6host (2001:db8:4a3b::102:a00:fe79:19b0),30 hops max, 60 byte packets 1 v6-rout86 (2001:db8:4a3b:56:a00:fe1f:59a1) 35.534 ms 56.998 ms * 2 2001:db8::255:0:c0a8:717 32.659 ms 39.444 ms * 3 farhost.faraway.COM (2001:db8:4a3b::103:a00:fe9a:ce7b) 401.518 ms 7.143 ms * 4 distant.remote.com (2001:db8:4a3b::100:a00:fe7c:cf35) 113.034 ms 7.949 ms * 5 v6host (2001:db8:4a3b::102:a00:fe79:19b0) 66.111 ms * 36.965 ms traceroute to v6host.remote.com (192.168.10.75),30 hops max,40 byte packets 1 v6-rout86 (172.16.86.1) 4.360 ms 3.452 ms 3.479 ms 2 flrmpj17u.here.COM (172.16.17.131) 4.062 ms 3.848 ms 3.505 ms 3 farhost.farway.com (10.0.0.23) 4.773 ms * 4.294 ms 4 distant.remote.com (192.168.10.104) 5.128 ms 5.362 ms * 5 v6host (192.168.15.85) 7.298 ms 5.444 ms * |
可以使用 snoop 命令监视数据传送的状态。snoop 捕获网络包并以指定的格式显示其内容。系统收到包或将其保存到文件之后,便会立即显示这些包。当 snoop 向中间文件执行写入操作时,在密切跟踪的情况下不可能丢失包。然后,可以使用 snoop 本身来解释此文件。
要以混杂模式捕获进出缺省接口的包,您必须承担网络管理员角色或成为超级用户。在汇总表单中,snoop 仅显示与最高级协议有关的数据。例如,NFS 包仅显示 NFS 信息,而不会显示底层 RPC、UDP、IP 和以太网帧信息,但是如果选择了两个详细选项之一,则会显示这些信息。
坚持不懈地使用 snoop 可以使您熟悉常规系统行为。有关对包进行分析的帮助,请查找最新的白皮书和 RFC,并搜寻专家针对特定领域(如 NFS 或 NIS)提供的建议。有关使用 snoop 及其选项的详细信息,请参阅 snoop(1M) 手册页。
在本地主机上,承担网络管理角色或成为超级用户。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
列显有关连接到系统的接口的信息。
# ifconfig -a |
snoop 命令通常使用第一个非回送设备,通常为主网络接口。
键入不带参数的 snoop 开始捕获包,如示例 8–19 所示。
使用 Ctrl-C 组合键停止此进程。
基本 snoop 命令针对双栈主机返回如下所示的输出。
% snoop Using device /dev/hme (promiscuous mode) farhost.remote.com -> myhost RLOGIN C port=993 myhost -> farhost.remote.com RLOGIN R port=993 Using device /dev/hme router5.local.com -> router5.local.com ARP R 10.0.0.13, router5.local.com is 0:10:7b:31:37:80 router5.local.com -> BROADCAST TFTP Read "network-confg" (octet) farhost.remote.com -> myhost RLOGIN C port=993 myhost -> nisserve2 NIS C MATCH 10.0.0.64 in ipnodes.byaddr nisserve2 -> myhost NIS R MATCH No such key blue-112 -> slave-253-2 NIS C MATCH 10.0.0.112 in ipnodes.byaddr myhost -> DNSserver.local.com DNS C 192.168.10.10.in-addr.arpa. Internet PTR ? DNSserver.local.com myhost DNS R 192.168.10.10.in-addr.arpa. Internet PTR niserve2. . . farhost.remote.com-> myhost RLOGIN C port=993 myhost -> farhost.remote.com RLOGIN R port=993 fe80::a00:20ff:febb: . fe80::a00:20ff:febb:e09 -> ff02::9 RIPng R (5 destinations) |
在此输出中捕获的包显示了远程登录部分,包括查找 NIS 和 DNS 服务器以便进行地址解析。同时还包括来自本地路由器的定期 ARP 包以及向 in.ripngd 发出的 IPv6 链路本地地址的通告。
在本地主机上,承担网络管理角色或成为超级用户。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
将 snoop 会话捕获到文件。
# snoop -o filename |
例如:
# snoop -o /tmp/cap Using device /dev/eri (promiscuous mode) 30 snoop: 30 packets captured |
此示例中,在名为 /tmp/cap 的文件中捕获到了 30 个包。可以将此文件放在任何具有足够磁盘空间的目录中。捕获的包数显示在命令行中,您可以随时按 Ctrl-C 组合键中止捕获。
snoop 将在主机上生成大量网络负载,这会使结果失真。要查看实际结果,请从第三方系统运行 snoop。
检查 snoop 输出捕获文件。
# snoop -i filename |
以下内容显示了可能会作为 snoop -i 命令输出接收到的各种捕获。
# snoop -i /tmp/cap 1 0.00000 fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 ICMPv6 Neighbor advertisement 2 0.16198 farhost.com -> myhost RLOGIN C port=985 3 0.00008 myhost -> farhost.com RLOGIN R port=985 10 0.91493 10.0.0.40 -> (broadcast) ARP C Who is 10.0.0.40, 10.0.0.40 ? 34 0.43690 nearserver.here.com -> 224.0.1.1 IP D=224.0.1.1 S=10.0.0.40 LEN=28, ID=47453, TO =0x0, TTL=1 35 0.00034 10.0.0.40 -> 224.0.1.1 IP D=224.0.1.1 S=10.0.0.40 LEN=28, ID=57376, TOS=0x0, TTL=47 |
在远离与客户机或服务器相连的集线器的位置建立 snoop 系统。
第三方系统(snoop 系统)将检查所有干预通信,因此 snoop 跟踪会反映网络上实际出现的情况。
在 snoop 系统上,承担网络管理角色或成为超级用户。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
键入带有选项的 snoop 并将输出保存到文件。
检查并解释输出。
有关 snoop 捕获文件的详细信息,请参阅 RFC 1761, Snoop Version 2 Packet Capture File Format。
您可以使用 snoop 命令来仅显示 IPv6 包。
在本地节点上,承担网络管理角色或成为超级用户。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
捕获 IPv6 包。
# snoop ip6 |
有关 snoop 命令的更多信息,请参见 snoop(1M) 手册页。
以下示例显示了在节点上运行 snoop ip6 命令时可能显示的典型输出。
# snoop ip6 fe80::a00:20ff:fecd:4374 -> ff02::1:ffe9:2d27 ICMPv6 Neighbor solicitation fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 ICMPv6 Neighbor solicitation fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 ICMPv6 Neighbor solicitation fe80::a00:20ff:febb:e09 -> ff02::9 RIPng R (11 destinations) fe80::a00:20ff:fee9:2d27 -> ff02::1:ffcd:4375 ICMPv6 Neighbor solicitation |
Oracle Solaris : 可以让单个接口拥有多个 IP 地址。例如,使用网络多路径 (network multipathing, IPMP) 之类的技术,可以将多个网络接口卡 (network interface card, NIC) 连接到同一 IP 链路层。此链路可以具有一个或多个 IP 地址。此外,启用了 IPv6 的系统上的接口具有一个链路本地 IPv6 地址,至少具有一个 IPv6 路由地址,并且至少一个接口具有 IPv4 地址。
当系统启动事务时,应用程序便会对 getaddrinfo 套接字发出调用。getaddrinfo 将搜索可能在目标系统上使用的地址。然后,内核将设置此列表的优先级,以便找到包的最佳目标。此过程称为目标地址排序。然后,如果确定了包的最佳目标地址,Oracle Solaris : 内核将选择相应的源地址格式。此过程称为地址选择。有关目标地址排序的更多信息,请参见 getaddrinfo(3SOCKET) 手册页。
仅启用了 IPv4 的系统和启用了双栈 IPv4/IPv6 的系统必须执行缺省地址选择。大多数情况下,不需要更改缺省地址选择机制。但是,您可能需要更改地址格式的优先级,以便支持 IPMP 或首选使用 6to4 地址格式等。
以下过程介绍如何修改地址选择策略表。有关 IPv6 缺省地址选择的概念性信息,请参阅ipaddrsel 命令。
如果不是出于下一个任务中提到的某些原因,请不要更改 IPv6 地址选择策略表。策略表构造不正确可能会导致网络出现问题。请确保保存了策略表的副本(如下一过程所示)。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
# ipaddrsel # Prefix Precedence Label ::1/128 50 Loopback ::/0 40 Default 2002::/16 30 6to4 ::/96 20 IPv4_Compatible ::ffff:0.0.0.0/96 10 IPv4 |
备份缺省地址策略表的副本。
# cp /etc/inet/ipaddrsel.conf /etc/inet/ipaddrsel.conf.orig |
使用文本编辑器在 /etc/inet/ipaddrsel.conf 中添加自定义信息。
针对 /etc/inet/ipaddrsel 中的各项使用以下语法:
prefix/prefix-length precedence label [# comment ] |
下面是一些常见的对策略表的修改:
为 6to4 地址指定最高优先级。
2002::/16 50 6to4 ::1/128 45 Loopback |
6to4 地址格式现在具有最高优先级 50,而先前优先级为 50 的回送现在的优先级变为 45。其他地址格式保持不变。
指定与特定目标地址进行通信的特定源地址。
::1/128 50 Loopback 2001:1111:1111::1/128 40 ClientNet 2001:2222:2222::/48 40 ClientNet ::/0 40 Default |
对于仅有一个物理接口的主机,此特定项非常有用。此处,2001:1111:1111::1/128 是发往网络 2001:2222:2222::/48 中目标的所有包的首选源地址。优先级 40 使得源地址 2001:1111:1111::1/128 的优先级高于为接口配置的其他地址格式。
IPv4 地址优先于 IPv6 地址。
::ffff:0.0.0.0/96 60 IPv4 ::1/128 50 Loopback . . |
IPv4 格式 ::ffff:0.0.0.0/96 的优先级已从缺省的 10 更改为 60,这是表中的最高优先级。
将已修改的策略表加载到内核。
ipaddrsel -f /etc/inet/ipaddrsel.conf |
如果已修改的策略表存在问题,请恢复缺省 IPv6 地址选择策略表。
# ipaddrsel -d |
编辑 /etc/inet/ipaddrsel.conf 文件时,所做的任何修改即使在重新引导系统之后也都会保留下来。如果希望已修改的策略表仅存在于当前会话中,请执行以下过程。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将 /etc/inet/ipaddrsel 的内容复制到 filename,其中 filename 是您选择的文件名称。
# cp /etc/inet/ipaddrsel filename |
根据需要在 filename 中编辑策略表。
将已修改的策略表加载到内核。
# ipaddrsel -f filename |
内核将使用新的策略表,直到重新引导系统。