简介

ip 是个命令, ip 命令的功能很多!基本上它整合了 ifconfig 与 route 这两个命令,不过 ip 的功能更强大。属于iproute2包的一个命令,功能很强大。
官网:http://www.policyrouting.org/

语法结构

ip [ OPTIONS ] OBJECT [ COMMAND [ ARGUMENTS ]]

ip(选项)(参数)

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 | fou | macsec | tcp_metrics | token | netconf | ila |
vrf | sr }

OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec | -j[son] | -p[retty] |
-f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
-4 | -6 | -I | -D | -M | -B | -0 |
-l[oops] { maximum-addr-flush-attempts } | -br[ief] |
-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
-rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

OPTIONS选项

-V:显示指令版本信息;
-s:-stats, -statistics输出更详细的信息;可以使用多个-s来显示更多的信息
-f:-family {inet, inet6, link} 强制使用指定的协议族;
-4:-family inet的简写,指定使用的网络层协议是IPv4协议;
-6:-family inet6的简写,指定使用的网络层协议是IPv6协议;
-0:shortcut for -family link.
-o:-oneline,输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:-resolve,显示主机时,不使用IP地址,而使用主机的域名。

OBJECT对象

link :网卡信息
address:IP地址信息
neighbour:邻居表
route:路由表
rule:IP策略
maddress:多播地址
mourte:组播路由缓存条目
tunnel:IP隧道

COMMAND命令

add, delete, and show 之类的操作指令

ARGUMENTS

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

IP address

ip link show
ip link show ens32

在这里插入图片描述
qdisc(queuing discipline)显示这个网络接口使用的排队算法。noqueue表示不对数据包进行排队;noop 表示这个网络接口出于黑洞模式,也就是所有进入本网络设备的数据会直接被丢弃。qlen 是网络接口传输队列的默认长度。

  • broadcast表示该网络设备可以将数据报传送给子网内的所有主机;
  • multicast表示该网络设备具有接收和发送多目传送(multicast)的能力;
  • up表示该网络设备正在工作;
  • loopback表示这是一个回送设备,该接口发出的数据报不会被传到网络上;
  • pointtopoint表示该网络设备是一个点对点连接的一端,所有该设备发出的数据报都将被对端节点所接收,所有对端发出的数据报也将被本设备所接收。
  • promisc表示网络设备处于混杂模式,这时该设备将进行监听并将监听到的数据传递给内核,即使这些数据不是发送给该主机的。通常用于网络探测。
  • allmulti表示网络设备将接收所有多目传送的数据报,通常用于多目传送路由器。
  • noapp 这个参数在使用不同的协议时具有不同的意义。但通常表示不需要地址解析。
  • dynamic 表示该网络设备可以动态的建立和删除。
  • slave表示该网络设备与其他网络设备绑定在一起,形成逻辑上的一个网络设备。
  • link/ether表示接口硬件类型,后面是网络设备的硬件地址;
  • brd 后面的是网络设备的硬件广播地址。
ip -s -s link show
ip -s -s link show ens32

在这里插入图片描述
如上,RX和TX显示了接收和发送了多少数据。

  • bytes:表示已接收/发送的数据字节数
  • packets:表示已接收/发送的数据报数目
  • errors:表示在接收/发送时出现的错误次数,包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
  • dropped:由于资源不足而丢弃的数据包总数
  • overrun:表示在接收数据包时,因为系统出现错误或系统反应太慢而导致丢包的数目
  • mcast:收到的组播数据包总数
  • carrier:表示物理连接出错的次数
  • collsns:表示出现以太冲突的次数

ip link

语法

ip link set设备接口属性
  • ip link set dev eth0 promisc on 开启混杂模式
  • ip link set eth0 up 启用网卡
  • ip link set eth0 mtu 1500 设置MTU值,即设置最大传输单元
  • ip link set eth0 name vbird 设置网卡名,需要在网卡down的时候进行设置,意义不是很大
  • ip link set eth0 address aa:aa:aa:aa:aa:aa 设置MAC地址

ip route

用法

路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。如果数据包目的地址位于属于路由条目的的范围,以及路由的TOS等于0或者等于数据包的TOS,它就匹配路由条目。

