Skip to content

Latest commit

 

History

History
339 lines (287 loc) · 12.5 KB

File metadata and controls

339 lines (287 loc) · 12.5 KB

ip

ip help

ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename

OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token }

OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maxi‐mum-addr-flush-attempts } | -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] | -n[etns] name | -a[ll] }

ip OBJECT

  • link - network device. 网络设备
  • address - protocol (IP or IPv6) address on a device. 设备上的协议(IP或IPv6)地址
  • addrlabel - label configuration for protocol address selection. 协议地址选择的标签配置
  • route - routing table entry. 路由表条目
  • rule - rule in routing policy database. 路由策略数据库中的规则
  • neighbour - manage ARP or NDISC cache entries.
  • ntable - manage the neighbor cache's operation.
  • tunnel - tunnel over IP.
  • tuntap - manage TUN/TAP devices.
  • maddress - multicast address.
  • mroute - multicast routing cache entry.
  • mrule - rule in multicast routing policy database.
  • monitor - watch for netlink messages.
  • xfrm - manage IPSec policies.
  • netns - manage network namespaces.
  • l2tp - tunnel ethernet over IP (L2TPv3).
  • tcp_metrics/tcpmetrics - manage TCP Metrics
  • token - manage tokenized interface identifiers.

ip OPTIONS

  • -V[ersion] 显示指令版本信息
  • -h[uman-readable] 输出人类可读的统计信息和后缀
  • -s[tatistics] 输出统计详细信息
  • -d[etails] 输出详细信息
  • -r[esolve]
  • -iec
  • -f[amily] { inet | inet6 | ipx | dnet | link }
  • -4
  • -6
  • -I
  • -D
  • -B
  • -0 将每条记录输出到一行,用‘\’字符替换换行符
  • -l[oops] { maxi‐mum-addr-flush-attempts }
  • -o[neline]
  • -rc[vbuf] [size]
  • -t[imestamp]
  • -ts[hort]
  • -n[etns] name
  • -a[ll]

使用示例

显示网卡及配置的地址信息

# 显示网卡及配置的地址信息
ip address show
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.24/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever

输出内容详解: 首先这个系统有两个接口:lo和eth0,lo是环回接口,而我们重点关注的则是eth0这个普通网络接口;下面在看看每个子项的含义:

  • <BROADCAST,MULTICAST,UP,LOWER_UP>:
    • BROADCAST 表示该接口支持广播;
    • MULTICAST 表示该接口支持多播;
    • UP 表示该网络接口已启用;
    • LOWER_UP 表示网络电缆已插入,设备已连接至网络
    • LOOPBACK 环回接口
  • mtu 1500:最大传输单位(数据包大小)为1,500字节
  • qdisc pfifo_fast:用于数据包排队
  • state UP:网络接口已启用
  • qlen 1000:传输队列长度
  • link/ether 00:1e:4f:c8:43:fc:接口的MAC(硬件)地址
  • brd ff:ff:ff:ff:ff:ff:广播地址
  • inet 192.168.0.24/24:IPv4地址
  • brd 192.168.0.255:广播地址
  • scope global eth0:全局有效
  • valid_lft forever:IPv4地址的有效使用期限
  • preferred_lft forever:IPv4地址的首选生存期

其他:

  • dynamic enp0s25:地址是动态分配的
  • inet6 fe80::2c8e:1de0:a862:14fd/64:IPv6地址
  • scope link:仅在此设备上有效
  • valid_lft forever:IPv6地址的有效使用期限
  • preferred_lft forever:IPv6地址的首选生存期

IP管理

# 设置IP
ip address add 192.168.0.123/24 dev eth0

# 删除配置的IP
ip address del 192.168.0.123/24 dev eth0

启用/禁用网卡

# 启用被禁用的网卡
ip link set eth0 up

# 禁用网卡
ip link set eth0 down

查看路由信息

使用 route 指令

route [-nee]
route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
观察的参数:
   -n  :不要使用通讯协议或主机名,直接使用 IP 或 port number;
   -ee :使用更详细的信息来显示
增加 (add) 与删除 (del) 路由的相关参数:
   -net    :表示后面接的路由为一个网域;
   -host   :表示后面接的为连接到单部主机的路由;
   netmask :与网域有关,可以设定 netmask 决定网域的大小;
   gw      :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
   dev     :如果只是要指定由那一块网络卡联机出去,则使用这个设定,后面接 eth0 等

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG    100    0        0 ens192
10.0.1.1        0.0.0.0         255.255.255.255 UH    100    0        0 ens192
10.0.8.0        0.0.0.0         255.255.255.0   U     100    0        0 ens192
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

route add -net 192.168.100.0 netmask 255.255.255.0 dev ens192
route add default gw 192.168.1.250s

route del -net 192.168.100.0 netmask 255.255.255.0 dev ens192

输出内容详解:

  • Destination

  • Genmask Destination, Genmask 这两个玩意儿就是分别是 network 与 netmask 啦!所以这两个咚咚就组合成为一个完整的网域啰!

  • Gateway:该网域是通过哪个 gateway 连接出去的?如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的 MAC 直接传讯;如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。

  • Flags

    • U (route is up):该路由是启动的;
    • H (target is a host):目标是一部主机 (IP) 而非网域;
    • G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
    • R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
    • D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
    • M (modified from routing daemon or redirect):路由已经被修改了;
    • ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
  • Metric

  • Ref

  • Use

  • Iface 这个路由传递封包的接口

