Article / 文章中心

如何在Linux中使用ip命令

发布时间:2023-11-29 点击数:155

如何在Linux中使用ip命令


Linux ip命令是一个用于网络管理的系统工具,但它有很多选项,可能会很复杂。幸运的是,大多数用户在了解其主要组件后会发现该工具更容易使用。本指南介绍如何使用ip命令配置服务器。它演示了如何完成常见的网络任务以及如何查看网络状态。

什么是Linux IP命令?

顾名思义,ip命令与Internet协议(IP)有关。IPv4和IPv6共同定义了现代互联网的框架。IP协议描述了用于识别网络接口以及发送和接收流量的寻址系统。

路由器和路由器使用IP系统将互联网上的流量引导到正确的目的地。系统上的每个网络接口都有一个介质访问控制(MAC)地址,并且可以分配一个或多个IPv4或IPv6地址。此外,每个服务器都维护一个路由表。路由表确定将数据包传输到给定目的IP地址时使用的接口。

Linux ip命令允许管理员从命令行查看系统的IP网络信息。它允许用户配置网络接口、路由信息和IPv4/IPv6地址。ip命令还包括设置IP隧道、路由策略和配置系统邻居的地址解析协议(阿普)信息的高级功能。

ip命令是Linuxiproute2网络实用程序集合的一部分。它取代了旧的ifconfig命令,该命令具有更有限的功能和更少的选项。ip包预装在所有现代Linux发行版上,包括Ubuntu。

在你开始之前

  1. 如果您还没有这样做,请创建一个Linode帐户和计算实例。请参阅我们的Linode入门指南和创建计算实例指南。

  2. 按照我们的设置和保护计算实例指南更新您的系统。您可能还希望设置时区、配置主机名、创建受限用户帐户以及加强SSH访问。

ip命令概念

每个Linux ip命令作用于一个或多个ip对象。ip对象表示网络系统的特定组件,如路由表。ip中的一些术语与网络概念更典型的讨论方式不同。下面是一些最重要的ip对象的列表,括号中有快捷方式。

  • link(l):链路表示网络设备。除了以太网链路之外,大多数链路都将服务器连接到更广泛的计算机网络。链接可以是逻辑/抽象或物理的。
  • route(r):表示路由表中的一个条目。它用于确定如何以及在何处发送基于其地址的传出数据包。
  • address(a):这是与链接相关联的IPv4或IPv6地址。
  • maddress(m):这是在链路上配置的多播地址(如果有的话)。
  • neighbor(n):表示相邻接口的信息。它包括缓存的阿普或IPv6邻居发现(NDISC)信息。
  • rule(ru):这是路由数据包的策略规则。它控制路由数据库中路由的优先级。

其他IP对象包括addrlabel、l2tp、mroute(用于多播路由)、tunnel和xfrm,它们由Internet协议安全(IPSec)协议使用。有关其余ip对象的更多信息,请参阅Ubuntu ip文档。

注意
中的一些对象 ip 命令不能完美地映射到有关网络的更随意讨论中使用的术语。例如,术语链路通常指两个系统之间的连接。的 link IP对象通常称为接口。为避免混淆,在讨论 ip 命令

ip vs ifconfig

ip命令是已建立的ifconfig命令的更新迭代。ip还包括来自其他命令的功能,包括route和arp。因此,它比更有限的ifconfig具有更广泛的范围和更多的功能。

ip实用程序具有其他增强功能。例如,它显示所有接口,而ifconfig只显示启用的接口。ip命令也更高效,并以更无缝的方式与系统交互。ip命令总是需要一个对象类型,如地址或链接标识符,而ifconfig直接引用接口而不使用ip对象。

由于其复杂性,ip命令最初可能会令人生畏,因此一些用户最初可能会觉得使用ifconfig更舒服。用户仍然可以使用ifconfig命令安装apt install net-tools,但不建议这样做。不幸的是,ifconfig可能仍然被最近没有更新的旧实用程序和应用程序使用。

如何使用ip命令

ip命令使用起来很简单,但它包含许多复杂的选项。不能单独使用ip命令。其中一个“ip对象”也必须包括在内。换句话说,没有办法使用命令一次显示所有网络信息。要使用ip命令配置网络设置,请包括以下信息:

  • ip命令名。
  • 零或更多的选择。
  • ip对象的名称,例如link或route。每个对象都与一个缩写相关联。例如,link对象可以缩写为l。ip l show和ip link show都指向同一个命令。
  • 命令,例如,沿着任何参数。

