侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Linux基础(42)之使用IP命令来配置网络属性

zze
zze
2019-12-05 / 0 评论 / 0 点赞 / 580 阅读 / 7408 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

介绍

IP 命令可用来管理路由,显示/操纵路由,设备,策略路由和隧道,这些功能都是通过它的一系列子命令来实现的。
使用格式如下:

ip [ OPTIONS ] OBJECT { COMMAND | help }
    OBJECT := { link | addr  | route }
        link:管理接口,实现网络设备配置的子命令;
        addr:管理指定接口的地址;
        route:管理路由;
    help:查看各子命令的帮助;

使用

link子命令

显示物理接口的简要描述信息

使用 ip link show 能够查看所有设备信息:

image.png

在上述结果中:

  • BROADCAST:表示支持广播;
  • MULTICAST:表示支持组播或多播;
  • UP:表示处于启用状态;
  • mtu:最大协议传输单元,以太网一般都为 1500 个字节;
  • qlen:传输队列;
  • link/ether:MAC 地址;
  • brd:二层的广播地址;

查看指定设备的信息:

image.png

查看处于启用状态的设备信息:

image.png

设置物理接口

使用格式如下:

ip link set dev <interface> {up|down}
    interface:指定设备;
    up|down:up 表示启用,down 表示禁用;

例 1:禁用 eth0 设备。

[root@zze ~]# ip link set dev eth0 down

例 2:启用 eth0 设备。

[root@zze Desktop]# ip link set dev eth0 up

addr子命令

查询地址

查询地址的使用格式如下:

ip addr show [dev <interface>]  [ scope {global|link|host} ] [ to <prefix> ] [label <PATTERN>] [ { primary|secondary } ]
    interface:接口设备;
    scope:查询指定作用域的地址;
    to:查询指定前缀的地址;
    label:查询指定标签(别名)的地址;
    primary|secondary:
        primary:查询主地址;
        secondary:查询辅助地址;

例:查询作用域为 global 的地址。

[root@zze ~]# ip addr show scope global

添加地址

ip 命令也可用来给指定设备添加地址,格式如下:

ip addr add <IP>/<mask> dev <interface> [scope { global|link|host }] [ broadcast <ADDRESS> ]
    IP:IP 地址;
    mask:掩码;
    interface:接口设备;
    scope:作用范围,global:全局;link:仅当前网卡;host:仅本机,不对外部做响应;
    broadcast:广播地址;

首先要知道,对于主机来讲,地址默认是属于内核而不是属于网卡的。
如果主机上有两个网卡,一个客户端 ping 网卡 1 能通,如果此时再让这个客户端 ping 网卡 2 绑定的地址,能通吗?
根据地址的作用范围可分为如下三种情况:

  • 地址的 scope 为 global 时,由于地址默认时属于内核,当客户端 ping 网卡 2 时,内核中检测到网卡 2 绑定的地址,则会做出响应,所以能通;
  • 地址的 scope 为 link 时,该地址就不是内核级别的了,而是仅仅针对所绑定的网卡有效,所以此时客户端 ping 网卡 2 是不通的;
  • 地址的 scope 为 host 时,该地址就只能在本机范围使用了,所以实际上此时网卡 1 都不通的;

例:给 eth0 设备添加地址 10.0.0.202

[root@zze ~]# ip addr add 10.0.0.202/24 dev eth0
[root@zze ~]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:2c:8b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.202/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe45:2c8b/64 scope link 
       valid_lft forever preferred_lft forever

可以看到,一个接口设备是可以有多个 IP 地址的。

地址标签

在添加地址时,可以给地址设置一个标签作为标识,如:

image.png

可以看到,给一个接口设备的另一个地址设置了别名后,使用 ifconfig 查看会以这个别名开头单独列出一项,此时这一项并不是一个真正的接口设备哦,这个地址和其它地址会共用一个接口设备。

替换地址

替换地址的使用格式如下:

ip addr replace <IP>/<mask> dev <interface>
    IP:IP 地址;
    mask:掩码;
    interface:接口设备;

这里我们直接进行替换操作试试:

[root@zze ~]# ip addr replace 10.0.0.203/24 dev eth0
[root@zze ~]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:2c:8b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.202/24 scope global secondary eth0
    inet 10.0.0.203/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe45:2c8b/64 scope link 
       valid_lft forever preferred_lft forever

可以看到,直接执行替换操作后,由于并没有指定要替换哪个地址,所以接口设备直接添加了这个新地址。

删除地址

删除地址的使用格式如下:

ip addr del <IP>/<mask> dev <interface>
    IP:IP 地址;
    mask:掩码;
    interface:接口设备;

例:删除 eth0 上的 10.0.0.203 地址。

[root@zze ~]# ip addr del 10.0.0.203/24 dev eth0
[root@zze ~]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:2c:8b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.202/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe45:2c8b/64 scope link 
       valid_lft forever preferred_lft forever

清空地址

清空指定接口设备地址的格式如下:

ip addr flush dev <interface>
    interface:接口设备;

例:清空 eth0 上的所有地址。

[root@zze ~]# ip addr flush dev eth0

route子命令

查看路由列表

查看路由直接使用 ip route list 即可:

[root@zze ~]# ip route list
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.201

查询路由

查询路由的使用格式如下:

ip route show dev <interface> via <gateway>
    interface:筛选指定接口设备相关路由;
    gateway:筛选指定网关相关路由;

例:查询设备 eth0 且网关为 10.0.0.204 的路由。

[root@zze ~]# ip route show dev eth0 via 10.0.0.254

添加路由

添加路由的使用格式如下:

ip route add <dest_addr> via <gateway> dev <interface> src <source_ip>
    dest_addr:目标地址;
    gateway:网关;
    interface:接口设备;
    src:如果接口设备拥有多个地址,可指定从哪个地址发出;
该条命令的含义就是到达目标地址 dest_addr 需要经过 gateway 网关,并且使用的是 interface 网卡。

例 1:添加一条主机路由,目标主机 IP 为 192.168.1.3,所经网关为 10.0.0.1,使用本地的 eth0 网卡。

[root@zze ~]# ip route add 192.168.1.3 via 10.0.0.1 dev eth0

主机路由不能加掩码,默认 32。

例 2:添加一条网络路由,目标主机 IP 为 192.168.0.0,掩码为 255.255.255.0,所经网关为 10.0.0.1,使用本地的 eth0 网卡。

[root@zze ~]# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth0

例 3:添加一条默认路由,网关为 10.0.0.254。

[root@zze ~]# ip route add default via 10.0.0.254

删除路由

删除路由的使用格式如下:

ip route del <dest_addr>

例 1:删除目标地址为 192.168.1.3 的主机路由。

[root@zze ~]# ip route del 192.168.1.3

例 2:删除目标地址为 192.168.0.0 子网掩码为 255.255.255.0 的网络路由。

[root@zze ~]# ip route del 192.168.0.0/24

清空路由表

清空路由表执行执行下面命令即可:

ip route flush dev <interface> via <gateway>
    interface:筛选指定接口设备相关路由;
    gateway:筛选指定网关相关路由;

使用方式和 ip route show 类似,这里就不再举例。

0

评论区