介绍
在管理和故障排除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 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:114829 errors:0 dropped:0 overruns:0 frame:0 TX packets:59007 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:73598364 (73.5 MB) TX bytes:14325245 (14.3 MB) Interrupt:20 Memory: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 addr show eth0
2: eth0: 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 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。 我们可以通过该接口访问此服务器,其中我们自己的接口地址为107.170.58.162。
如何配置网络接口和地址
现在,您已经熟悉如何获取有关接口和与其相关联的地址的信息,下一步是了解如何修改它们的状态。
第一步是配置接口本身。 你可以用做ip link
子命令一次。 然而这一次,你传递的动作set
,而不是表演,以修改值。
例如,我们可以通过发出以下命令来启动或关闭网络接口:
ip link set eth1 up ip link set eth1 down
注意 :要小心,不要意外打倒,你是通过连接到服务器的接口。
您也可以使用ip link
子命令来设置一下的接口属性。 例如,如果您要为接口更改多播标志的开启或关闭,您可以键入:
ip link set eth1 multicast on ip link set eth1 multicast off
你可以像这样调整mtu和包队列长度:
ip link set eth1 mtu 1500 ip link set 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 interface
该brd +
命令的部分自动设置广播地址。 多个地址可以添加到每个接口没有问题。
我们可以通过逆操作去除地址。 要删除与接口关联的特定地址,您可以使用它:
ip addr del ip_address/net_prefix dev interface
或者,您可以忽略该地址,并且与该接口关联的第一个列出的地址将被删除。
您还可以调整服务器的路由,使用ip route [add | change | replace | delete ]
ip route [add | change | replace | delete ]
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年已完全转换)之前,熟悉这些命令非常重要。 通常,它们更加一致,您可以依赖所有命令中提供的某些约定。 你使用这些命令越多,他们将成为第二自然。