简介
ip命令是对ifconfig的进化,属于iproute2包的一个命令,功能很强大,特此进行简单的说明。
主要的参考文档是官方文档,http://www.policyrouting.org/iproute2.doc.html。
语法结构
一般情况下,直接使用yum install iproute
即可安装ip等相关命令了。如果 要想更新版本,可以在https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/
下载。
1 | ip [ OPTIONS ] OBJECT [ COMMAND [ ARGUMENTS ]] |
ip命令,除了OBJECT之外,都是可以省略的。
默认情况下,安装好iproute之后,有如下的配置文件:
1 | [root@xmxyk ~]#ll /etc/iproute2 |
OPTIONS选项
有如下选项,常用的是-4 -o
等:
1 | -V:显示指令版本信息; |
- 查看版本
centos 7.1 的默认版本是iproute-3.10.0,此版本是2013年出来的,现在(2019年5月)最新的版本是v5.0.0
1 | [root@xmxyk ~]#rpm -qf /usr/sbin/ip |
- -o 显示一行
使用-o显示一行,只显示ipv4、是global以及dynamic动态地址的eth0的IP信息。
1 | [root@xmxyk ~]#ip -o -4 address show eth0 scope global dynamic |
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
用法
1 | ip [ OPTIONS ] address { COMMAND | help } |
- dev STRING:指定要进行操作的网络设备名称
- IFADDR:协议地址,地址的格式由使用的协议所决定,比如在ipv4协议中,地址的格式为用小数点分隔的四个十进制数,后面可以用/连接子网掩码的位数,比如192.168.1.100/24。
- peer address:使用点对点连接时对端的协议地址。
- broadcast address:协议广播地址,可以简写成brd,此外可以简单的在后面加上“+”表示广播地址由协议地址主机位全置1组成,“-”则表示主机位全置0。
- label:装置的别名,为了和linux 2.0中的别名相兼容,该标志由该网络设备名称开头,后面用“:”接上地址名称,比如eth0:3等等。
- scope:地址作用范围,可能的值有:
- global:允许来自所有来源的连接,加IP时,默认值
- site:仅支持 IPv6 ,仅允许本主机的连接
- link:仅允许本装置自我连接
- host:仅允许本主机内部的连接
ip addr show显示IP信息
IPV4中,有Primary address和Secondary address之分,如下使用ip -o -4 addr show dev eth0 secondary
就只会显示子IP地址。
标志:
- secondary:为输出的数据包选择默认源地址时,内核不使用这个地址。如果一个设备已经有了一个地址,又给它设置了同一网段的不同地址,第二个地址就成为从(secondary)地址。例如:eth0已经有一个地址192.168.1.108/24 ,如果又给它一个地址192.168.1.3/24,192.168.1.3/24 的就会被内核标记为从地址。
- dynamic:这个地址是通过无状态的自动配置建立的(stateless autoconfiguration)。如果地址仍然有效,在输出中,还包括两个时间信息。preferred_lft 期满后,地址就会变成deprecated状态;valiid_lft期满后,地址将失效。
- deprecated:这个地址是不允许的,也就是说,地址虽然有效,但是不能使用它建立新的连接。
- tentative:由于重复地址监测还没有完成或者监测失败,这个地址不能使用。
Primary与Secondary的区别:
- 在每一个接口上可以配置多个Primary地址和多个Secondary地址。
- 对一个特定的网络掩码(例子中的网络掩码为/24),只能有一个Primary地址。
- 当删除一个Primary地址时,所有相关的Secondary地址也被删除。但通过/proc可以配置一个选项,在当前Primary地址被删除时可以将Secondary地址提升为Primary地址。
- 当主机为本地生成的流量选择源IP地址时,只考虑Primary地址。
valid_lft为地址的有效使用期限,preferred_lft是地址的首选生存期。
1 | [root@xmxyk ~]#ip -4 -o addr show eth0 |
如果想实现主用IP删除时,辅助IP自动转成主用IP,可以使用promote_secondaries=1,其使用就是晋升辅助ip地址。
1 | [root@xmxyk ~]#sysctl -a |grep promote_secondaries |
另外,ip alias和secondary ip address是两种不同的实现方式,用来在Linux系统中给同一个物理网卡增加多个ip地址。ip alias是由ifconfig程序来创建和维护的,而secondary ip address则是有ip程序来创建和维护的。ip addr add 创建的scondary ip address不能在ifconfig -a中看到,反过来,ifconfig创建的ethX:Y却能在ip addr show中看到。
ip addr add添加IP
1 | [root@localhost tmp]# ip addr add 198.19.128.20/24 dev eth0 |
如上,添加了2个同段IP之后,第二个IP198.19.128.21
就显示为secondary的IP了。
删除IP
- 删除指定的IP:ip addr del 198.19.128.20/24 dev eth0
- 删除所有的IP:ip address flush
- 删除以eth0开头的IP:ip -4 addr flush label “eth*”
- 删除动态的IPV6的IP:ip -6 addr flush dynamic
ip link
ip link show显示接口信息
可以使用-s 来显示 网卡数据库的统计信息。
1 | [root@xmxyk ~]#ip link show eth0 |
qdisc(queuing discipline)显示这个网络接口使用的排队算法。noqueue表示不对数据包进行排队;noop 表示这个网络接口出于黑洞模式,也就是所有进入本网络设备的数据会直接被丢弃。qlen 是网络接口传输队列的默认长度。
- up表示该网络设备正在工作;
- loopback表示这是一个回送设备,该接口发出的数据报不会被传到网络上;
- broadcast表示该网络设备可以将数据报传送给子网内的所有主机;
- pointtopoint表示该网络设备是一个点对点连接的一端,所有该设备发出的数据报都将被对端节点所接收,所有对端发出的数据报也将被本设备所接收。
- multicast表示该网络设备具有接收和发送多目传送(multicast)的能力;
- promisc表示网络设备处于混杂模式,这时该设备将进行监听并将监听到的数据传递给内核,即使这些数据不是发送给该主机的。通常用于网络探测。
- allmulti表示网络设备将接收所有多目传送的数据报,通常用于多目传送路由器。
- noapp 这个参数在使用不同的协议时具有不同的意义。但通常表示不需要地址解析。
- dynamic 表示该网络设备可以动态的建立和删除。
- slave表示该网络设备与其他网络设备绑定在一起,形成逻辑上的一个网络设备。
- link/ether表示接口硬件类型,后面是网络设备的硬件地址;
- brd 后面的是网络设备的硬件广播地址。
1 | [root@xmxyk ~]#ip -s -s link show eth0 |
如上,RX和TX显示了接收和发送了多少数据。
- bytes:表示已接收/发送的数据字节数
- packets:表示已接收/发送的数据报数目
- errors:表示在接收/发送时出现的错误次数,包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
- dropped:由于资源不足而丢弃的数据包总数
- overrun:表示在接收数据包时,因为系统出现错误或系统反应太慢而导致丢包的数目
- mcast:收到的组播数据包总数
- carrier:表示物理连接出错的次数
- collsns:表示出现以太冲突的次数
ip link set设备接口属性
- ip link set dev eth0 promisc on 开启混杂模式
- ip link set eth0 up 启用网卡
1 | [root@localhost tmp]# 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的匹配,不等于的放弃;
- 如果经过上面两步的选择,还有数个路由,就选择优先值最高的路由;
- 如果还有数个路由可供选择,就重复进行第一步。
1、路由类型TYPE
路由的设置以及其它的可选属性都依赖于路由类型。最重要的路由类型是unicast 路由,这种类型的路由表示到另外主机的真实路由。一般情况下,通常的路由表只有这种类型的路由条目。不过,还存在其它类型的路由,使用的语法也不相同。Linux-2.2理解以下几种类型的路由:
- unicast:这种类型的路由描述到目的地址的真实路径。可以理解为单播,一般情况下就是这个模式。
- unreachable:这些目的地址是不可达的。如果发过去的数据包都被丢弃并且收到ICMP信息host unreachable,目的地址就会被标记为不可达。在这种情况下,本地发送者将返回EHOSTUNREACH错误。
- blackhole 这些目的地址不可达,而且发过去的数据包都被丢弃。在这种情况下,本地发送者将返回EINVAL错误。
- prohibit 这些路由是不可达的。发过去的数据包都被丢弃,而且产生ICMP 信息communication administratively prohibited。本地发送者会返回EACCESS错误。
- local:目的地址被分配给本机。数据包通过回环被投递到本地。
- broadcast:目的地址是广播地址,数据包作为链路广播发送。
- throw:和策略规则(policy rule)一块使用的控制路由。如果选择了这种路由,就会认为没有发现路由,在这个表中的查询就会被终止。没有找到策略路由就相当于在路由表中没有找到路由,数据包会被丢弃,并产生ICMP信息net unreachable。本地发送者会返回ENETUNREACH 错误。
- nat:特定的NAT路由。目标地址属于哑地址(或者称为外部地址),在转发前需要进行地址转换。
- anycast:目标是anycast地址,被分配给本机。这类地址和本地地址大同小异,不同的是这类地址不能用于任何数据包的源地址。
- multicast:使用多播路由。在普通的路由表中,这种路由并不存在。
2、路由表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。这个表保存本地和广播路由。内核会自动维护这个路由
表,通常系统管理员没有必要对它进行修改,甚至不必看到。
3、路由协议RTPROTO
RTPROTO可以是一个数字,也可以是/etc/iproute2/rt_protos
文件定义的一个字符串。如果使用时没有提供这个参数,ip命令就使用默认值boot(也就是说,ip命令认为添加路由的人不知道自己做了些什么)。有些协议值有其固定的解释:
- redirect—路由是由ICMP重定向加入的;
- kernel—路由是由内核在自动配置期间加入的;
- boot—路由是启动过程中加入的。如果一个路由监控程序将要启动,这些路由都会被清除;
- static—为了覆盖动态路由,由系统管理员手工添加的路由。路由监控程序也会优先考虑这类路由,甚至可能通告给其对端;
- ra—路由是通过路由发现协议加入的 (Router Discovery Protocol) 。
- 其它的值没有保留,系统管理员可以自由分配(或者不分配)给协议标记。至少,路由监控程序应该注意对一些唯一协议值的设置,这些协议值在rtnetlink.h文件或者rt_protos数据库中分配。
手工加的静态路由并没有显示路由协议,这是为什么呢?
显示路由信息
1 | [root@localhost ~]# ip route show |
添加路由信息
添加路由的可用参数如下:
- 路由的目标前缀(prefix),是一个IP或者IPv6地址,也可以跟着一个斜杠和掩码长度。如果没有掩码长度,ip命令就假定是一个单一ip 地址。
1 | [root@localhost ~]# ip route add 114.114.114.114 via 192.168.3.3 |
- 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。
还有一些其他参数,不常用,就不介绍了。
删除路由
如下,网段也是可以简写的。
1 | [root@localhost ~]# ip route del 114.114.114.114 |
还可以使用ip route flush 批量删除路由。
1 | ip route flush [dev IFACE] [VIA PREFIX] |
替换默认路由
1 | [root@localhost ~]# ip route change 0.0.0.0/0 via 192.168.1.1 |
ip rule
简介
在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。
基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。简单地来说,linux系统有多张路由表,而路由策略会根据一些条件,将路由请求转向不同的路由表。例如源地址在某些范围走路由表A,另外的数据包走路由表,类似这样的规则是有路由策略rule来控制。
在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级),如下:
1 | [root@instance-3 ~]# ip rule |
- 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规则,即寻找默认路由表;如果失败,路由将失败。
用法
1 | Usage: ip rule [ list | add | del ] SELECTOR ACTION |
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,动作是丢弃。
1 | [root@xmxyk ~]#ip rule add from 0/0 table 1 pref 32800 |
2、不指定优先级
而添加策略时,是可以不指定pref 优先级的,那么系统就会默认创建rule的ID,在main的前面往前移一位。
1 | [root@xmxyk ~]#ip rule add from 144.34.167.181 tab 200 |
3、iptables 的 set-mark功能
还可以借助iptables来实现其他不一样的功能。
使用Netfilter的managle机制针对特定的数据包设置MARK值,在此将3389端口的数据包的MARK值设置为1,然后将fwmark 1的规则应用到ip rule上即可。这样就可以实现特定程序的流量走不同的路线。
1 | [root@xmxyk ~]#iptables -t mangle -A OUTPUT -p tcp --dport 3389 -j MARK --set-mark 1 |
4、实例
公司内网要求192.168.0.100以内的使用 10.0.0.1 网关上网(电信),其他IP使用 20.0.0.1 (网通)上网。假定10.0.0.1以及20.0.0.1都是在同一张网卡上面。
1 | ip route add default via 20.0.0.1 #添加默认网关,未指定table id,就是main表, |
因为mangle的处理是优先于 nat 和fiter表的,所以相应数据包到达之后先打上标记,上例的标记为0x2,之后再通过ip rule规则。对应的数据包使用相应的路由表进行路由,查到有符合相应的ip rule规则,最后读取路由表id为2的信息,将数据包送出网关。
总结
不要混淆路由表(route)和规则(rule):ip rule规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。
经典用法:
1 | ip route add default via 192.168.1.1 dev eth2 table 200 |
- 第一行表示,先建立一个路由表,其table名为200,这个表里面的默认路由是192.168.1.1
- 第二行表示 ,新建一个ip的策略,从192.168.1.195发出来的流量都使用路由表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使用广泛 。
实例
1 | graph TB |
如上图所示,有2台服务器eth0都是交换机互连,但eth1属于不同的网段,现在需要将2个网络打通。
在serverA上面做如下配置:
1 | modprobe ip_gre |
在serverB上面做如下配置:
1 | modprobe ip_gre |
这样配置之后,一条gre的隧道就打通了。同时,这2台的eth1的网络就可以互通了。从serverB上面Ping serverA,可以看到有4个包,一个request就有2个包,这是由于经过了gre,需要再次封装。
现在需要serverA 去访问serverC的资源,所以现在需要在serverB上面开启包转发功能,这样就可以通信了。
1 | [root@client ~]# iptables -t nat -I POSTROUTING -s 192.168.20.20 -d 192.168.19.100 -j MASQUERADE |
但是C上面就没有办法跟A通信了。
ipv6 to ipv4
首先在https://tunnelbroker.net/上面注册一个账号,然后create tunnel即可。
1 | modprobe ipv6 |
配置完成之后,可以在nginx开启监听ipv6的80口,就可以实现ipv6的通信了。
1 | server |
ip neighbour
用法
邻接(neighbour)对象实现同一网段协议地址和链路层地址的绑定。在内核中,这些条目被组织到表中。IPv4的相邻表也被叫做ARP表。ip neighbour命令支持对条目及其属性的显示、添加和删除。
1 | ip [ OPTIONS ] neigh { COMMAND | help } |
显示邻居信息
1 | [root@pxe-client2 ~]# ip neigh |
- 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来显示所有的邻居信息。
1 | [root@localhost ~]# ip ne show nud all |
使用-statistics选项可以显示很多有用的信息
1 | [root@localhost ~]# ip -s neigh show 192.168.31.1 |
输出信息里面多了ref和用斜缸分开的三个时间。ref表示有多少用户使用这个条目;三个时间分别是使用时间、确认时间和刷新时间。上例表示条目5秒之前使用过,0秒之前确认过,3秒之前被更新过了。
增加邻居信息
在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目
1 | [root@localhost ~]# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm |
删除邻居信息
执行了删除命令之后,被删除的条目不会马上消失,它会在系统的下次垃圾收集时被删除。如果被操作的条目正在使用,将不能被删除。
1 | [root@localhost ~]# ip neigh del 10.0.0.3 dev eth0 |
如果试图删除或者手工修改一个由内核建立的noarp 条目,会导致一些不可预知的行为。
也可以使用flash这个命令来删除,其参数和ip neigh sh相同。不同之处是,如果没有参数,它什么也不会做。而且,默认情况下,被删除的条目不包括处于permanent和noarp状态的条目。
1 | [root@localhost ~]# ip -s -s neigh flush 10.0.0.3 |
参考资料
http://linux-ip.net/html/tools-ip-link.html
overrun的问题处理:https://blog.csdn.net/yujin2010good/article/details/78478982
http://blog.hyfather.com/blog/2013/03/04/ifconfig/
Linux 网络堆栈的排队机制: http://blog.jobbole.com/62917/
Linux流量控制:http://blog.chinaunix.net/uid/10167808/sid-1428-list-3.html
https://wiki.linuxfoundation.org/networking/iproute2
https://github.com/shemminger/iproute2
http://www.policyrouting.org/iproute2.doc.html
https://escapelife.github.io/posts/c0629c9.html
https://www.west.cn/www/info/18325-1.htm
Linux网卡包计数器清零(卸载/重加载驱动):https://blog.csdn.net/u013908944/article/details/79665223
重置linux网卡流量统计:https://hqidi.com/45.html
https://blog.csdn.net/wangjianno2/article/details/72853735
https://blog.csdn.net/u012758088/article/details/76255543
http://www.cnblogs.com/sammyliu/p/4713562.html
http://www.opstool.com/article/183
http://www.ttlsa.com/linux/create-a-gre-tunnel-linux/
http://www.361way.com/linux-tunnel/5199.html