如果一个数据包匹配多个路由条目,系统内核将按照以下规则决定选择哪个路由:

  • 范围最小的优先匹配,较大的放弃;
  • 路由TOS等于数据包TOS的匹配,不等于的放弃;
  • 如果经过上面两步的选择,还有数个路由,就选择优先值最高的路由;
  • 如果还有数个路由可供选择,就重复进行第一步。

路由表table TABLEID

从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables 中为路由表命名。

* table 0:系统保留
* table 253:称为默认路由表,表名为default。一般来说默认的路由都放在这张表。
* table 254:默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。 main表中路由记录都是普通的路由记录。而且,使用ip route配置路由时,如果不明确制定要操作的路由表,默认情况下也是主路由表(表254)进行操作。我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,也都是main表中记录。
* table 255:local。这个表保存本地和广播路由。内核会自动维护这个路由

表,通常系统管理员没有必要对它进行修改,甚至不必看到。

显示路由信息

ip route show

添加路由

ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254

在这里插入图片描述

  • 路由的目标前缀(prefix),是一个IP或者IPv6地址,也可以跟着一个斜杠和掩码长度。如果没有掩码长度,ip命令就假定是一个单一ip 地址。
  • tos TOS:定义服务类型关键词。在进行路由匹配时,内核首先比较数据包的TOS 和route 的TOS,如果没有和数据包TOS相同的路由,还可以选择TOS等于0的路由。TOS或者是一个十六进制的数字, 或者是一个由/etc/iproute2/rt_dsfield文件定义的识别符。不常用。
  • metric NUMBER:定义路由的优先值,NUMBER时一个任意的32位数字。
  • table TABLEID:同路由表
  • dev NAME:指定网卡的名字
  • via ADDRESS:指定下一跳路由器的地址。实际上,这个域的可靠性取决于路由类型。对于通常的unicast 路由,它或者是真正的下一跳路由器地址。其实就是网关IP。
  • src ADDRESS:在向目的prefix发送数据包时选择的源地址。
  • mtu MTU:设置到达目的路径的最大传输单元(MTU)。
  • scope SCOPE_VAL:路由前缀(prefix)覆盖的范围。SCOPE_VAL 可以是一个数字,也可以是/etc/iproute2/rt_scope 文件定义的一个字符串。如果没有这个参数,ip命令就会根据具体情况猜测:对于经过网关的unicast 路由,就设置为global;对于直连的unicast 路由和广播路由,就设置为link;对于本地路由,就设置为host。

删除路由

ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
ip route del default          # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由

在这里插入图片描述

替换默认路由

ip route change 0.0.0.0/0 via 192.168.10.2

ip rule

简介

在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。

基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。简单地来说,linux系统有多张路由表,而路由策略会根据一些条件,将路由请求转向不同的路由表。例如源地址在某些范围走路由表A,另外的数据包走路由表,类似这样的规则是有路由策略rule来控制。

在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级),如下:

root@debian:/home/test# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
root@debian:/home/test# cat /etc/iproute2/rt_tables |grep -v "^#"
255     local
254     main
253     default
0       unspec
  • rule 0 :匹配任何条件的数据包,查询路由表local(table id = 255)。rule 0非常特殊,不能被删除或者覆盖。 查询路由表local(ID 255) | 路由表local 是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。
  • rule 32766:匹配任何条件的数据包,查询路由表main(ID 254),路由表main(ID 254)是一个通常的表,包含所有的无策略路由。平时使用route add添加的路由都是加到这个表里面的。
  • rule 32767:匹配任何条件的数据包,查询路由表default(ID 253),路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理这个规则也可以删除。

备注:在linux系统中是按照rule的优先级顺序依次匹配。假设系统中只有优先级为0,32766及32767这三条规则。那么系统首先会根据规则0在本地路由表里寻找路由,如果目的地址是本网络,或是广播地址的话,在这里就可以找到匹配的路由;如果没有找到路由,就会匹配下一个不空的规则,在这里只有32766规则,那么将会在主路由表里寻找路由;如果没有找到匹配的路由,就会依据32767规则,即寻找默认路由表;如果失败,路由将失败。

