快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Linux IP命令学习手册

Linux IP命令学习手册

时间:2022-05-10 06:50:25人气:作者:快盘下载我要评论

摘自 man 手册:

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 | macsec }

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] { maximum-addr-flush-attempts } | -o[neline] | -rc[vbuf] [size] | -t[imestamp] |-ts[hort] | -n[etns] name | -a[ll] | -c[olor] -br[ief] }


功能

Linux下的 ip 命令可以显示和操作路由表、网络设备、网络接口和隧道等。

举例 网口相关 显示当前接口信息
$ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether f0:de:f1:f0:08:60 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 44:6d:57:5e:28:6c brd ff:ff:ff:ff:ff:ff


这里,显示出有一个 eth0 网卡,一个无线网卡 wlan0 和一个回环 lo ,其中 eth0 卡处于 down 的状态(因为使用 ifconfig eth0 down 将其禁用,使用 ifconfig 无法再看见 eth0 只能用 ifconfig -aip link list 开查看)。

启用网口
$ip link set eth0 up


也可用 ifconfig eth0 up ,建议用较新的 ip 命令。

关闭网口
$ip link set eth0 down


也可用 ifconfig eth0 down

显示 neighbor/arp
$ip neigh show
192.168.1.1 dev wlan0 lladdr ec:17:2f:3e:5b:4e STALE


IP地址相关 删除 eth0 的一个 ip 地址
#ip addr del 192.168.1.222 dev eth0


注: 一个网卡是可以有多个 ip 地址的, ip 地址是吊链的结构, ip 会返回网卡的所有 ip 地址,而 ifconfig 只返回首次设置的, ip 使用 netlink 设置网卡,而 ifconfig 直接使用 ioctl

eth0 添加一个 ip 地址
#ip addr add 192.168.1.111 dev eth0


添加之后,在原有网址基础上,可以也可访问 192.168.1.111 到达本机,但是只有第一次添加的 addrifconfig 中显示。

查看 ip 地址
#ip addr show


查看网卡上的 ip 地址,相对 ifconfig ,此命令显示一个网卡上所有的 ip ,而 ifconfig 只显示第一个。

删除所有的 ip 地址
#ip addr flush dev eth0


路由表相关 显示所有路由表
$ip rule list
0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default


表名和编号对应信息可以查看 /etc/iproute2/rttables

显示路由表信息
$ip route show
default via 192.168.1.1 dev wlan0  proto static 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.100  metric 2


这里,默认显示 main 的路由表信息。通过 ip route 显示内核路由表,比只用 route 更为强大,后者只能对系统确认默认路由操作,而前者可以实现策略路由。

显示指定路由表信息
$ip route list table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.1.0 dev wlan0  proto kernel  scope link  src 192.168.1.100
local 192.168.1.100 dev wlan0  proto kernel  scope host  src 192.168.1.100
broadcast 192.168.1.255 dev wlan0  proto kernel  scope link  src 192.168.1.100


实践 一个实践问题

假设:

无线网卡:192.168.0.109
有线网卡:192.168.0.216
两者在同一网段。


一般内核默认配置的路由表在 route 命令下可以操作和查看,但是会有问题。例如,

#netstat -rn
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default     192.168.0.1         255.255.255.0   U         0 0          0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0


拔网线之后,如果其 route 显示的路由还有 eth0 的选项,那么匹配的时候还是选择从 eth0 口发送数据,这时候将会导致网络不通。

所以采用如下:

$ip rule delete from 192.168.0.216
$ip rule delete from 192.168.0.109
$ip rule delete to 192.168.0.216
$ip rule delete to 192.168.0.109
$ip route flush table main
$ip route flush table 200
$ip route flush table 201
$ip route flush cache


这里,将所有内容清空。

$ip route add 192.168.0.0/24 dev eth0 table 200
$ip route add 192.168.0.0/24 dev ra0 table 201
$ip rule add from 192.168.0.216 table 200
$ip rule add from 192.168.0.109 table 201
$ip route flush cache


这里,添加路由规则,然后使用 ip route flush cache 使其立即生效。注意这里的 from ,表示数据发自哪里。这个例子表示,如果来自 192.168.0.216 则使用 table 200 指定的路由表,如果来自 192.168.0.109 则使用 table 201 指定的路由表。

$route add -net 192.168.0.0/24 dev ra0
$route add -net 192.168.0.0/24 dev eth0
$route add default gw 192.168.0.1 dev eth0