使用 ip 指令

# 查看路由信息
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG    100    0        0 ens192
10.0.1.1        0.0.0.0         255.255.255.255 UH    100    0        0 ens192
10.0.8.0        0.0.0.0         255.255.255.0   U     100    0        0 ens192
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

$ ip route show
default via 10.0.1.1 dev ens192  proto static  metric 100
10.0.1.1 dev ens192  proto static  scope link  metric 100
10.0.8.0/24 dev ens192  proto kernel  scope link  src 10.0.8.10  metric 100
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1

输出内容详解:

  • scope link
  • metric 1002:跳跃计数,确定网关的优先级,默认20,数值越小优先级越高
  • proto kernel:该路由的协议,主要有 redirect,kernel,boot,static,ra 等,其中 kernel 指的是直接由核心判断自动设定

路由配置

ip route [add|del] [IP或网域] [via gateway] [dev 装置]
选项与参数:
add|del :增加 (add) 或删除 (del) 路由的意思。
    IP或网域:可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ;
    via     :从那个 gateway 出去,不一定需要;
    dev     :由那个装置连出去,这就需要了!
    mtu     :可以额外的设定 MTU 的数值喔!

ip route add 192.168.5.0/24 dev eth0
ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
ip route add default via 192.168.1.254 dev eth0

ip route del 192.168.10.0/24
ip route del 192.168.5.0/24

# 通过 IP 地址查询路由包从哪条路由来
$ ip route get 10.0.8.13
10.0.8.13 dev ens192  src 10.0.8.10
    cache

$ ip route get 119.75.216.20
119.75.216.20 via 10.0.1.1 dev ens192  src 10.0.8.10
    cache

# 刷新路由表
ip route flush cache

显示网络统计数据

这个显示网络统计数据则是 ip 命令非常重要的一个功能,很多时候,我们都依靠该功能来进行排除网络故障。

# 显示所有网络接口的统计数据
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   
    361849729592 174114258 0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    361849729592 174114258 0       0       0       0       
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:16:3e:08:08:55 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    32345193376 115901261 0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    139742200499 114451909 0       0       0       0 

输出重点内容详解:

  • <BROADCAST,MULTICAST,UP,LOWER_UP>

    • BROADCAST 表示该接口支持广播;
    • MULTICAST 表示该接口支持多播;
    • UP 表示该网络接口已启用;
    • LOWER_UP 表示网络电缆已插入,设备已连接至网络
    • LOOPBACK
  • mtu 1500 最大传输单位(数据包大小)为1,500字节

  • qdisc pfifo_fast 用于数据包排队

  • state UP 网络接口已启用

  • mode DEFAULT 网卡模式(默认模式或者混杂模式)

  • qlen 1000 传输队列长度

  • link/ether 00:16:3e:08:08:55

  • brd ff:ff:ff:ff:ff:ff

  • RX:表示接收

    • bytes 接收的字节数
    • packets 接收的包数
    • errors 接收的带有错误的包总数
    • dropped 由于处理资源不足导致接收的丢弃的包数
    • overrun 因接收溢出(环形缓冲区)导致丢失的包;通常如果接口溢出,则表示内核中存在严重问题,或者说服务器上该网络设备的处理设备太慢
    • mcast 接收到的多播包数
  • TX:表示发送

    • bytes 发送的字节数
    • packets 发送的包数
    • errors 发送的带有错误的包总数
    • dropped 由于处理资源不足导致接发送的丢弃的包数
    • carrier 因数据链路错误导致发送失败的包数
    • collsns 因在网络上发送冲突而导致的失败数

获取一个特定网络接口的信息

# 获取一个特定网络接口的信息;在网络接口名字后面添加选项 ls 即可。使用多个选项 -s 会输出指定接口详细的信息;特别是在排除网络连接故障时,这会非常有用。
ip -s -s link ls eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:16:3e:08:08:55 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    32469801665 116402997 0       0       0       0       
    RX errors: length   crc     frame   fifo    missed
               0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    140235841575 115066014 0       0       0       0       
    TX errors: aborted  fifo   window heartbeat transns
               0        0       0       0       2 

输出重点内容详解:

  • RX errors:
    • length
    • crc
    • frame
    • fifo
    • missed
  • TX errors
    • aborted
    • fifo
    • window
    • heartbeat
    • transns

监视设备,地址和路由的状态

# ip monitor

使用 ARP 查看连接到系统的设备的 MAC 地址

# manage ARP or NDISC cache entries
ip neighbour
10.0.1.1 dev ens192 lladdr 00:50:56:9b:20:dd DELAY
  • STABLE neighbor 是有效的,但可能已经不可达,因此内核将在第一次传输时尝试对其进行检查
  • REACHABLE neighbor 是有效的,并且可达
  • DELAY 已将数据包发送到稳定 neighbor,并且内核正在等待确认

增加和删除 ARP

# Delete an ARP entry:
ip neighbour del (ip_address) dev interface
ip neighbour del 192.168.0.200 dev enp3s0

# Add an ARP entry:
ip neighbour add (ip_address) dev interface
ip neighbour add 192.168.0.200 dev enp3s0

参考