用法

Usage: ip rule [ list | add | del ] SELECTOR ACTION 
SELECTOR := [ from PREFIX 数据包源地址] [ to PREFIX 数据包目的地址] [ tos TOS 服务类型][ dev STRING 物理接口]
            [ pref NUMBER 优先级 ] [fwmark MARK iptables 标签]

ACTION := [ table TABLE_ID 指定所使用的路由表] [ nat ADDRESS 网络地址转换][ prohibit 丢弃该表| reject 拒绝该包| unreachable 丢弃该包]
[ flowid CLASSID ]

TABLE_ID := [ local | main | default | NUMBER ]

SELECTOR具体参数如下:

  • From — 源地址
  • To — 目的地址(这里是选择规则时使用,查找路由表时也使用)
  • Tos — IP包头的TOS(type of sevice)域
  • Dev — 物理接口
  • Fwmark — 防火墙参数

ACTION动作:

  • Table 指明所使用的表
  • Nat 透明网关
  • Action prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
  • Reject 单纯丢弃该包
  • Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息

增加策略

1、指定优先级

第一条命令将向规则链增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由,这条规则的优先级是32800.

第二条命令将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112, tos等于0x10的包,使用路由表2,这条规则的优先级是32801,动作是丢弃。

root@debian:~# ip rule add from 0/0 table 1 pref 32800
root@debian:~# ip rule add from 192.168.3.112/32 tos 0x10 table 2 pref 32801 prohibit
root@debian:~# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32800:  from all lookup 1
32801:  from 192.168.3.112 tos 0x10 lookup 2 prohibit

2、不指定优先级

而添加策略时,是可以不指定pref 优先级的,那么系统就会默认创建rule的ID,在main的前面往前移一位。

root@debian:~# ip rule  add from 171.43.122.52 tab 200
root@debian:~# ip rule
0:      from all lookup local
32765:  from 171.43.122.52 lookup 200
32766:  from all lookup main
32767:  from all lookup default

3、iptables 的 set-mark功能

还可以借助iptables来实现其他不一样的功能。

使用Netfilter的managle机制针对特定的数据包设置MARK值,在此将3389端口的数据包的MARK值设置为1,然后将fwmark 1的规则应用到ip rule上即可。这样就可以实现特定程序的流量走不同的路线。

root@debian:~# iptables -t mangle -A OUTPUT -p tcp --dport 8080 -j MARK --set-mark 1
root@debian:~# ip rule add fwmark 1 table 20 pref 20
root@debian:~# ip route add default via 171.43.122.52 table 20
root@debian:~# ip rule
0:      from all lookup local
20:     from all fwmark 0x1 lookup 20
32765:  from 171.43.122.52 lookup 200
32766:  from all lookup main
32767:  from all lookup default
root@debian:~# iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 MARK set 0x1

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

实例

公司内网要求192.168.0.100以内的使用 10.0.0.1 网关上网(电信),其他IP使用 20.0.0.1 (网通)上网。假定10.0.0.1以及20.0.0.1都是在同一张网卡上面。

ip route add default via 20.0.0.1 #添加默认网关,未指定table id,就是main表,
ip route add default via 10.0.0.1 table 20
ip rule add fwmark 20 table 20
iptable -t mangle -I PREROUTING -s 192.168.0.0-192.168.0.100 -j MARK --set-mark 2 #将源IP192.168.0.0~100在PREROUTING链就加上标记0x2

因为mangle的处理是优先于 nat 和fiter表的,所以相应数据包到达之后先打上标记,上例的标记为0x2,之后再通过ip rule规则。对应的数据包使用相应的路由表进行路由,查到有符合相应的ip rule规则,最后读取路由表id为2的信息,将数据包送出网关。

总结

不要混淆路由表(route)和规则(rule):ip rule规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。

经典用法:

