Linux ip命令示例

时间:2020-01-09 10:41:40  来源:igfitidea点击:

如何使用ip命令行实用程序在Linux操作系统上显示或配置网络,路由和隧道?
如何在Linux操作系统上使用TCP/IP配置或显示网络的网络接口参数?

ip命令用于在Linux操作系统上为网络接口分配地址和/或配置网络接口参数。
该命令替换了现代Linux发行版上的旧的好,现在不推荐使用的ifconfig命令。

语法

ip OBJECT COMMAND
 ip [options] OBJECT COMMAND
 ip OBJECT help

了解ip命令的对象语法

对象可以是以下任意一种,并且可以全部或缩写形式书写:

对象缩写形式作用
linkl网络设备。
addressaaddr设备上的协议(IP或IPv6)地址。
addrlabeladdrl用于协议地址选择的标签配置。
neighbournneighARP或NDISC缓存条目。
router路由表条目。
ruleru路由策略数据库中的规则。
maddressmmaddr多播地址。
mroutemr多播路由缓存条目。
tunneltIP隧道。
xfrmx用于IPsec协议的框架。

要获取有关每个对象的信息,请使用help命令,如下所示:

ip OBJECT help
ip OBJECT h
ip a help
ip r help

警告:必须谨慎执行以下描述的命令。
如果输入错误,将失去与服务器的连接。

ip命令示例

显示有关所有网络接口的信息

执行以下命令以列出并显示所有网络接口上关联的所有ip地址:

ip a

或者

ip addr

您可以使用以下语法在IPv4和IPv6之间进行选择:

### Only show TCP/IP IPv4  ##
ip -4 a
 
### Only show TCP/IP IPv6  ###
ip -6 a

还可以指定并列出特定的接口TCP/IP详细信息:

### Only show eth0 interface ###
ip a show eth0
ip a list eth0
ip a show dev eth0
 
### Only show running interfaces ###
ip link ls up

为接口分配IP地址

添加IPv4/IPv6地址的语法如下:

ip a add {ip_addr/mask} dev {interface}

要将192.168.1.200/255.255.255.0分配给eth0,请执行:

ip a add 192.168.1.200/255.255.255.0 dev eth0

或者

ip a add 192.168.1.200/24 dev eth0

在接口上添加广播地址

缺省情况下,除非明确请求,否则ip命令不会设置任何广播地址。
因此,语法如下设置广播地址:

ip addr add brd {ADDDRESS-HERE} dev {interface}
ip addr add broadcast {ADDDRESS-HERE} dev {interface}
ip addr add broadcast 172.20.10.255 dev dummy0

通过设置/重置接口prex的主机位,可以使用特殊符号(例如," +"和"-")代替广播地址。
在此示例中,将地址192.168.1.50和网络掩码255.255.255.0(/24)(带有标准广播)和标签eth0Home添加到接口eth0:

ip addr add 192.168.1.50/24 brd + dev eth0 label eth0Home

您可以如下设置回送设备的回送地址:

ip addr add 127.0.0.1/8 dev lo brd + scope host

从接口删除/删除IP地址

删除IPv4/IPv6地址的语法如下:

ip a del {ipv6_addr_OR_ipv4_addr} dev {interface}

要从eth0删除192.168.1.200/24,请执行:

ip a del 192.168.1.200/24 dev eth0

从接口刷新IP地址

如上所述,您可以一对一删除或远程处理IPv4/IPv6地址。
但是,flush命令可以根据给定条件删除IP地址作为刷新地址。
例如,您可以使用以下命令从专用网络192.168.1.0/24删除所有IP地址:

ip -s -s a f to 192.168.1.0/24

输出示例:

2: eth0    inet 192.168.1.201/24 scope global secondary eth0
2: eth0    inet 192.168.1.200/24 scope global eth0

*** Round 1, deleting 2 addresses ***
*** Flush is complete after 1 round ***

您可以在所有ppp(点对点)接口上禁用IP地址:

ip -4 addr flush label "ppp*"

这是所有以太网接口的另一个示例:

ip -4 addr flush label "eth*"

如何将设备的状态更改为UP或DOWN?

语法如下:

ip link set dev {DEVICE} {up|down}

要降低设备eth1的状态,请执行:

ip link set dev eth1 down

要提高设备eth1的状态,请执行:

ip link set dev eth1 up

如何更改设备的txqueuelen?

您可以使用ifconfig命令或ip命令来设置设备的传输队列的长度,如下所示:

ip link set txqueuelen {NUMBER} dev {DEVICE}

在此示例中,将eth0的默认txqueuelen从1000更改为10000:

ip link set txqueuelen 10000 dev eth0
ip a list eth0

如何更改设备的MTU?

对于千兆网络,可以设置最大传输单位(MTU)大小(JumboFrames),以获得更好的网络性能。
语法为:

ip link set mtu {NUMBER} dev {DEVICE}

要将设备eth0的MTU更改为9000,请执行:

ip link set mtu 9000 dev eth0
ip a list eth0

输出示例:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:08:9b:c4:30:30 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
    inet6 fe80::208:9bff:fec4:3030/64 scope link 
       valid_lft forever preferred_lft forever

显示邻居/弧缓存

语法为:

ip n show
ip neigh show

最后一个字段显示此条目的"邻居"计算机的状态:

  • STALE邻居是有效的,但可能已经不可达,因此内核将在第一次传输时尝试对其进行检查。
  • DELAY包已经发送到过时的邻居,内核正在等待确认。
  • REACHABLE邻居是有效的,显然是可以到达的。

添加一个新的ARP条目

语法为:

ip neigh add {IP-HERE} lladdr {MAC/LLADDRESS} dev {DEVICE} nud {STATE}

在此示例中,在设备eth0上为邻居192.168.1.5添加永久ARP条目:

ip neigh add 192.168.1.5 lladdr 00:1a:30:38:a8:00 dev eth0 nud perm

其中:

邻居状态(nud)含义
permanent邻居条目永远有效,只能通过管理方式将其删除
noarp邻居条目有效。不会尝试验证此条目,但是可以在其生存期到期时将其删除。
stale邻居条目有效但可疑。如果ip neigh选项有效,并且该命令不改变地址,则不会改变邻居状态。
reachable邻居条目在可达超时超时到期之前一直有效。

删除ARP表项

使设备eth1上的邻居192.168.1.5的ARP条目无效或删除的语法如下。

ip neigh del {IPAddress} dev {DEVICE}
ip neigh del 192.168.1.5 dev eth1

设备eth1上邻居192.168.1.100的可达状态更改

ip neigh chg 192.168.1.100 dev eth1 nud reachable

刷新ARP条目

此flush或f命令通过指定某些条件来刷新邻居/arp表。
语法为:

ip -s -s n f {IPAddress}

在此示例中,刷新邻居/arp表

ip -s -s n f 192.168.1.5

或者

ip -s -s n flush 192.168.1.5

ip route:路由表管理命令

使用以下命令来管理或操作内核路由表。

显示路由表

要显示路由表的内容:

ip r
ip r list
ip route list
ip r list [options]
ip route

输出示例:

default via 192.168.1.254 dev eth1 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10

显示192.168.1.0/24的路由:

ip r list 192.168.1.0/24

输出示例:

192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10

新增路由

语法为:

ip route add {NETWORK/MASK} via {GATEWAYIP}
ip route add {NETWORK/MASK} dev {DEVICE}
ip route add default {NETWORK/MASK} dev {DEVICE}
ip route add default {NETWORK/MASK} via {GATEWAYIP}

通过网关192.168.1.254向网络192.168.1.0/24添加一条普通路由:

ip route add 192.168.1.0/24 via 192.168.1.254

要通过eth1.25网络接口连接的192.168.1.254网关路由所有流量,请执行以下操作:

ip route add 192.168.1.0/24 dev eth0

删除路由

删除默认网关的语法如下:

ip route del default

在此示例中,删除在上一小节中创建的路由:

ip route del 192.168.1.0/24 dev eth0

如何在Linux上更改MAC地址

可以如下更改Linux网络接口卡(NIC)的MAC地址:

NIC="eno1" ## &lt-- My NIC name ##
ip link show $NIC
ip link set dev $NIC down
## set new MAC address ##
ip link set dev $NIC address XX:YY:ZZ:AA:BB:CC
ip link set dev $NIC up