当前位置: 首页 > news >正文

Ubuntu 第11章 网络管理_常用的网络配置命令

        为了管理网络,Linux提供了许多非常有用的网络管理命令。利用这些命令,一方面可以有效地管理网络,另一方面出现网络故障时,可以快速进行诊断。本节将对Ubuntu提供的网络管理命令进行介绍。

11.2.1 ifconfig命令

        关于ifconfig命令,在11.1节中已经提到过了。通过该命令可以查看和配置网络接口。ifconfig是一个比较古老的命令,在Ubuntu22以及其他的许多发行版中,已经不太推荐使用该命令了。默认情况下,Ubuntu  22.04已经不提供该命令,用户可以通过安装net-tools软件包来获得该命令,如下所示:

root@node1:~# apt install net-tools

        ifconfig  命令的基本语法如下:

ifconfig [-v] interface [aftype] options | address ...

        在上面的语法中,参数interface表示要配置的网络接口。aftype表示地址类型,例如inet、inet6或者ddp等。options表示ifconfig命令的选项,常用的选项有:

  • -a:列出当前系统所有的可用网络接口,包括禁用状态的。
  • up:启用指定的网络接口。
  • down:  禁用指定的网络接口。
  • netmask:指定当前IP网络的子网掩码。
  • add:为指定网络接口增加一个IPv6地址。
  • del:从指定网络接口删除一个IPv6地址。
  • -broadcast:指定网络接口的广播地址。

address参数为指派给网络接口的IP地址。
例如,使用下面的命令查看当前系统所有的网络接口:

root@node1:~# ifconfig -a
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255ether 06:6c:3a:20:1c:30  txqueuelen 0  (以太网)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 24 overruns 0  carrier 0  collisions 0ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.6.101  netmask 255.255.255.0  broadcast 192.168.6.255inet6 fe80::fc0:15fc:cb36:c90a  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:da:76:27  txqueuelen 1000  (以太网)RX packets 1383  bytes 611544 (611.5 KB)RX errors 0  dropped 85  overruns 0  frame 0TX packets 791  bytes 118578 (118.5 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 19  base 0x2000  ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.8.150  netmask 255.255.255.0  broadcast 192.168.8.255inet6 fe80::20c:29ff:feda:7631  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:da:76:31  txqueuelen 1000  (以太网)RX packets 80  bytes 29877 (29.8 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 129  bytes 15218 (15.2 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 19  base 0x2080  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (本地环回)RX packets 238  bytes 25070 (25.0 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 238  bytes 25070 (25.0 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        在上面的输出中,一共有四个网络接口,其名称分别为docker0、ens33、ens37和lo。关于各个网络接口的详细信息,在前面已经介绍过了,不再重复。

        如果想要禁用某个网络接口,可以使用down选项。例如,使用下面的命令禁用名称为ens37的网络接口:

root@node1:~# ifconfig ens37 down

        网络接口被禁用之后,其状态信息中就不再包含RUNNING属性了,如下所示:

root@node1:~# ifconfig ens37
ens37: flags=4098<BROADCAST,MULTICAST>  mtu 1500ether 00:0c:29:da:76:31  txqueuelen 1000  (以太网)RX packets 88  bytes 30757 (30.7 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 129  bytes 15218 (15.2 KB)TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0device interrupt 19  base 0x2080  

被禁用的网络可以使用以下命令重新启动:

root@node1:~# ifconfig ens37 up

11.2.2 ip命令

        与前面介绍的ifconfig命令不同,ip命令是一个Linux系统中比较新的、功能强大的网络管理工具。ip命令是iproute2软件包中的核心命令。通过ip命令可以显示或操纵Linux主机的路由、网络设备、策略路由、多播地址和隐道。ip命令的基本语法如下:

ip [ OPTIONS ] OBJECT { COMMAND | help }

        在上面的语法中,options表示命令选项,常用的选项有:

  • -h:输出可读的信息。
  • -f:指定协议族,该选项可以取inet。inet6、bridge、ipx以及dnet五个值、如果没有指定协议族,则ip命令会从其他的参数判断,如果无法判断,则默认为inet。
  • -4:指定协议族为inet,即IPv4。
  • -6:指定协议族为inet6,即IPv6。
  • -B:指定协议族为bridge,即桥接。
  • -D:指定协议族为decnet。
  • -l:指定协议族为ipx,即IPX协议。
  • -s:显示详细信息。

object为命令操作的对象。常见的对象有:

  • Address:IPv4或者IPv6地址。
  • 12tp:L2TP隙道协议。
  • link:网络设备。
  • maddress:多播地址。
  • route:路由表。
  • rule:路由策略。
  • tunnel:隧道

        command  为命令,常用的命令有add、delete、show、set或者list等。根据不同的对象,会有不同的命令。下面分别介绍ip命令的使用方法。

1. 管理网络设备

        网络设备包括交换机、路由器以及网络接口等。ip命令最常管理的网络设备就是网络接口。
        例如,使用下面的命令显示网络设备的运行状态:

root@node1:~# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:27 brd ff:ff:ff:ff:ff:ffaltname enp2s1
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:31 brd ff:ff:ff:ff:ff:ffaltname enp2s5
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 06:6c:3a:20:1c:30 brd ff:ff:ff:ff:ff:ff

        在上面的命令中,link为对象,即网络设备,list为命令,所以整个命令的含义为列出所有的网络设备。如果想要显示更详细的信息,可以使用-s选项,如下所示:

root@node1:~# ip -s link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00RX:  bytes packets errors dropped  missed   mcast           25216     240      0       0       0       0 TX:  bytes packets errors dropped carrier collsns           25216     240      0       0       0       0 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:27 brd ff:ff:ff:ff:ff:ffRX:  bytes packets errors dropped  missed   mcast           2409588    4048      0     316       0       0 TX:  bytes packets errors dropped carrier collsns           232332    2109      0       0       0       0 altname enp2s1
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:31 brd ff:ff:ff:ff:ff:ffRX:  bytes packets errors dropped  missed   mcast           56836     142      0       0       0       0 TX:  bytes packets errors dropped carrier collsns           23342     210      0       2       0       0 altname enp2s5
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 06:6c:3a:20:1c:30 brd ff:ff:ff:ff:ff:ffRX:  bytes packets errors dropped  missed   mcast           0       0      0       0       0       0 TX:  bytes packets errors dropped carrier collsns           0       0      0      26       0       0 

使用下面的命令禁用网络接口ens37:

root@node1:~# ip link set ens37 down 

        在上面的命令中,由于操作的对象为网络接口,因此使用link。set命令用来设置属性。down为禁用状态,up为启用状态。

注意:以上命令等同于ifconfig  ens37  down。

设置完成之后,使用ip命令查看其状态,如下所示:

root@node1:~# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:27 brd ff:ff:ff:ff:ff:ffaltname enp2s1
3: ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000link/ether 00:0c:29:da:76:31 brd ff:ff:ff:ff:ff:ffaltname enp2s5
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 06:6c:3a:20:1c:30 brd ff:ff:ff:ff:ff:ff

        从上面的输出可以得知,网络接口ens37的状态中不再含有UP标识。

        若想把ens37重新启用,则可以使用以下命令:

root@node1:~# ip link set ens37 up

        使用下面的命令改变网络设备的最大传输单元,即MTU的值为1400:

root@node1:~# ip link set ens37 mtu 1400

        其中,dev表示网络接口。因此,上面的命令把网络接口enp0s3的MTU值设置为1400。

        使用下面的命令修改网络设备的MAC地址,把网络接口enp0s3的MAC地址修改为
00:0c:29:da:76:31:

root@node1:~# ip link set ens37 address 00:0c:29:da:76:31

2. 管理 IP 地址

        利用ip命令可以管理网络接口的IP地址,包括添加、删除、显示以及清除等。其中需要使用address  对象。通常情况下,address可以缩写为a、add或者addr。

        使用下面的命令为网络接口ens37添加一个新的IP地址:

root@node1:~# ip address add 192.168.8.151/24 dev ens37

        在上面的命令中,IP地址采用CIDR地址表示法,斜线前面为IP地址,斜线后面为二进制子网掩码中1的个数。

        如果想要删除指定网络接口的IP地址,可以使用以下命令;

root@node1:~# ip addr del 192.168.8.151/24 dev ens37

        在上面的命令中,采用缩写addr,delete表示要执行的命令。

        ip命令中的show可以显示指定网络接口的IP地址信息,如下所示:

root@node1:~# ip a show dev ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000link/ether 00:0c:29:da:76:31 brd ff:ff:ff:ff:ff:ffaltname enp2s5inet 192.168.8.150/24 brd 192.168.8.255 scope global noprefixroute ens37valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feda:7631/64 scope link proto kernel_ll valid_lft forever preferred_lft forever

        同样,以下两个命令也可以显示同样的结果:

root@node1:~# ip addr ls ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000link/ether 00:0c:29:da:76:31 brd ff:ff:ff:ff:ff:ffaltname enp2s5inet 192.168.8.150/24 brd 192.168.8.255 scope global noprefixroute ens37valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feda:7631/64 scope link proto kernel_ll valid_lft forever preferred_lft forever

        在上面的例子中,使用list命令代替show,list可以缩写为ls。从上面的例子可以得知,ip命令的语法是非常灵活的。

        如果想要清除某个网络接口的IP地址,则可以使用flush,如下所示:

root@node1:~# ip -4 addr flush ens37

        上面的命令使用-4选项来表示清除IPv4类型的IP地址,同时指定网络接口为ens37。

        注意:通过ip命令修改的IP地址重启后会消失。如果想永久保存,请修改网络配置文件。

3. 管理路由表

        在ip命令中,路由表使用route对象表示。route可以缩写为r或者ro。从Linux内核2.2版本开始,内核把路由归纳到许多路由表中,并对这些表都进行编号,编号的范围是1~255。另外,为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。例如,下面的代码为一个默认的rt_tables文件的内容:

itadmin@lenovo-07:~$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep

        在上面的文件中,每行定义一个路由表,前面的数字为路由表编号,后面为路由表名称,例如local、main以及default等。上面的几个路由表为默认路由表,用户不可以修改。用户可以修改该文件,增加新的路由表,但是前面的编号不可以重复。

        默认情况下,所有的路由都会被插入编号为254的main表中。在进行路由查询时,内核只使用路由表  main。

        默认情况下,ip命令会显示出main路由表的路由信息,如下所示:

root@node1:~# ip route show
default via 192.168.6.1 dev ens33 proto dhcp src 192.168.6.101 metric 100 
default via 192.168.8.2 dev ens37 proto static metric 101 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.6.0/24 dev ens33 proto kernel scope link src 192.168.6.101 metric 100 
192.168.8.0/24 dev ens37 proto kernel scope link src 192.168.8.150 metric 101

        从上面的输出可以得知,当前系统的main路由表中一共有5条路由信息。其中第1~2行都为默认路由,使用关键字default表示。第1行为网络接口ens33指定默认网关为192.168.6.1,其跳数为100。第2行为网络接口ens37指默认网关为192.168.8.2,其跳数为101。默认网关是必须要有的路由信息,当系统在发送数据包的时候,查不到相应的路由信息,便直接从默认路由发送。

        如果想要显示其他路由表的路由记录,则可以通过table关键字来指定路由表,如下所示:

root@node1:~# ip route show table local
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 
local 172.17.0.1 dev docker0 proto kernel scope host src 172.17.0.1 
broadcast 172.17.255.255 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
local 192.168.6.101 dev ens33 proto kernel scope host src 192.168.6.101 
broadcast 192.168.6.255 dev ens33 proto kernel scope link src 192.168.6.101 
local 192.168.8.150 dev ens37 proto kernel scope host src 192.168.8.150 
broadcast 192.168.8.255 dev ens37 proto kernel scope link src 192.168.8.150 

        上面的命令显示了local路由表的路由信息。

        注意:如果没有指定table关键字,则默认为main路由表。

        下面的例子删除一条默认路由:

root@node1:~# ip route del default

        执行完以上命令之后,再次显示路由表信息,结果如下:

root@node1:~# ip route list 
default via 192.168.8.2 dev ens37 proto static metric 101 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.6.0/24 dev ens33 proto kernel scope link src 192.168.6.101 metric 100 
192.168.8.0/24 dev ens37 proto kernel scope link src 192.168.8.150 metric 101 

        可以得知,网络接口  ens37的默认路由已经被删除了。由于当前系统还有一条通过网络接口ens37的默认路由,因此该系统仍然可以访问其他所有的网络。如果再执行一次上面的命令,把网络接口ens37的默认路由也删除,则该系统便不能访问其他的网络了,如下所示:

root@node1:~# ip route del default 
root@node1:~# ping 8.8.8.8
ping: connect: 网络不可达

        但是由于通向网络192.168.6.0/24和192.168.8.0/24的路由还存在,因此这两个网络仍然可以访问,如下所示:

root@node1:~# ping 192.168.8.2
PING 192.168.8.2 (192.168.8.2) 56(84) bytes of data.
64 bytes from 192.168.8.2: icmp_seq=1 ttl=128 time=0.232 ms
64 bytes from 192.168.8.2: icmp_seq=2 ttl=128 time=0.085 ms

        为了使得系统能够访问其他的网络,使用以下命令添加一条默认路由:

root@node1:~# ip route add default via 192.168.6.1 dev ens33
root@node1:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=10.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=114 time=10.6 ms

        ip  route  get命令可以获取通向某个IP地址的路由信息,如下所示:

root@node1:~# ip route get 8.8.8.8
8.8.8.8 via 192.168.6.1 dev ens33 src 192.168.6.101 uid 0 cache 

        上面的命令告诉我们,发送到8.8.8.8的数据包经过网络接口ens37,并且通过网关192.168.6.1。

4. 管理策略路由

        在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些信息,例如源地址、IP协议、传输层端口甚至数据包的负载。这叫作策略路由。策略路由是Linux提供的一种比较高级的路由功能。策略路由由路由规则来表示,在IP命令中,其对象为rule。同样,

相关文章:

  • AT9880B北斗单模卫星定位SOC芯片
  • 报错 | vitest中,vue中使用jsx语法,报错:ReferenceError: React is not defined
  • Java设计模式之单例模式:从入门到精通
  • 虚假AI工具通过Facebook广告传播新型Noodlophile窃密木马
  • 国产Excel处理控件Spire.XLS系列教程:C# 将Excel文件转换为Markdown格式
  • C++Primerplus编程练习 第六章
  • 数据库故障排查指南
  • PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
  • 系统间安全复制和同步文件
  • 数据库审计如何维护数据完整性:7 种工具和技术
  • 1.3.2 linux音频PulseAudio详细介绍
  • ubuntu 24.04 error: cannot uninstall blinker 1.7.0, record file not found. hint
  • stm32 debug卡在0x1FFFxxxx
  • 【Unity笔记】PathCreator使用教程:用PathCreator实现自定义轨迹动画与路径控制
  • Spring、SpringMVC、SpringBoot、SpringCloud 联系与区别
  • linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程
  • 安全核查基线-3.用户umask设置策略
  • 后缀表达式+栈(详解)(c++)
  • AI-02a5a4.神经网络-与学习相关的技巧-参数更新
  • 【设计模式】GoF设计模式之策略模式(Strategy Pattern)
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 马克思主义理论研究教学名师系列访谈|董雅华:让学生感知马克思主义理论存在于社会生活中
  • 常州市委原常委、组织部部长陈翔调任江苏省民宗委副主任
  • 城管给商户培训英语、政银企合作纾困,上海街镇这样优化营商环境
  • 北京:下调个人住房公积金贷款利率
  • 无人机穿越大理崇圣寺千年古塔时“炸机”,当地:肇事者已找到,将被追责