ip route add default via 192.168.10.1 dev eth2 table 200
ip rule add from 192.168.10.100 lookup 200
  • 第一行表示,先建立一个路由表,其table名为200,这个表里面的默认路由是192.168.10.1
  • 第二行表示 ,新建一个ip的策略,从192.168.10.100发出来的流量都使用路由表200这张图。
  • 由于ip rule数字越低,其优先级最高,而路由main(254)表的ip rule规则是32766,如果没有指定ip rule的优先级,其默认是从32765开始加起来的,所以一般就认为,加IP策略会比route -n看到的优先级再高。如果要指定优先级,可以加上pref number参数。
  • linux上面的路由表只有255个,没有优先级的;而ip rule的策略表是没有限制的,数字越低,其优先级最高。

ip tunnel

简介

IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。移动IPv4主要有三种隧道技术,它们分别是:IP in IP、最小封装以及通用路由封装。

Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的):ipip、gre、sit 。这三种隧道技术都需要内核模块 tunnel4.ko 的支持。

  • ipip 需要内核模块 ipip.ko,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据网上查到信息,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。
  • GRE 需要内核模块 ip_gre.ko,GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。
  • sit 他的作用是连接 ipv4 与 ipv6 的网络。个人感觉不如gre使用广泛 。
[root@test ~]#  modinfo sit
filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/net/ipv6/sit.ko.xz
alias:          netdev-sit0
alias:          rtnl-link-sit
license:        GPL
retpoline:      Y
rhelversion:    7.6
srcversion:     DEA388D7EAE8B589CC2FA9C
depends:        ip_tunnel,tunnel4
intree:         Y
vermagic:       3.10.0-957.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo:   sha256
parm:           log_ecn_error:Log packets received with corrupted ECN (bool)
[root@test ~]# modinfo ipip
filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/net/ipv4/ipip.ko.xz
alias:          netdev-tunl0
alias:          rtnl-link-ipip
license:        GPL
retpoline:      Y
rhelversion:    7.6
srcversion:     48AB6E8CCBFD23E0B62DD2A
depends:        ip_tunnel,tunnel4
intree:         Y
vermagic:       3.10.0-957.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo:   sha256
parm:           log_ecn_error:Log packets received with corrupted ECN (bool)
[root@test ~]# modinfo ip_gre
filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/net/ipv4/ip_gre.ko.xz
alias:          netdev-gretap0
alias:          netdev-gre0
alias:          rtnl-link-gretap
alias:          rtnl-link-gre
license:        GPL
retpoline:      Y
rhelversion:    7.6
srcversion:     9D42148975517E1A9D81DD6
depends:        ip_tunnel,gre
intree:         Y
vermagic:       3.10.0-957.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo:   sha256
parm:           log_ecn_error:Log packets received with corrupted ECN (bool)

ipv6 to ipv4

首先在https://tunnelbroker.net/ 注册一个账号,然后create tunnel即可。

modprobe ipv6
ip tunnel add he-ipv6 mode sit remote 66.220.18.42 local 66.98.118.159 ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:c:1ad6::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr

配置完成之后,可以在nginx开启监听ipv6的80口,就可以实现ipv6的通信了。

server
	{
		listen 80;
		listen [::]:80;
		server_name www.xmxyk.net xmxyk.net w6.xmxyk.net;

ip neighbour

用法

邻接(neighbour)对象实现同一网段协议地址和链路层地址的绑定。在内核中,这些条目被组织到表中。IPv4的相邻表也被叫做ARP表。ip neighbour命令支持对条目及其属性的显示、添加和删除。

ip [ OPTIONS ] neigh  { COMMAND | help }

ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ] [ nud { permanent | noarp | stale | reachable } ] | proxy ADDR } [ dev DEV ]

ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]

ip neighbour add -- 添加一个新的邻接条目

ip neighbour change--修改一个现有的条目

ip neighbour replace--替换一个已有的条目

显示邻居信息

