Linux IP 命令使用详解

Linux IP命令使用详解

简介

作用

ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfigroute等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。

格式

ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]

#### options

OPTIONS是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为 长、短两种形式。目前,ip支持如下选项:
-V,-Version打印ip的版本并退出。-s,-stats,-statistics输出更为详 尽的信息。如果这个选项出现两次或者多次,输出的信息将更为详尽。-f,-family这个选项后面接协议种类,包括:inet、inet6或者 link,强调使用的协议种类。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何 网络协议。-4是-family inet的简写。-6-family inet6的简写。-0是-family link的简写。-o,-oneline对每行记录都使用单行输出,回行用字符代替。如果你需要使用wc、grep等工具处理ip的输出,会用到这个选 项。-r,-resolve查询域名解析系统,用获得的主机名代替主机IP地址。

OBJECT

OBJECT是你要管理或者获取信息的对象。目前ip认识的 对象包括:
link: 网络设备, address:一个设备的协议(IP或者IPV6)地址,neighbourARP:或者NDISC:缓冲区条目, route: 路由表条目, rule:路由策略数据库中的规则, maddress:多播地址, mroute:多播路由缓冲区条目, tunnelIP:上的通道
  另外,所有的对象名都可以简写,例如:address可以简写为addr,甚至是a。

command

COMMAND设置针对指 定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或 者list)。有些对象不支持所有这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这 个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出, 就会执行help命令。

ARGUMENTS

ARGUMENTS 是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。我们将在后面的详细介绍每个命令的使用,命令的默认参数将使用default标出。

ip 错误

  ip的所有操作都是原子操作。例如,如果ip执行失败,它不会修改系统的任何东西,ip link command例外,它会修改某些设备参数。

举例详解

ip link–配置网络设备

对象link由网络设备,对应的命令显示以及设备的状态变化组成。命令set和 show(或者list)

缩写:set、s

ip link set dev eth0 up arp on/off

缩写:show、list、lst、sh、ls、l
参数
dev NAME(default)NAME指定网络设备名称,例如:eth0。如果省略了这个参数,所有的设备属性就都会被列出。up只显示处于活动状态网络接 口的信息。

ip link show up

ip l ls up

统计信息

  使用-statistics选项,ip命令会打印出网络接口的统计信息,例如:   

ip -s link ls eth0

ip address–协议地址管理

缩写 address、addr、a
对象 这里的地址是绑定到网络设备上的协议 (IP或者IPv6)地址。每个网络设备至少应该有一个协议地址。而且,一个网络设备可以绑定多个协议地址。
ip addr命令能够显示网络设备的协议地址及其性质,添加新的地址,删除旧的地址。命令add、delete、flush和show(或者 list)

ip address add–添加一个新的协议地址

ip addr add local 192.168.1.1/24

在以太网接口eth0上增加一个地址10.0.0.1,掩码长度为24位(155.155.155.0),标准广播地址,标签为 eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias

scope SCOPE_VALUE(注2) 设置地址的有效范围,它用于内核为数据包设置源地址。有效的范围在/etc/iproute2/tr_scopes文件列 出,系统预先设定了一些范围值:

  • global 这个地址全局有效。
  • site 这个地址是局部连接,也就是只有目标地址是这个设备地址时,才有效。
  • site (只适用于IPv6)地址在站点内部有效。
  • host 地址在主机内部有效。

    ip address delete–删除一个协议地址

    这个命令的参数 和ip addr add命令的参数一致。其中,只有设备名是必需的参数,其它都是可选的。如果没有给定除设备名之外的其它参数,ip就会删除这个设备的第一个地址。

ip address show–显示协议地址

与ip link show 一样

ip address flush–清除协议地址

缩写:flush、f
简介
  这个命令可以清除按照某种条件选 择的协议地址。
参数
  这个命令的参数和ip address show相同。唯一的区别是,如果不给定参数它什么都不会做。
警告
  这个命令(和后面讨论的所有flush命令)非常危险。如果出现错误,将无法恢复,它会清除被操作的地址。
  删除属于私网10.0.0.0/8的所有地址:
netadm@amber:~ # ip -s -s a f to 10/8
取消所有以太网卡的IP地址

netadm@amber:~ # ip -4 addr flush label "eth0"

statistics 选项

同ip Link

ip neighbour

缩写 neighbour、neighbor、neigh、n
对象 邻接(neighbour)对象实现同一网段协议地址和链路层地址的绑定。在内核中,这些条目被组织到表中。IPv4的相邻表也被叫做ARP 表。
ip neighbour命令支持对条目及其属性的显示、添加和删除。命令add、change、replace、delete、fulsh、 show(或者list)
此处不进行详解

ip router .路由表管理

 路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。 如果数据包目的地址位于属于路由条目的的范围,以及路由的TOS等于0或者等于数据包的TOS,它就匹配路由条目。如果一个数据包匹配多个路由条目,系统 内核将按照以下规则决定选择哪个路由:
 
范围最小的优先匹配,较大的放弃;
路由TOS等于数据包TOS的匹配,不等于的放弃;
如果经过上面两步的选择,还有数个路由,就选择优先值最高的路由;
如果还有数个路由可供选择,就重复进行第一步。
路由条目提供IP数据包投递所需的路由信息、数据(例如:输出设备、下一跳的路由器)和一些可选属性(例如:路径的最大传输单元MTU或者源 地址等)。这些属性将在后面的章节详细介绍。

ip route add

设置到网络10.0.0/24的路由经过网关193.233.7.65

ip route add 10.0.0/24 via 193.233.7.65

修改到网络10.0.0/24的直接路由,使其经过设备dummy

ip route chg 10.0.0/24 dev dummy

加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,这个路由要经过网关而不是直连 的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。

ip route add default scope global nexthop dev ppp0
                                  nexthop dev ppp1

设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为 193.233.7.83(回来的转换将会在后面的章节路由策略中介绍)。

ip route add nat 192.203.80.142 via 193.233.7.83

ip route delete– 删除路由

 ip route del使用和ip route add相同的参数,不过语法稍有不同。这个命令使用关键词(to、tos、preference和table)选择要删除的路由。如果命令中使用 了可选属性,ip命令会校验这个属性和要删除的路由是否一致;如果没有给定关键词或者属性不一致,ip route del会执行失败。

删除上一节命令加入的多路径路由

ip route del default scope global nexthop dev ppp0
                                  nexthop dev ppp1

ip route get – 获得单个路由

使用这个命令可以获得到达目的地址的一个路由以及它的确切内容。
参数 to ADDRESS(default)目标地址 from ADDRESS源地址 tos TOS或者dsfield TOS服务类型 iif NAME数据包进来的设备 oif NAME数据包出去的设备 connectedip route get命令至少要有参数to ADDRESS。使用connected参数,如果没有给出源地址(from ADDRESS),ip就会重新在路由表中查询能够到达目的地址的源地址,给出获得的第一个源地址到目的地址的路由。如果使用了策略路由,会有所 不同。
  ip route get命令和ip route show命令执行的操作是不同的。ip route show命令只是显示现有的路由,而ip route get命令在必要时会派生出新的路由。
搜索目的地址是193.233.7.82,来自193.233.7.82,从eth0设备到达的路由(这条命令会产生一条非常有意思的 路由,这是一条到193.233.7.82的回环路由)

kuznet@amber:~ $ ip r g 193.233.7.82 from 193.233.7.82 iif eth0
193.233.7.82 from 193.233.7.82 dev eth0  src 193.233.7.65 
  realms inr.ac/inr.ac 
    cache   mtu 1500 rtt 300 iif eth0

ip route – 路由策略数据库管理命令