大多数ip命令遵循以下格式:

ip [options] OBJECT COMMAND

非root用户必须使用sudo来执行任何更改网络配置的ip命令。所有用户都可以使用show命令。

ip help指令描述命令语法并列出所有可用选项。更具体的帮助可用于每个ip对象。使用格式ip OBJECT help。例如,ip addr help提供了与地址相关的命令的指令。

ip addr help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip address del IFADDR dev IFNAME [mngtmpaddr]
       ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
                         [ label LABEL ] [up] [ vrf NAME ] ]
       ip address {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]
...

以下是一些更有用的ip选项。

  • -a:处理所有对象,前提是命令支持该选项。
  • -d:在输出中添加额外的细节。
  • -f:指定协议族。一些常见的家庭有自己的捷径。-4是IPv4的快捷方式,-6表示IPv6,M表示MPLS。
  • -j:以JSON格式显示输出。
  • -p:以更可读的格式显示输出。
  • -s:显示额外的统计信息,包括传输和接收的数据包。-s -s选项显示更多信息。
  • -t:在输出中包含时间戳。

有关所有ip选项的详细说明,请参阅ip命令的手册页。

由于ip命令包含如此多的选项,下面的示例将重点放在一些更常见的用例上。

使用地址ip对象

addr对象允许用户列出与每个链接关联的IP地址,包括系统地址。它还用于添加、修改和删除地址。

如何找到你的IP地址

使用addr ip对象查找您的IP地址。ip addr show命令显示系统上配置的每个链路的地址。找到eth0链接,该链接将主机连接到大多数系统上的更广泛的网络。inet字段显示IPv4地址。如果配置了IPv6地址,则会在inet6部分中指明。

ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 mq state UP group default qlen 1000
    link/ether f2:3c:93:60:50:30 brd ff:ff:ff:ff:ff:ff
    inet 178.79.148.108/24 brd 178.79.148.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:7e00::f03c:93ff:fe60:5030/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 5155sec preferred_lft 1555sec
    inet6 fe80::f03c:93ff:fe60:5030/64 scope link
       valid_lft forever preferred_lft forever

要显示有关某个特定链接的信息,请将链接的名称附加到命令的末尾。

ip addr show eth0

-br选项简化了状态和IP地址的显示。

ip -br addr show
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             178.79.148.108/24 2a01:7e00::f03c:93ff:fe60:5030/64 fe80::f03c:93ff:fe60:5030/64

如何添加或删除IP地址

要向现有链路/接口添加IP地址,请使用addr add命令。命令的格式是ip addr add ADDRESS/NETMASK dev LINK_ID。使用/符号分隔IP地址和网络掩码。

下面的命令演示了如何将新地址添加到lo路由器链接。修改任何网络信息时,必须使用sudo。如果规则已经存在,则ip显示错误消息RTNETLINK answers: File exists。

sudo ip addr add 127.255.255.255/16 dev lo

addr show命令反映了新的配置更改。

ip addr show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 127.255.255.255/16 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

要从链接中删除地址,请使用addr delete命令。

sudo ip addr delete 127.255.255.255/16 dev lo

要将地址配置为广播地址,请使用关键字brd。

sudo ip addr add 172.31.255.255 brd + dev eth1

link对象可以访问和配置有关系统上网络接口的信息。它用于查看网络设备的状态,或将管理状态设置为up或down。

如何查看网络接口

要查看有关服务器上所有网络接口的信息,请使用ip link show命令。该命令显示每个链路object的状态、MTU和MAC地址以及其他信息。

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    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 mq state UP mode DEFAULT group default qlen 1000
    link/ether f2:3c:93:60:50:30 brd ff:ff:ff:ff:ff:ff

当添加-br选项时,ip仅显示最重要的信息。

ip -br link show
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0             UP             f2:3c:93:60:50:30 <BROADCAST,MULTICAST,UP,LOWER_UP>
ip link show up

如何查看有关特定网络接口的信息

要将显示限制为有关特定接口的信息,请将信息的名称附加到ip link show命令。以下命令仅显示有关eth0网络接口的信息。如果接口不存在,ip返回错误消息Device "INTERFACE" does not exist。

ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether f2:3c:93:60:50:30 brd ff:ff:ff:ff:ff:ff