root@debian:~# ip neigh
192.168.10.2 dev ens34 lladdr 00:50:56:f4:bc:b3 STALE
192.168.10.100 dev ens34 lladdr 00:50:56:c0:00:08 DELAY
192.168.10.254 dev ens34 lladdr 00:50:56:ec:b2:95 DELAY
192.168.10.2 dev ens32 lladdr 00:50:56:f4:bc:b3 STALE
  • to ADDRESS(default):相邻的协议地址。可以是IPv4或者IPv6。
  • dev NAME:和相邻节点连接的设备。
  • lladdr LLADDRESS:邻居的链路层地址。LLADDRESS可以为空。
  • nud NUD_STATE 邻接条目的状态。nud 是Neighbour Unreachability
  • Detection 的缩写。nud all 表示所有的状态。这个选项可以使用多次。如果缺少这个选项,ip 会列出除
  • none和noarp 状态的所有条目。可能的状态包括:
    • none:网络邻居的状态为空。
    • incomplete:这个邻居正在被解析。
    • reachable:网络邻居有效并且可达。 stale:邻居有效,但是可能不可达。因此,内核将在首次传输时进行检查。
    • delay:一个数据包已经发到处于stale 的网络邻居,内核在等待应答信息。 probe:delay
    • 计时器过期,还没有收到确认信息。内核开始使用ARP/NDISC消息包探测这个网络邻居。 failed:解析失败。
    • noarp:网络邻居有效,不必检查。 permanent:这是一个noarp 条目,只有系统管理员可以从邻接表中把它删除。
    • 在IPV6网络邻居可以有一个叫做router 的标志,它表示这个节点是一个IPv6路由器。 使用nud all来显示所有的邻居信息。
root@debian:~# ip ne show nud all
192.168.10.2 dev ens34 lladdr 00:50:56:f4:bc:b3 STALE
192.168.10.100 dev ens34 lladdr 00:50:56:c0:00:08 DELAY
192.168.10.254 dev ens34 lladdr 00:50:56:ec:b2:95 STALE
192.168.10.2 dev ens32 lladdr 00:50:56:f4:bc:b3 STALE
ff02::16 dev ens32 lladdr 33:33:00:00:00:16 NOARP
ff02::16 dev ens34 lladdr 33:33:00:00:00:16 NOARP
ff02::2 dev ens34 lladdr 33:33:00:00:00:02 NOARP
ff02::2 dev ens32 lladdr 33:33:00:00:00:02 NOARP
ff02::1:ff4c:bbdb dev ens34 lladdr 33:33:ff:4c:bb:db NOARP
ff02::1:ff4c:bbd1 dev ens32 lladdr 33:33:ff:4c:bb:d1 NOARP

增加邻居信息

root@debian:~# ip neigh add 192.168.10.3 lladdr 0:0:0:0:0:1 dev ens32 nud perm
root@debian:~# ip neigh show
192.168.10.2 dev ens34 lladdr 00:50:56:f4:bc:b3 STALE
192.168.10.100 dev ens34 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.10.3 dev ens32 lladdr 00:00:00:00:00:01 PERMANENT
192.168.10.254 dev ens34 lladdr 00:50:56:ec:b2:95 STALE
192.168.10.2 dev ens32 lladdr 00:50:56:f4:bc:b3 STALE
root@debian:~# ip neigh chg 192.168.10.3 dev ens32 nud reachable
root@debian:~# ip neigh show
192.168.10.2 dev ens34 lladdr 00:50:56:f4:bc:b3 STALE
192.168.10.100 dev ens34 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.10.3 dev ens32 lladdr 00:00:00:00:00:01 REACHABLE
192.168.10.254 dev ens34 lladdr 00:50:56:ec:b2:95 STALE
192.168.10.2 dev ens32 lladdr 00:50:56:f4:bc:b3 STALE

删除邻居信息

执行了删除命令之后,被删除的条目不会马上消失,它会在系统的下次垃圾收集时被删除。如果被操作的条目正在使用,将不能被删除。

root@debian:~# ip neigh del 192.168.10.100 dev ens34
root@debian:~# ip neigh show
192.168.10.100 dev ens34 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.10.254 dev ens34 lladdr 00:50:56:ec:b2:95 STALE

如果试图删除或者手工修改一个由内核建立的noarp 条目,会导致一些不可预知的行为。

也可以使用flash这个命令来删除,其参数和ip neigh sh相同。不同之处是,如果没有参数,它什么也不会做。而且,默认情况下,被删除的条目不包括处于permanent和noarp状态的条目。

root@debian:~# ip -s -s neigh flush 10.0.0.3
Nothing to flush.
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