这里设置的实际是 main 路由,实际没有作用, 路由规则指定使用的是 table 200table 201

如上设置之后,当外部

$ping 192.168.0.109


会使用201的路由。

当外部

$ping 192.168.0.216


会使用200的路由。

插拔网线不会影响ip rule建立的规则,所以不会影响网络的通畅。

例子总结 设置命令:
# ip rule delete from 192.168.0.216
# ip rule delete from 192.168.0.109
# ip route flush table main
# ip route flush table 200
# ip route flush table 201
# ip route flush cache
# ip route add 192.168.0.0/24 dev eth0 table 200
# ip route add 192.168.0.0/24 dev ra0 table 201
# ip rule add from 192.168.0.216 table 200
# ip rule add from 192.168.0.109 table 201
# ip route flush cache
# route add -net 192.168.0.0/24 dev ra0
# route add -net 192.168.0.0/24 dev eth0
# route add default gw 192.168.0.1 dev eth0


查看路由与规则设置

查看路由规则

# ip rule list
0:      from all lookup local 
32764:  from 192.168.0.109 lookup 201 
32765:  from 192.168.0.216 lookup 200 
32766:  from all lookup main 
32767:  from all lookup default


规则的优先级小的靠前,(即由上到下依次进行), 找到匹配的路由则进入,无论是否可达目的,找不到则找下一条规则对应路由直至匹配。

查看指定路由

# ip route list table 200
192.168.0.0/24 dev eth0


这里,假设设置了: ip route add to unreachable 192.168.0.0/24 table 200 ,这样根据前面的 rule 匹配规则,进行 ping 192.168.0.216 也会进入这里,并且返回网络不可达(即便后面的 main 中有正确的路由项信息也不会使用)。

# ip route list table 201
192.168.0.0/24 dev ra0 

# ip route list table main
192.168.0.0/24 dev eth0 
192.168.0.0/24 dev ra0 
default via 192.168.0.1 dev eth0


查看默认路由

这里, 对于前面最后的 main 默认 table ,也可用如下三种命令查看:

#ip route
192.168.0.0/24 dev eth0 
192.168.0.0/24 dev ra0 
default via 192.168.0.1 dev eth0 

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 ra0
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 ra0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0


这里, netstat -rnroute 要快一些。

其它

注意: ip route add 中的 src 信息不太懂,还有使用 ip addr del 删除 ip 会导致所有表里对应内容消失。

其它 未整理

以下内容也是来自实际例子,尚未仔细整理仅供参考。

杂乱 创建两个路由表

创建主要有三个过程,如下。

(1)建立映射表。

#echo 200 T1 >>/etc/iproute2/rttables
#echo 300 T2 >>/etc/iproute2/rttables


如果不建立映射,则在后面的命令中直接使用 tableid 而非别名。

(2)添加路由表。

#ip rule add from 1.1.1.1 table T1
#ip rule add to 1.1.1.1 table T2


这里,指定了创建时使用该路由表的网络包对应的规则,这样符合特定规则的网络包,就可选择特定的路由表(main路由表无规则,所以没有匹配那个路由表的时候,就用main)。

例如此处来自 1.1.1.1 的包使用 T1 路由表,通往 1.1.1.1 的包使用 T2 路由表。

(3)向指定路由表追加表项。

例如:

# ip route add 1.1.1.0/24 dev eth0 table T1
# ip route add 1.1.1.0/24 dev ra0 table T2


意思是, T1 路由表通过 eth0 网络设备传输(一般是有线网卡), T2 路由表通过 ra0 网络设备传输(一般是无线网卡)。

默认路由表

如无特殊规则,会使用默认路由表,对于 main 默认路由表,也可如下添加

# route add -net 1.1.1.0/24 dev ra0
# route add -net 1.1.1.0/24 dev eth0
# route add default gw 1.1.1.1 dev eth0


路由表项的意思是自动会以 1.1.1.1 为默认网关,通过 eth0 来传输网络包,而 1.1.1.0/24 网段的包,由于后添加的,在 route 命令输出中显示在前面,所以有限采用 eth0 传输。

双网卡机器的网络设置

假设当前状况是:

有线网卡 ETH0: 192.168.27.120 无线网卡 WLAN0: 192.168.1.100

向默认路由表 main 添加路由项