添加-s选项以查看链接/接口统计信息。

ip -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether f2:3c:93:60:50:30 brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
      67487882  470575      0       0       0       0
    TX:  bytes packets errors dropped carrier collsns
     112143192  522462      0       0       0       0

使用-s -s double标志可以查看更全面的统计信息,包括有关各种错误的信息。

ip -s -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether f2:3c:93:60:50:30 brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
      67589398  471467      0       0       0       0
    RX errors:  length    crc   frame    fifo overrun
                     0      0       0       0       0
    TX:  bytes packets errors dropped carrier collsns
     112345201  523306      0       0       0       0
    TX errors: aborted   fifo  window heartbt transns
                     0      0       0       0       2

如何更改网络接口的状态

使用ip link set命令修改任何网络接口的状态。使用关键字up启用接口,使用关键字down禁用接口。

要禁用eth1链接,请使用以下命令。

sudo ip link set eth1 down

要使eth1备份,请输入此命令。

sudo ip link set eth1 up

使用以下命令设置链路的最大传输单元(MTU)大小。

sudo ip link set mtu 1600 eth1

使用路由ip对象

route对象允许用户查看路由表。它还用于添加和删除路由。

如何查看路由信息

要查看路由数据库中安装的所有路由,请使用ip route show命令。

ip route show
default via 178.79.148.1 dev eth0 proto static
178.79.148.0/24 dev eth0 proto kernel scope link src 178.79.148.108

也可以使用list命令列出特定网络的所有路由。

ip route list 178.79.148.0/24
178.79.148.0/24 dev eth0 proto kernel scope link src 178.79.148.108

添加和删除路由

要添加新路由,请使用ip route add命令。有两种方法可以添加路由。对于第一个选项,指定远程网络的IP地址和掩码,以及用于访问它的接口。下面的示例将新路由添加到eth0。

sudo ip route add 192.168.20.0/24 dev eth0

使用ip route show命令确认已添加路由。

ip route show
default via 178.79.148.1 dev eth0 proto static
178.79.148.0/24 dev eth0 proto kernel scope link src 178.79.148.108
192.168.20.0/24 dev eth0 scope link

对于第二种方法,使用via关键字指定网关。网络的所有流量都通过指定的地址路由。将178.79.148.1替换为上面输出中的实际IP地址。

sudo ip route add 192.168.20.0/24 via 178.79.148.1

要删除路由,请使用ip route delete命令。此命令仅接受IP地址。

sudo ip route delete 192.168.20.0/24

使用邻居ip对象

neigh命令对服务器邻居的阿普和NDISC条目进行操作。neighbor命令显示每个条目的地址和状态。如果一个条目是有效且可到达的,则它是REACHABLE;如果它永远不会过期,则它是PERMANENT。STALE条目有效但不可访问,而DELAY状态中的条目尚未验证。neigh命令还可以编辑邻居信息。

如何查看邻居信息

要查看系统所识别的所有邻居,请使用ip neigh show。

ip neigh show
178.79.148.1 dev eth0 lladdr 00:00:0c:9f:f0:02 REACHABLE
fe80::1 dev eth0 lladdr 00:00:0c:9f:f0:02 router STALE

如何添加和删除邻居信息

可以使用ip neigh add和ip neigh delete命令添加和删除阿普信息。

注意
的 delete 命令用于刷新陈旧的阿普或NDISC信息。的 neigh add 命令可以在两个不断通信且具有固定IP和MAC地址的节点之间添加永久阿普条目。但是,如果信息发生变化,静态阿普条目可能会导致问题。在向这些表中添加任何条目时要小心。

要为邻居添加永久阿普条目,请使用以下命令。包括邻居的MAC地址和用于访问它的链路。关键字perm将永久安装路由。

sudo ip neigh add 192.168.100.100 lladdr 16:12:34:56:78:90 dev eth0 nud perm ip neigh show
178.79.148.1 dev eth0 lladdr 00:00:0c:9f:f0:02 REACHABLE
192.168.100.100 dev eth0 lladdr 16:12:34:56:78:90 PERMANENT
fe80::1 dev eth0 lladdr 00:00:0c:9f:f0:02 router STALE

使用ip neigh delete,沿着使用地址和接口,删除路由。

sudo ip neigh delete 192.168.100.100 dev eth0