介绍
在对 Linux 服务器进行管理和故障排除时,了解基本的网络工具至关重要。 虽然一些工具主要用于监控,但其他低级实用程序用于配置网络连接本身并实施默认设置。
传统上,一组不相关的工具集中在 net-tools
的标题下用于执行此操作。 它们通常打包在一起以提供完整的功能覆盖,但它们的开发和使用策略因工具而异。
由于不一致以及维护中断,已使用一系列称为 iproute2
的工具来替换这些单独的工具。 它们是协同开发的,可以共享语法并有效地一起运行。
在本指南中,我们将讨论如何使用 iproute2 工具来配置、操作和收集有关您的网络的信息。 我们将使用 Ubuntu 12.04 VPS 进行演示,但大多数现代 Linux 发行版应该提供相同级别的功能。
虽然查询命令通常可以作为非特权用户执行,但必须使用 root 特权来修改设置。
如何查看网络接口、地址和路由
iproute2 套件最基本的职责之一是管理实际接口。
通常,接口本身将被命名为 eth0
、eth1
、lo
等。 传统上,ifconfig
命令用于配置该区域的项目。 在 iproute2 系统下,子命令 ip addr
和 ip link
负责这些步骤。
使用 ifconfig,您可以通过键入不带参数的命令来收集有关网络接口当前状态的信息:
ifconfig
eth0 Link encap:Ethernet HWaddr 54:be:f7:08:c2:1b inet addr:192.168.56.126 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::56be:f7ff:fe08:c21b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:114273 errors:0 dropped:0 overruns:0 frame:0 TX packets:58866 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:73490903 (73.4 MB) TX bytes:14294252 (14.2 MB) Interrupt:20 Memory:f7f00000-f7f20000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:3942 errors:0 dropped:0 overruns:0 frame:0 TX packets:3942 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:668121 (668.1 KB) TX bytes:668121 (668.1 KB)
要获取有关单个接口的信息,您始终可以将其指定为参数:
ifconfig eth0
eth0 链路封装:以太网 HWaddr 54:be:f7:08:c2:1b inet addr:192.168.56.126 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr:fe80::56be:f7ff:fe08:c21b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packet:114829 错误: 0 丢弃:0 超限:0 帧:0 TX 数据包:59007 错误:0 丢弃:0 超限:0 载波:0 冲突:0 txqueuelen:1000 RX 字节:73598364 (73.5 MB) TX 字节:14325245 (14.3 MB) 中断: 20 内存:f7f00000-f7f20000
我们可以使用 iproute2 套件中的子命令复制此功能。
要获得附加到每个接口的地址的概述,请键入 ip addr
不带参数:
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::56be:f7ff:fe08:c21b/64 scope link valid_lft forever preferred_lft forever
要获取特定接口,可以使用以下语法:
ip 地址显示eth0
2:eth0: mtu 1500 qdisc pfifo_fast 状态 UP qlen 1000 链接/以太网 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff inet 192.168.56.126/24 brd 192.168.56.255 范围全局 eth0 valid_lft 永远首选_lft永远 inet6 fe80::56be:f7ff:fe08:c21b/64 范围链接 valid_lft 永远 preferred_lft 永远
实际上,ip addr
命令只是 ip addr show
命令的别名。
如果您只关心接口本身而不关心地址,您可以使用 ip link
命令代替:
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff
要获取有关特定接口的信息,您需要添加关键字 show
,后跟接口名称:
ip link show eth0
要获取有关接口如何通信的统计信息,您可以通过将 -s
选项传递给链接子命令来查询每个接口的统计信息:
ip -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 853144 14672 0 0 0 0 TX: bytes packets errors dropped carrier collsns 91257 537 0 0 0 0
那么我们如何找到我们的路由表呢? 路由表包含有关到其他网络位置的路径的内核信息。 我们可以通过键入以下内容打印出当前路由表:
ip route show
default via 107.170.58.1 dev eth0 metric 100 107.170.58.0/24 dev eth0 proto kernel scope link src 107.170.58.162
这向我们表明,通过 eth0
接口和地址 107.170.58.1 可以获得到更大 Internet 的默认路由。 我们可以通过那个接口访问这个服务器,我们自己的接口地址是107.170.58.162。
如何配置网络接口和地址
既然您已经熟悉了如何获取与它们关联的接口和地址的信息,下一步就是了解如何修改它们的状态。
第一步是配置接口本身。 您可以再次使用 ip link
子命令执行此操作。 然而,这一次您传递了动作 set
而不是 show 来修改值。
例如,我们可以通过发出以下命令来启动或关闭网络接口:
ip link set eth1 up ip link set eth1 down
注意:注意不要意外关闭连接服务器的接口。
您还可以使用 ip link
子命令设置有关接口的属性。 例如,如果您想为您的接口更改多播标志打开或关闭,您可以键入:
ip 链接设置eth1多播开启 ip 链接设置eth1多播关闭
您可以像这样调整 mtu 和包队列长度:
ip 链接集eth1 mtu 1500 ip 链接集eth1 txqueuelen 1000
如果您正在配置的接口已关闭,您可以调整与设备关联的接口名称和 arp 标志:
ip link set eth1 name eth10 ip link set eth1 arp on
为了调整与接口关联的地址,我们再次使用 ip addr
子命令。
我们可以通过键入以下内容向设备添加地址:
ip addr add ip_address/net_prefix brd + dev接口
命令的 brd +
部分自动设置广播地址。 多个地址可以毫无问题地添加到每个接口。
我们可以通过逆运算摆脱地址。 要删除与接口关联的特定地址,您可以像这样使用它:
ip addr del ip_address/net_prefix开发接口
或者,您可以省略地址,与该接口关联的第一个列出的地址将被删除。
你也可以调整服务器的路由,使用 ip route [add | change | replace | delete ]
语法,但我们不会在这里讨论这个,因为大多数人不会定期调整这个。
IPRoute2 的附加功能
IPRoute2 有一些额外的功能,我们将无法在本指南中深入讨论。 相反,我们将讨论这些是什么以及您可能会发现它们有用的情况。
IP 路由规则的概念很难谈论,因为它非常依赖于情况。 基本上,您可以根据多个字段来决定如何路由流量,包括目标地址、源地址、路由协议、数据包大小等。
我们通过使用 ip rule
子命令来访问此功能。 基本查询遵循其他子命令的一般模式:
ip rule show
0: from all lookup local 32766: from all lookup main 32767: from all lookup default
这三个路由规则是内核配置的默认规则。 第一行匹配任何流量,用于路由高优先级流量。 第二行是处理正常路由的主要规则。 最后一个是空规则,如果上面的规则与数据包不匹配,则用于后处理。
IPRoute2 软件配置的路由规则存储在路由策略数据库中,通过匹配规则集来选择策略。 我们可以使用适当的操作添加或删除规则。 但是,您不应该在不知道自己在做什么的情况下这样做。 查看手册页并搜索 ip rule
以获取更多信息。
man ip # search for "ip rule"
我们将简要讨论的另一件事是通过这些工具处理 arp 信息。 处理此信息的子命令称为 ip neigh
。
ip neigh
107.170.58.1 dev eth0 lladdr 00:00:5e:00:01:68 DELAY
默认情况下,这至少应该列出您的网关。 Arp 是一种协议,用于收集有关可通过本地网络访问的物理设备的信息。
基本上,只要需要访问 IP 地址,就会在本地网络上广播 arp 请求。 匹配的 IP 地址做出响应,然后本地计算机知道将信息发送到该 IP 地址的位置。 此信息在本地系统上缓存一段时间(通常为 15 分钟左右),以避免在后续通信期间进行查询。
结论
您现在应该对如何使用 iproute2 套件中包含的工具有了相当好的了解。 虽然许多指南和教程仍然提到旧的实用程序,部分原因是知识渊博的系统管理员经常使用旧工具长大,但本指南中讨论的命令将在未来几年内接管。
在您发现自己在已切换到这些命令(Arch Linux 已在 2011 年完全转换)的系统上解决问题之前,请务必先熟悉这些命令。 一般来说,它们更加一致,您可以指望某些约定在所有命令中都可用。 您使用这些命令的次数越多,它们就越会成为第二天性。