# ip route add default via 192.168.27.1 dev eth0
# ip route add 192.168.27.0/24 src 192.168.27.120 dev eth0
# ip route add 192.168.1.0/24 src 192.168.1.100 dev wlan0


将相关的表项添加默认路由表中。这样,不同ip地址的数据包,会对应到对应的网卡上。

显示默认路由表 main 的内容

# ip route
default via 192.168.27.1 dev eth0  proto static 
169.254.0.0/16 dev wlan0  scope link  metric 1000 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.100  metric 2 
192.168.27.0/24 dev eth0  proto kernel  scope link  src 192.168.27.120  metric 1


这里用 route 命令显示的就是 main 路由表的内容。

设置其它路由表名称映射

# echo 300 eth_table >>/etc/iproute2/rttables
# echo 400 wifi_table >>/etc/iproute2/rttables


这会为 id300400 的路由表分别建立两个名字映射 eth_tablewifi_table

eth_table 路由表添加规则和内容

# ip rule add from $ETH_IP table eth_table
# ip route add default via $ETHGATE_IP dev eth0 table eth_table
# ip route add $ETH_NET src $ETH_IP dev eth0 table eth_table


这里, ip rule 指定来源于 $ETH_IP 的包,使用 eth_table 这个路由表。添加之后使用 ip route flush cache 才能立即生效。

显示 eth_table 路由表内容

# ip route list table eth_table
default via 192.168.27.1 dev eth0 
192.168.27.0/24 dev eth0  scope link  src 192.168.27.120


注意,这里显示特定的路由表(非默认)的时候,使用的是 ip route list table xxx 命令。

wifi_table 路由表添加规则和内容

# ip rule add from $WIFI_IP table wifi_table
# ip route add default via $WIFIGATE_IP dev wlan0 table wifi_table
# ip route add 192.168.1.0/24 src 192.168.1.100 dev wlan0 table wifi_table


显示 witi_table 路由表内容

#ip route list table wifi_table
default via 192.168.1.1 dev wlan0 
192.168.1.0/24 dev wlan0  scope link  src 192.168.1.100


检查总路由规则

至此,我们看到规则:

# ip rule list
0:      from all lookup local 
32764:  from 192.168.1.100 lookup wifi_table 
32765:  from 192.168.27.120 lookup eth_table 
32766:  from all lookup main 
32767:  from all lookup default


不同的情况,会使用不同的路由表。

测试结果

经过实践,我们可以得到如下测试结果:

PC->192.168.1.102 ok


经过 wifi_table

PC->192.168.3.16 ok


经过……(应该是 main)

192.168.1.102->192.168.1.100 ok
192.168.3.16-> 192.168.1.100 ok


NEXT 其它操作

以下是比较常用的操作,具体结果可能在不同环境有所不同,有待实践,这里仅供参考。

按照特定的优先权设置下一跳

#ip route add default scope global nexthop via 192.168.27.1 dev eth0 weight 50 nexthop via 192.168.1.1 dev wlan0 weight 50
#ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 50 nexthop via 192.168.1.1 dev ra0 weight 50


更换网段

删除路由

关于优先权

#ip rule add priority 100 xxx


priority 由高到低,越来越大。

清空路由 main

#ip route flush table main


添加一个不可达网络

#ip route add to unreachable 192.168.0.0/24


这里,不要指定 dev

在运行任何这些命令都需要发送 ip route flush cache 命令来刷新路由缓冲,否则命令在一段时间以后才会生效,这段时间的长短依赖于路由表结构的大小和负载。

参考 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2151189 关于ip和ifconfig的区别,可以参考: http://blog.csdn.net/dog250/article/details/5303542/

相关文章

  • CorelDRAW怎么撤销命令?- CorelDRAW撤销命令教程攻略

    CorelDRAW怎么撤销命令?- CorelDRAW撤销命令教程攻略,大家使用CorelDraw过程中,想要撤销命令,怎么操作呢?下文就是CorelDraw中撤销命令的具体使用介绍,希望阅读过后对你有所启发。...
  • 常用网络命令和端口

    常用网络命令和端口,了解常用的网络服务端口号掌握常见网络命令及使用场景工程师天天使用计算机做软件开发,有时候出了问题需要确定到底是自己的问题,还是网络的问题。所以学习并了解一些常见的计算机命令和开发中常用的端口,对开发工作会有很多实际的帮助。...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。