ip命令讲解

简介

  • 如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。
  • 作为网络配置工具的一份子,iproute2是linux下管理控制TCP/IP网络和流量控制的新一代工具包,旨在替代老派的工具链net-tools,即大家比较熟悉的ifconfig,arp,route,netstat等命令。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言,net-tools的用法给人的感觉是比较乱,而iproute2的用户接口相对net-tools来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。更重要的是,到目前为止,iproute2仍处在持续开发中。
  • 如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。
  • iproute2的核心命令是ip:

实验环境

centos7.4

实验展示

  1. 检查网卡信息
    检查网卡的诸如 IP 地址,子网等网络信息,使用ip addr show命令(简写 ip a s):
[root@test01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.60/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7bdc/64 scope link 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
[root@test01 ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.60/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7bdc/64 scope link 
       valid_lft forever preferred_lft forever
  1. 启用/禁用网口
    使用ip命令来启用一个被禁用的网口:
[root@test01 ~]# ip link set ens37 up
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fe9b:7be6/64 scope link 
       valid_lft forever preferred_lft forever

使用ip命令来禁用一个被启用的网口:

[root@test01 ~]# ip link set ens37 down
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
  1. 为网卡分配 IP 地址以及其他网络信息
    要为网卡分配 IP 地址,我们使用下面命令:
[root@test01 ~]# ip link set ens37 up
[root@test01 ~]# ip addr add 192.168.0.50/255.255.255.0 dev ens37
[root@test01 ~]# ip s ens37
Object "s" is unknown, try "ip help".
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.50/24 scope global ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7be6/64 scope link 
       valid_lft forever preferred_lft forever
  1. 删除网卡中配置的 IP 地址
    若想从网卡中删掉某个 IP,使用如下ip命令:
[root@test01 ~]# ip addr del 192.168.0.50/24 dev ens37
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fe9b:7be6/64 scope link 
       valid_lft forever preferred_lft forever
  1. 为网卡添加别名(假设网卡名为 ens37)
    添加别名,即为网卡添加不止一个 IP,执行下面命令
[root@test01 ~]# ip addr add 192.168.0.50/24 dev ens37
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.50/24 scope global ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7be6/64 scope link 
       valid_lft forever preferred_lft forever
[root@test01 ~]# ip addr add 192.168.0.20/24 dev ens37 label ens37:1
[root@test01 ~]# ip addr show ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.50/24 scope global ens37
       valid_lft forever preferred_lft forever
    inet 192.168.0.20/24 scope global secondary ens37:1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7be6/64 scope link 
       valid_lft forever preferred_lft forever
  1. 检查路由/默认网关的信息
    查看路由信息会给我们显示数据包到达目的地的路由路径。要查看网络路由信息,使用ip route show命令(简写 ip r):
[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60

在上面输出结果中,我们能够看到所有网口的ip地址和路由信息

  1. 添加静态路由
    我们也可以使用 IP 来修改数据包的默认路由。方法是使用ip route命令:
[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
169.254.0.0/16 dev ens37 scope link metric 1003 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60 
[root@test01 ~]# ip r
route  rule   
[root@test01 ~]# ip route add 192.168.2.0/24 via 192.168.0.1 dev ens37
[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
169.254.0.0/16 dev ens37 scope link metric 1003 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60 
192.168.2.0/24 via 192.168.0.1 dev ens37
  1. 删除默认路由
    要删除之前设置的默认路由,打开终端然后运行:
[root@test01 ~]# ip route del 192.168.2.0/24
[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
169.254.0.0/16 dev ens37 scope link metric 1003 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60

用上面方法修改的默认路由只是临时有效的,在系统重启后所有的改动都会丢失。要永久修改路由,需要修改或创建route-ens37文件

[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
169.254.0.0/16 dev ens37 scope link metric 1003 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60 
[root@test01 ~]# cat /etc/sysconfig/network-scripts/route-ens37 
192.168.2.0/24 via 192.168.0.1 dev ens37
[root@test01 ~]# systemctl restart network
[root@test01 ~]# ip r
default via 192.168.1.1 dev ens33 
169.254.0.0/16 dev ens33 scope link metric 1002 
169.254.0.0/16 dev ens37 scope link metric 1003 
192.168.0.0/24 dev ens37 proto kernel scope link src 192.168.0.50 
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.60 
192.168.2.0/24 via 192.168.0.1 dev ens37
  1. 检查所有的 ARP 记录
    ARP,是地址解析协议Address Resolution Protocol的缩写,用于将 IP 地址转换为物理地址(也就是 MAC 地址)。所有的 IP 和其对应的 MAC 明细都存储在一张表中,这张表叫做 ARP 缓存。
    要查看 ARP 缓存中的记录,即连接到局域网中设备的 MAC 地址,则使用如下 ip 命令:
[root@test01 ~]# ip neigh 
fe80::1 dev ens33 lladdr 9c:e3:74:69:67:19 router STALE
192.168.1.1 dev ens33 lladdr 9c:e3:74:69:67:19 REACHABLE
192.168.1.37 dev ens33 lladdr 78:2b:cb:9c:0b:e6 REACHABLE
  1. 修改 ARP 记录
    删除 ARP 记录的命令为:
[root@test01 ~]# ip neigh del 192.168.1.37 dev ens33
[root@test01 ~]# ip neigh 
fe80::1 dev ens33 lladdr 9c:e3:74:69:67:19 router STALE
192.168.1.1 dev ens33 lladdr 9c:e3:74:69:67:19 REACHABLE
192.168.1.37 dev ens33 lladdr 78:2b:cb:9c:0b:e6 REACHABLE
  1. 查看网络统计信息
    通过ip命令还能查看网络的统计信息,比如所有网卡上传输的字节数和报文数,错误或丢弃的报文数等。使用ip -s link命令来查看:
[root@test01 ~]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    594        6        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    594        6        0       0       0       0       
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:9b:7b:dc brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    79320      816      0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    110247     681      0       0       0       0       
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    13404      209      0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    2016       28       0       0       0       0
  1. 更改网口名称,可以使用命令ip link set ens37 name eth0。要在网口down的状态下更改
[root@test01 ~]# ip link set ens37 name eth0
RTNETLINK answers: Device or resource busy  
[root@test01 ~]# ip link set ens37 down
[root@test01 ~]# ip link set ens37 name eth0
[root@test01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9b:7b:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.60/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9b:7bdc/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:0c:29:9b:7b:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.50/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
  1. 获取帮助
    若你想查看某个上面例子中没有的选项,那么你可以查看帮助。事实上对任何命令你都可以寻求帮助。要列出ip命令的所有可选项,执行ip help:
[root@test01 ~]# ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | macsec | tcp_metrics | token }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,037评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 在网络中,我们经常会用到一些命令检测网络状态或者一些网络相关的信息,以下电脑高手或技术员常用的9大网络命令你都知道...
    whatangle阅读 446评论 0 1
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很...
    garyond阅读 5,370评论 1 7