Linux命令 网络管理
10. 网络管理¶
10.1 ifconfig¶
Linux ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置。
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
- add<地址> 设置网络设备IPv6的IP地址。
- del<地址> 删除网络设备IPv6的IP地址。
- down 关闭指定的网络设备。
- hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
- io_addr 设置网络设备的I/O地址。
- irq
设置网络设备的IRQ。 - media<网络媒介类型> 设置网络设备的媒介类型。
- mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
- metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
- mtu<字节> 设置网络设备的MTU。
- netmask<子网掩码> 设置网络设备的子网掩码。
- tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
- up 启动指定的网络设备。
- broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
- pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
- promisc 关闭或启动指定网络设备的promiscuous模式。
- IP地址 指定网络设备的IP地址。
- 网络设备 指定网络设备的名称。
案例
显示所有网卡信息 [root@master01 ~]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet 172.17.7.1 netmask 255.255.255.0 broadcast 172.17.7.255 inet6 fe80::42:eeff:fe6d:570b prefixlen 64 scopeid 0x20<link> ether 02:42:ee:6d:57:0b txqueuelen 0 (Ethernet) RX packets 45 bytes 4919 (4.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 62 bytes 4736 (4.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.5.100 netmask 255.255.255.0 broadcast 192.168.5.255 inet6 fe80::56d2:664e:e6f6:82db prefixlen 64 scopeid 0x20<link> ether 0c:54:a5:01:7c:5b txqueuelen 1000 (Ethernet) RX packets 15724030 bytes 3085207447 (2.8 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16417165 bytes 3228395397 (3.0 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet 172.17.7.0 netmask 255.255.255.255 broadcast 0.0.0.0 inet6 fe80::ec2e:1dff:fea3:e33e prefixlen 64 scopeid 0x20<link> ether ee:2e:1d:a3:e3:3e txqueuelen 0 (Ethernet) RX packets 60 bytes 7875 (7.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 68 bytes 5195 (5.0 KiB) TX errors 0 dropped 8 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 14094691 bytes 3311043347 (3.0 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 14094691 bytes 3311043347 (3.0 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth5db34eb: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet6 fe80::e88d:90ff:fe4d:4cd6 prefixlen 64 scopeid 0x20<link> ether ea:8d:90:4d:4c:d6 txqueuelen 0 (Ethernet) RX packets 26 bytes 4079 (3.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 44 bytes 3364 (3.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 显示指定网卡信息 root@leco:~# ifconfig enp3s0 enp3s0 Link encap:以太网 硬件地址 74:27:ea:b0:aa:2c inet 地址:192.168.5.110 广播:192.168.5.255 掩码:255.255.255.0 inet6 地址: fe80::7627:eaff:feb0:aa2c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1 接收数据包:318562 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:219695 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000 接收字节:23933588 (23.9 MB) 发送字节:243692185 (243.6 MB) 网卡开启和关闭 ifconfig eth0 down ifconfig eth0 up 用ifconfig修改MAC地址 ifconfig eth0 down # 关闭网卡 ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE # 修改MAC地址 ifconfig eth0 up # 启动网卡 ifconfig eth1 hw ether 00:1D:1C:1D:1E # 关闭网卡并修改MAC地址 ifconfig eth1 up # 启动网卡 配置IP地址 ifconfig eth0 192.168.1.56 # 给eth0网卡配置IP地址 ifconfig eth0 192.168.1.56 netmask 255.255.255.0 # 给eth0网卡配置IP地址,并加上子掩码 # 给eth0网卡配置IP地址,加上子掩码,加上个广播地址 ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 开启和关闭arp ifconfig eth0 arp # 开启 ifconfig eth0 arp # 关闭 设置最大的传输单元 ifconfig eth0 mtu 1500 # 设置能通过的最大数据包大小为 1500 bytes
10.2 ifup¶
ifup命令用于激活指定的网络接口。ifup命令会去读取/etc/sysconfig/network-scripts/目录下的相关网络接口的配置文件,并根据配置文件的内容来激活该网络接口。
ifup [网络接口]
- 网络接口: 要激活的网络接口
激活网络接口eth0:
root@leco:~# ifup eth0
10.3 ifdown¶
用法和ifup
一样,只是ifdown
和ifup
用法相反。
10.4 route¶
route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;要想永久保存,可以保存到配置文件。linux默认只支持一条默认路由,当重新启动网口时,会把其他默认路由去掉,只剩下一条该网口生成的默认路由。当然可以通过route命令手动添加多条默认路由,如果多条路由一样,则选择最开始找到的路由(排在前面的路由)。
route [-CFvnee] route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If] route [-v] [-A family] del [-net|-host] target [gw Gw] [netmask Nm] [metric N] [[dev] If] route [-V] [--version] [-h] [--help]
参数 | 说明 |
---|---|
-C | 显示路由缓存。 |
-F | 显示发送信息 |
-v | 显示详细的处理信息。 |
-n | 不解析名字。 |
-ee | 使用更详细的资讯来显示 |
-V | 显示版本信息。 |
-net | 到一个网络的路由表。 |
-host | 到一个主机的路由表。 |
参数
参数 | 说明 |
---|---|
add | 增加路由记录。 |
del | 删除路由记录。 |
target | 目的网络或目的主机。 |
gw | 设置默认网关。gateway 的简写,后续接的是 IP 的数值。 |
mss | 设置TCP的最大区块长度(MSS),单位MB。 |
window | 指定通过路由表的TCP连接的TCP窗口大小。 |
dev | 如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等。 |
reject | 设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。 |
- 添加和删除路由
route {add | del } [-net|-host] [网域或主机] netmask [mask] [gw|dev] 增加 (add) 与删除 (del) 路由的相关参数: -net :表示后面接的路由为一个网域。 -host :表示后面接的为连接到单部主机的路由。 netmask :与网域有关,可以设定 netmask 决定网域的大小。 gw :gateway 的简写,后续接的是 IP 的数值,与 dev 不同。 dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
- 查询路由信息
route -nee (a) -n:不要使用通讯协定或主机名称,直接使用 IP 或 port number。 (b) -ee:使用更详细的资讯来显示。
- 添加/删除默认网关路由
route {add | del } default gw {IP-ADDRESS} {INTERFACE-NAME} (a) IP-ADDRESS:用于指定路由器(网关)的IP地址。 (b) INTERFACE-NAME:用于指定接口名称,如eth0。 例1:route add default gw 192.168.1.1 eth0 例2:route del default gw 192.168.1.1 eth0
- 添加/删除到指定网络的路由规则
route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} dev {INTERFACE-NAME} (a) NETWORK-ADDRESS:用于指定网络地址。 (b) NETMASK:用于指定子网掩码。 (c) INTERFACE-NAME:用于指定接口名称,如eth0。 例1:route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0 例2:route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
- 添加/删除路由到指定网络为不可达
设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。 route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} reject (a) NETWORK-ADDRESS:用于指定网络地址。 (b) NETMASK:用于指定子网掩码。 例1:route add -net 10.0.0.0 netmask 255.0.0.0 reject 例2:route del -net 10.0.0.0 netmask 255.0.0.0 reject
- 查看路由信息
root@ubuntu:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.144.2 0.0.0.0 UG 100 0 0 ens33 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 192.168.144.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
route命令输出的路由表字段含义如下:
字段 | 说明 |
---|---|
Destination | 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关。 |
Gateway | 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关。如果没有就显示星号(*)。 |
Genmask | Destination 字段的网络掩码,Destination 是主机时需要设为 255.255.255.255,是默认路由时会设置为 0.0.0.0 |
Flags | 标记 ● U 该路由可以使用。 ● H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的组合。 ● G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地 是直接相连的。● R 恢复动态路由产生的表项。 ● D 该路由是由改变路由(redirect)报文创建的。 ● M 该路由已被改变路由报文修改。 ● ! 这个路由将不会被接受。 |
Metric | 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的。 |
Ref | 路由项引用次数 。 |
Use | 此路由项被路由软件查找的次数。 |
Iface | 网卡名字,例如 eth0。 |
案例: 默认路由
我们通过路由表可以知道有两条相同默认路由可以选择,由于先找到192.168.144.2 网关路由,所以最后选择了192.168.144.2 网关.
查看默认路由
root@ubuntu:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.144.2 0.0.0.0 UG 100 0 0 ens33 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 192.168.144.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 root@ubuntu:~# traceroute www.baidu.com traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets 1 _gateway (192.168.144.2) 1.451 ms 1.332 ms 1.157 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 * * * 14 * * * 15 * * * 16 * * * 17 * * * 18 * * * 19 * * * 20 * * * 21 * * * 22 * * * 23 * * * 24 * * * 25 * * * 26 * * * 27 * * * 28 * * * 29 * * * 30 * * *
删除原先路由,重新添加路由
路由
root@ubuntu:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.144.2 0.0.0.0 UG 100 0 0 ens33 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 192.168.144.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 root@ubuntu:~# route del default gw 192.168.144.2 root@ubuntu:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 192.168.144.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 root@ubuntu:~# ping -c1 www.baidu.com connect: Network is unreachable root@ubuntu:~# route add default gw 192.168.144.2 root@ubuntu:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.144.2 0.0.0.0 UG 0 0 0 ens33 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 192.168.144.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 root@ubuntu:~# ping -c1 www.baidu.com PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data. 64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=128 time=4.36 ms --- www.a.shifen.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 4.362/4.362/4.362/0.000 ms
10.5 arp¶
arp指令用来管理系统的arp缓冲区,可以显示、删除、添加静态mac地址。ARP以各种方式操纵内核的ARP缓存。主要选项是清除地址映射项并手动设置。为了调试目的,ARP程序还允许对ARP缓存进行完全转储。
选项 | 说明 |
---|---|
--help | 显示帮助文档 |
--version | 显示命令版本 |
-H type --hw-type**type -t** type |
在设置或读取ARP缓存时,这个可选参数告诉ARP应该检查哪类条目。 此参数的默认值为**ether**(即IEEE 802.3 10 Mbps以太网的硬件代码0x01)。 其他可能的值有,如**ARCnet**(Arcnet)、PROnet(PRINET)、AX.25(Axis 25)和**Net/ROM**(Netrom)。 |
-a[hostname] | --all [hostname] | 显示本机的arp缓冲区内容 |
-d**hostname --delete**hostname |
从缓冲区删除指定的地址类型 |
-D | -use-device | 使用指定接口的mac地址 |
-e | 使用Linux风格显示 |
-i if | --device if | 显示指定设备的arp缓冲区 |
**-s**hostnamehw_addr | 设置指定主机的mac地址映射 |
-f filename --file filename |
类似于-s选项,只是这次地址信息是从filename设置的。 数据文件的名称通常是“/etc/ether”,但这不是正式的。 如果没有指定文件名“/etc/ether”作为默认值。 该文件的格式很简单; 它只包含带有硬件地址和由空格分隔的主机名的ASCII文本行。 此外,还可以使用**pub**、**temp**和**netmask**标志。 |
-n | --numeric | 使用数字方式显示 |
-v | --verbose | 显示执行过程 |
在所有需要主机名的地方,人们也可以用虚线小数点表示法输入IP地址。作为兼容性的特例,主机名和硬件地址的顺序可以交换。ARP缓存中的每个完整条目都将被标记为C标志。永久条目用M标记,已发布的条目带有P标志。
添加静态映射
root@ubuntu:~# arp -a ? (192.168.144.254) at 00:50:56:e4:d0:a0 [ether] on ens33 ? (192.168.144.1) at 00:50:56:c0:00:08 [ether] on ens33 _gateway (192.168.144.2) at 00:50:56:e9:19:24 [ether] on ens33 root@ubuntu:~# arp -i ens33 -s 192.168.5.10 ff:ee:ee:ee:ee:ee root@ubuntu:~# arp -a ? (192.168.144.254) at 00:50:56:e4:d0:a0 [ether] on ens33 ? (192.168.144.1) at 00:50:56:c0:00:08 [ether] on ens33 ? (192.168.5.10) at ff:ee:ee:ee:ee:ee [ether] PERM on ens33 _gateway (192.168.144.2) at 00:50:56:e9:19:24 [ether] on ens33 root@ubuntu:~# arp -vn Address HWtype HWaddress Flags Mask Iface 192.168.144.254 ether 00:50:56:e4:d0:a0 C ens33 192.168.144.1 ether 00:50:56:c0:00:08 C ens33 192.168.5.10 ether ff:ee:ee:ee:ee:ee CM ens33 192.168.144.2 ether 00:50:56:e9:19:24 C ens33 Entries: 4 Skipped: 0 Found: 4 root@ubuntu:~# arp -e Address HWtype HWaddress Flags Mask Iface 192.168.5.11 ether ff:ee:ee:ee:ee:e1 CM ens33 192.168.144.254 ether 00:50:56:e4:d0:a0 C ens33 192.168.144.1 ether 00:50:56:c0:00:08 C ens33 192.168.5.12 ether ff:ee:ee:ee:ee:e2 CM ens33 192.168.5.10 ether ff:ee:ee:ee:ee:ee CM ens33 _gateway ether 00:50:56:e9:19:24 C ens33 删除某个arp root@leco:~# arp -a ? (192.168.5.55) 位于 f8:bc:12:a8:41:f9 [ether] 在 enp3s0 ? (192.168.5.1) 位于 00:1c:54:57:84:9e [ether] 在 enp3s0 ? (192.168.5.108) 位于 74:27:ea:5f:72:e4 [ether] 在 enp3s0 root@leco:~# arp -d 192.168.5.108 root@leco:~# arp -a ? (192.168.5.55) 位于 f8:bc:12:a8:41:f9 [ether] 在 enp3s0 ? (192.168.5.1) 位于 00:1c:54:57:84:9e [ether] 在 enp3s0 清空arp表 root@leco:~# arp -n|awk '/^[1-9]/{print "arp -d " $1}'|sh -x + arp -d 192.168.5.55 + arp -d 192.168.5.1 root@leco:~# arp -a ? (192.168.5.1) 位于 00:1c:54:57:84:9e [ether] 在 enp3s0