簡(jiǎn)介
- 如今很多系統(tǒng)管理員依然通過(guò)組合使用諸如ifconfig、route、arp和netstat等命令行工具(統(tǒng)稱為net-tools)來(lái)配置網(wǎng)絡(luò)功能,解決網(wǎng)絡(luò)故障鼎姐。net-tools起源于BSD的TCP/IP工具箱,后來(lái)成為老版本Linux內(nèi)核中配置網(wǎng)絡(luò)功能的工具。但自2001年起炕桨,Linux社區(qū)已經(jīng)對(duì)其停止維護(hù)饭尝。同時(shí),一些Linux發(fā)行版比如Arch Linux和CentOS/RHEL 7則已經(jīng)完全拋棄了net-tools献宫,只支持iproute2钥平。
- 作為網(wǎng)絡(luò)配置工具的一份子,iproute2是linux下管理控制TCP/IP網(wǎng)絡(luò)和流量控制的新一代工具包姊途,旨在替代老派的工具鏈net-tools涉瘾,即大家比較熟悉的ifconfig,arp捷兰,route立叛,netstat等命令。net-tools通過(guò)procfs(/proc)和ioctl系統(tǒng)調(diào)用去訪問(wèn)和改變內(nèi)核網(wǎng)絡(luò)配置贡茅,而iproute2則通過(guò)netlink套接字接口與內(nèi)核通訊囚巴。拋開(kāi)性能而言,net-tools的用法給人的感覺(jué)是比較亂友扰,而iproute2的用戶接口相對(duì)net-tools來(lái)說(shuō)相對(duì)來(lái)說(shuō),更加直觀庶柿。比如村怪,各種網(wǎng)絡(luò)資源(如link、IP地址浮庐、路由和隧道等)均使用合適的對(duì)象抽象去定義甚负,使得用戶可使用一致的語(yǔ)法去管理不同的對(duì)象。更重要的是审残,到目前為止梭域,iproute2仍處在持續(xù)開(kāi)發(fā)中。
- 如果你仍在使用net-tools搅轿,而且尤其需要跟上新版Linux內(nèi)核中的最新最重要的網(wǎng)絡(luò)特性的話病涨,那么是時(shí)候轉(zhuǎn)到iproute2的陣營(yíng)了。原因就在于使用iproute2可以做很多net-tools無(wú)法做到的事情璧坟。
- iproute2的核心命令是ip:
實(shí)驗(yàn)環(huán)境
centos7.4
實(shí)驗(yàn)展示
- 檢查網(wǎng)卡信息
檢查網(wǎng)卡的諸如 IP 地址既穆,子網(wǎng)等網(wǎng)絡(luò)信息,使用ip addr show命令(簡(jiǎn)寫 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
- 啟用/禁用網(wǎng)口
使用ip命令來(lái)啟用一個(gè)被禁用的網(wǎng)口:
[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命令來(lái)禁用一個(gè)被啟用的網(wǎng)口:
[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
- 為網(wǎng)卡分配 IP 地址以及其他網(wǎng)絡(luò)信息
要為網(wǎng)卡分配 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
- 刪除網(wǎng)卡中配置的 IP 地址
若想從網(wǎng)卡中刪掉某個(gè) 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
- 為網(wǎng)卡添加別名(假設(shè)網(wǎng)卡名為 ens37)
添加別名,即為網(wǎng)卡添加不止一個(gè) IP黎茎,執(zhí)行下面命令
[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
- 檢查路由/默認(rèn)網(wǎng)關(guān)的信息
查看路由信息會(huì)給我們顯示數(shù)據(jù)包到達(dá)目的地的路由路徑囊颅。要查看網(wǎng)絡(luò)路由信息,使用ip route show命令(簡(jiǎn)寫 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
在上面輸出結(jié)果中,我們能夠看到所有網(wǎng)口的ip地址和路由信息
- 添加靜態(tài)路由
我們也可以使用 IP 來(lái)修改數(shù)據(jù)包的默認(rèn)路由踢代。方法是使用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
- 刪除默認(rèn)路由
要?jiǎng)h除之前設(shè)置的默認(rèn)路由盲憎,打開(kāi)終端然后運(yùn)行:
[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
用上面方法修改的默認(rèn)路由只是臨時(shí)有效的,在系統(tǒng)重啟后所有的改動(dòng)都會(huì)丟失奸鬓。要永久修改路由焙畔,需要修改或創(chuàng)建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
- 檢查所有的 ARP 記錄
ARP,是地址解析協(xié)議Address Resolution Protocol的縮寫串远,用于將 IP 地址轉(zhuǎn)換為物理地址(也就是 MAC 地址)宏多。所有的 IP 和其對(duì)應(yīng)的 MAC 明細(xì)都存儲(chǔ)在一張表中,這張表叫做 ARP 緩存澡罚。
要查看 ARP 緩存中的記錄伸但,即連接到局域網(wǎng)中設(shè)備的 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
- 修改 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
- 查看網(wǎng)絡(luò)統(tǒng)計(jì)信息
通過(guò)ip命令還能查看網(wǎng)絡(luò)的統(tǒng)計(jì)信息留搔,比如所有網(wǎng)卡上傳輸?shù)淖止?jié)數(shù)和報(bào)文數(shù)更胖,錯(cuò)誤或丟棄的報(bào)文數(shù)等。使用ip -s link命令來(lái)查看:
[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
- 更改網(wǎng)口名稱隔显,可以使用命令ip link set ens37 name eth0却妨。要在網(wǎng)口down的狀態(tài)下更改
[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
- 獲取幫助
若你想查看某個(gè)上面例子中沒(méi)有的選項(xiàng),那么你可以查看幫助括眠。事實(shí)上對(duì)任何命令你都可以尋求幫助彪标。要列出ip命令的所有可選項(xiàng),執(zhí)行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] }