Linux网络管理-学习笔记

怎么是这样的? 2026-07-10 23:47 1

前言


因为我个人学习的效率过低,我会用大量的自然语言去描述,甚至包括很多情绪语言来描述我当时的学习状态以让我进行深刻理解,我会屏蔽一些抒发情绪的语言,如果冒犯到您,深表歉意


本篇全程使用RHEL9.0系统,我在论坛中没有发现相应的wiki,遂分享出我的个人自学笔记


下面是笔记正文




这部分是一个巨大的章节,算是相当重要的章节了,我曾在学校管理过一段时间校园网,所以对这部分理解比较快,我尽量用自然语言写这一章的笔记(补充:我现在收回这句话)


网络基础概念


Linux学习要涉及的网络知识较薄弱,后期我会通过学习HCIE数通方向系统学习网络


IP地址:类似于个人的家庭地址,计算机和计算机之间通过ip地址进行访问(类似于门牌号)

公网地址:面向互联网的IP地址,可以被所有人访问

私网地址:面向内部的IP地址,可以被局域网内的人员访问(分为 A/B/C/D 四类)

私网地址由 RFC1918 定义,包括:10.0.0.0/8 172.16.0.0/12 192.168.0.0/16


子网掩码:划分IP网络的网段,是否处于同一个内部网络;划分网络部分,主机部分

网络部分:划分IP地址的网段,属于哪个屋子

主机部分:可以分配多少个IP,屋子里有几个座位


网关:不同网段直接需要通过网关同喜

网关地址一般划分在路由器上


DNS:全球域名解析系统(RHCE爱描述为:名称服务器),解析域名使用的,将域名解析为IP地址(向DNS服务器发信,baidu.com的ip地址是多少?服务器回信,然后将域名带入请求头向此ip请求baidu.com的信息)


DNS不仅可以解析A记录(IPV4)、AAAA记录(IPV6),还可以解析MX、CNAME等其他记录。


Linux网卡


ens160:vmware虚拟网卡


lo:回环接口,127.0.0.1


virbr0:kvm虚拟机的桥接网卡


网卡的传统方式命名规则:命名是根据系统加载顺序命名的(这也是传统方式的缺陷


eth0 eth1 eth2 eth3 eth4

基于网卡特征的命名规则:

接口类型:



  • en以太网

  • wl无线局域网设备

  • ww无线广域网设备

    设备类型:

  • s热插拔

  • o板载设备

  • ppcie插槽

    数字是随机ID:根据网卡的UUID生成的


在一个服务器集群中,服务器网卡名字都不相同;使用自动化批量配置不方便

如果服务器不重启,一般也不修改ip,这时候切换成传统命名规则来进行自动化配置会更方便


修改网卡名称为 eth(传统命名方式)的方法:


临时修改

系统重启选择内核时,按 e 可编辑Grub启动项,在Linux这行最后加入 net.ifnames=0 biosdevname=0


永久修改

修改配置文件:/etc/default/grub

在Linux这行最后加入 net.ifnames=0 biosdevname=0

使用 grub2-mkconfig -o /boot/grub2/grub.cfg 刷新配置文件

使用reboot重启即可


注:我在后期发现有些系统可能需要去更新网卡配置以达到名称一致性,所以此处仅供参考,可能各系统的刷新方式不同


查看网络信息


查看IP地址:ifconfigip addr show / ip addr / ip a


查看网关地址:route -nip route


查看DNS:cat /etc/resolv.conf 通过此文件修改DNS是临时生效的,是由网络管理服务生成的


使用 nslookup baidu.com可以通过当前配置的DNS查询目标域名的ip(通常用来检验DNS服务器是否配置成功)


网络管理工具


ifconfig 来源于net-tools 软件包

ifconfig ens160 up 启用ens160网卡

ifconfig ens160 down 禁言ens160网卡

ifconfig -a 列出所有网卡

ifconfig ens160 查看指定设备

ifconfig eth1 192.168.1.124/24配置网卡的ip和子网掩码(临时有效

局限性:如果你的网卡有多个ip,ifconfig无法显示出来,这时候可以使用 ip -a


ip系统自带的管理工具

ip link show 列出设备

ip link set [网卡] up/down控制网卡开关

ip addr add/del [ip/子网] dev [网卡]配置网卡的ip和子网掩码(临时有效

ip route show / ip route 查看路由

ip route add/del default via 12.0.0.254 dev eth1添加或删除默认路由(在路由表中找不到匹配路由的时候,默认使用此路由,所以是default


ip route add 192.168.1.0/24 via 12.0.0.254 dev eth1
在访问192.168.1.0/24这个网段的时候,通过eth1网卡转交给位于12.0.0.254的网关,由它代为查找

还有一种老写法
route add -net 192.168.1.0/24 gw 12.0.0.254 dev eth1
本质意义和上面的一样,只是此命令属于 `net-tools` 软件包,且是老写法


route add -host 指定的是单个地址


route add -net 指定的是一个网段


ip route add 不区分地址和网段


route add -host 192.168.1.1 gw 12.0.0.1 dev eth1
ip route add 192.168.1.1 via 12.0.0.1 dev eth1
上述两个本质是一样的

route add -net 192.168.1.0/24 gw 12.0.0.1 dev eth1
ip route add 192.168.1.0/24 via 12.0.0.1 dev eth1
上述两个本质也是一样的

我本人更推荐使用ip route 语法,这是Linux也推荐的一种语法,但第二种也要了解,因为ip route是新语法,可能在低版本系统上的兼容性不够


他在这里讲到了路由,但是他没说路由和网关究竟是什么,我查了资料去理解,感觉有点抽象,我研究了一下,路由和网关这里很抽象,我个人是理解了,我尽量使用自然语言描述,看看能不能写出来


路由代表路线,路由表代表地图,网卡代表的门,

我今天要去学校,我向系统指定了,必须走哪个门(网卡)必须找门外的大妈问路(网关)

不知道这样能不能理解

ip route add 192.168.1.1 via 12.0.0.1 dev eth1

意思就是我如果要去位于192.168.1.1的学校,我必须走eth1网卡(小区北门)出去,找到位于12.0.0.1的网关(门外大妈)问路,由门外大妈带路带我去学校


也可以理解成送快递,我让门口大妈去把快递送到学校去


这里其实不止可以配置网关,也可以配置成有转发功能的服务器,本质配置的是下一跳,此技术在我看来常用于跨网段,因为跨网段一般是网关去做的,所以下一跳基本也就配置成网关,大部分教材,老师讲的也都是配置成网关,网关本质其实是一个可以跨两个或多 个网段,帮助互相连接的设备。


via 配置的是下一跳(Next Hop),下一跳通常是网关,但也可以是一台开启了 IP 转发功能的 Linux 服务器或其他具有三层转发能力的设备。


这里初学本质抽象,xxx也没有讲的很详细,基本可以说浅显带过,所以我自己去研究了一下。


我看他视频课里有人和我有了一样的疑问,但估计是还没讲明白^-^


NetworkManager / Network-Script


这是两种主流工具,Network-Script常见于老版本,现在更常使用新版本


目录 /etc/NetworkManager/system-connection

命名规则:网卡名.nmconnection


NetworkManager提供了两种管理工具配置网络


图形化:nmtui(不推荐,我看着很麻烦


命令行:nmcli


nmcli device status 查看网卡状态


nmcli networking on/off 启动或关闭所有网卡


nmcli device show 列出网卡设备信息


nmcli device show eth1 查看eth1的网卡信息


nmcli device disconnect / connect eth1禁用或启动网卡与网卡配置文件的连接(类似禁用启用网卡)


nmcli connection show查看配置文件


nmcli connection add ifname eth0 type ethernet con-name eth0 ipv4.method manual ipv4.addresses 12.0.0.1/24 ipv4.dns 8.8.8.8 ipv4.gateway 12.0.0.254 autoconnect yes 创建一个由 NetworkManager 管理的连接配置文件,该配置包含 IP、网关、DNS 等参数,并绑定到指定网卡


nmcli connection add ifname eth0 type ethernet con-name eth0 ipv4.method manual ipv4.addresses 12.0.0.1/24 ipv4.dns 8.8.8.8 ipv4.gateway 12.0.0.254 autoconnect yes 

nmcli connection 对连接进行配置
add 添加一个连接
ifname eth0 指定网卡为eth0
type ethernet 指定连接方式为以太网(有多种,例如wl,vlan等)
con-name eth0 指定配置文件名为eth0
ipv4.method manual 指定ipv4的地址获取方式为手动,自动为auto
ipv4.addresses 12.0.0.1/24 指定ipv4地址和子网掩码
ipv4.dns 8.8.8.8 指定ipv4的dns为8.8.8.8
ipv4.gateway 12.0.0.254 指定网关为12.0.0.254
autoconnect yes 开机自动启动此配置。为yes


此部分我认为需要进行系统性的练习,因为组合方式太多样了


nmcli connection modify [配置文件名] [参数]修改已经存在的配置文件


nmcli connection delete [配置文件名或UUID]删除一个连接配置


nmcli device connect eth0 在没有配置文件的情况下让eth0建立连接,会自动给网卡生成一个同名文件并使用DHCP自动获取地址。如果没有DHCP就无法获取到ip地址,但可以通过modify去更改成手动获取


nmcli connection reload重新加载配置文件(如果通过配置文件修改,需要重新加载再使用up启动)


nmcli connection up eth0启动此配置文件,这里是配置文件名,不是网卡名


nmcli connection show 查看配置文件状态


nmcli device status 查看设备状态




修改主机名和主机映射关系


主机名的保存位置:/etc/hostname


hostname [主机名] 临时修改主机名


hostnamectl set-hostname [主机名] 永久修改


hostnamectl hostname [主机名] 永久修改


hostnamectl 查看系统信息


root@SH-Debian-Tencent:~# hostnamectl 
Static hostname: SH-Debian-Tencent
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 07d0bba3310d453bb45dad2461776bff
Boot ID: 1c10a63cc45849e6b4398daadb7b952f
Product UUID: 07d0bba3-310d-453b-b45d-ad2461776bff
Virtualization: kvm
Operating System: Debian GNU/Linux 13 (trixie)
Kernel: Linux 6.12.57+deb13-amd64
Architecture: x86-64
Hardware Vendor: Tencent Cloud
Hardware Model: CVM
Hardware Serial: 07d0bba3-310d-453b-b45d-ad2461776bff
Firmware Version: seabios-1.9.1-qemu-project.org
Firmware Date: Tue 2014-04-01
Firmware Age: 12y 3month 1w 1d


主机映射关系,就是去调整hosts文件


什么是hosts?hosts就是类似DNS的东西,但是你可以指定某个域名或某段文字为某个IP的域名,但Hosts只在本机生效


本质就是将主机名解析为IP地址的东西


Linux的本地解析文件地址:/etc/hosts


Windows的本地解析文件地址:C:\Windows\System32\drivers\etc\hosts


编写格式

IP地址 主机名


标准服务开放端口


系统服务端口目录:/etc/services


netstat -tunlp查看监听端口(此工具属于老方法,来源于net-tools软件包)


-t 列出tcp协议的

-u列出UDP协议的

-n以数字方式列出服务端口

-l列出已经监听的端口

-p显示PID及进程名


ss -tunlp查看监听端口(此工具属于新方法)


ss -an -a是列出所有端口,可以查看远端连接的ip


netstat和ss工具获取监听端口的方式不一样


网络Bond


一般用于高可用场景,防止因为网卡原因导致业务无法运行


将多张网卡虚拟成一个网卡,配置网络bond,根据不同的bond模式实现不同的效果


一般用于物理服务器,虚拟机可以配,但我认为没有意义,你物理机断了你虚拟机就断了,你物理机不断,虚拟机也不会断


普通虚拟机环境配置 Bond 意义较小,但在企业虚拟化平台中,Bond 常用于宿主机网络高可用。


Bond模式有些需要在交换机上进行配置


配置Bond最少需要两张网卡,一张网卡的Bond没有任何意义


Bond mode 1(active-backup 主备模式)


主网卡挂掉后切换成备用网卡


创建网络Bond 1 (创建虚拟接口,虚拟网卡


nmcli connection add type bond ifname bondtest con-name bondtest mode active-backup miimon 1000


将网卡加入到Bond 1虚拟网卡中(在Vmware虚拟软件上,会出现警告信息,这是正常现象)


在未指定 primary 的情况下,active-backup 模式通常以第一个加入 Bond 的 slave 作为初始 active 网卡,但可以通过 primary 参数修改优先网卡。


nmcli connection add type bond-slave ifname eth0 con-name bondtest-eth0 master bondtest

nmcli connection add type bond-slave ifname eth1 con-name bondtest-eth1 master bondtest


配置固定ip


nmcli connection modify bondtest ipv4.method manual ipv4.addresses 12.0.0.200/24 autoconnect yes

nmcli connection up bondtest


nmcli支持命令缩写,只要前缀唯一即可,例如connection add可简写为c a,常用缩写:connection=cdevice=dadd=amodify=mshow=sup=udelete=d


在这里的讲解其实在生产环境中配置我认为是有问题的,比如网关?比如生产环境会先生成bond再去改配置吗?可能是因为是教学所以说的没有那么全面。


我认为在生产环境中配置bond应该是这样写全然后添加去测试



引用chatgpt:教学环境通常分步骤创建 Bond,再修改 IP 配置,方便理解 Bond 结构;生产环境中可以在创建 connection 时直接写入 IP、网关、DNS 等完整配置。Bond 的 IP 配置应写在 Bond 接口上,而不是 slave 网卡上。



nmcli c a type bond ifname bond1 con-name bond1 autoconnect yes mode active-backup miimon 1000 ipv4.method manual ipv4.addresses 12.0.0.120/24 ipv4.dns 8.8.8.8 ipv4.gateway 12.0.0.1


注意:Bond 的 IP 配置应写在 Bond 接口配置上,而不是 slave 网卡配置上。


查看Bond的配置文件:cat /proc/net/bonding/[bond名]


vmware的三种模式


安装好Vmware后,子网中的第一个ip地址会给本机的虚拟网卡,第二个ip地址给到网关


VMware NAT默认虚拟网段通常如此分配,并非所有NAT环境规则。


桥接:将物理网卡虚拟成一个虚拟交换机,底下连接了各虚拟机,共用物理网卡的网络信息


仅主机:此模式不能上外网,只能通过虚拟交换机让物理机和虚拟机进行通讯。


Nat模式:网络地址转换,一个很神的技术,解决了IPv4地址不够的问题(也是我拿不到公网ip的主要原因)Nat模式中有一个虚拟Nat设备,这个虚拟Nat设备接入物理网卡进行地址转换,使用物理机的ip访问公网


Linux配置桥接网卡


我真是看xx了,为什么能让二层交换叠加一个三层接口给宿主机使用,太xx的抽象了,抽象到我已经无法用自然语言描述这个东西了,xxx的,可能是我现在逻辑混乱的问题


Linux bridge(br0)是一个虚拟二层交换设备,同时可以作为宿主机的三层网络接口,因此宿主机IP配置在br0上,eth0作为br0的物理端口连接外部网络,虚拟机通过br0接入同一二层网络。


br0是虚拟交换,同时也是宿主机的三层接口


如果你之前有相当扎实的网络基础,在这里可能也会崩溃,因为这违反了正常的物理网络模型,正常物理网络模型就是二层做二层的事,三层做三层的事情;而在Linux中的网络抽象概念中会组合不同的能力,这个接口既可以拥有二层交换的功能,也可以拥有三层接入的功能,所以会看着很抽象,如果遇到这种疑问不要觉得是自己理解有问题,而有可能是之前学习网络知识模型太扎实导致的这个问题,这里引用我刚刚的心理情况,也是GPT总结的:“???你到底是什么东西???”,我希望遇到这个问题因为原先的旧知识而无法接纳这种新模型的时候,还是要去多追问,去问AI,去问老师,去Linuxdo上问大佬,去把他搞明白,即便你是带着情绪的,即便你很不耐烦,但时代是进步的,技术是发展的,一味的守旧不是办法,人是需要不断进步的。


创建网桥


nmcli c a type bridge ifname br0 con-name br0


连接到物理网卡


nmcli c a type bridge-slave ifname eth0 con-name eth0 master br0


配置网桥ip


nmcli c m br0 ipv4.method auto autoconnect yes


同样也可以在创建网桥的时候把ip一并部署了


nmcli c a type bridge ifname br0 con-name br0 ipv4.method auto autoconnect yes;
nmcli c a type bridge-slave ifname eth0 con-name eth0 master br0;
nmcli c u br0


同样的可以先使用bond然后再创建bridge(这个目前待定,不确定怎么做


nmcli c a type bond mode active-backup ifname bond1 con-name bond1 miimon 1000 antoconnect yes;
nmcli c a type bond-slave ifname eth0 con-name eth0 master bond1;
nmcli c a type bond-slave ifname eth1 con-name eth1 master bond1;
nmcli c a type bridge ifname br0 con-name br0 ipv4.method auto autoconnect yes;
nmcli c m bond1 type bridge-slove master br0;
nmcli c u bond1;
nmcli c u br0




Linux的NetworkManager创建bond绑定bridge的问题



我查了百度和Google,问了ai,也查了红帽官方文档,要么使用的是老版本的Network-script,要么就是没详细讲怎么绑定,ai也说不清怎么搞,我现在手上没有可用的实验环境,望大佬帮解
首先,我先创建bond和bridge
#创建bond
nmcil c a type bond mode active-backup ifname bond1 con-name bond1 miimon …


我查了百度和Google,问了ai,也查了红帽官方文档,要么使用的是老版本的Network-script,要么就是没详细讲怎么绑定,ai也说不清怎么搞,我现在手上没有可用的实验环境,望大佬帮解


首先,我先创建bond和bridge


#创建bond 
nmcli c a type bond mode active-backup ifname bond1 con-name bond1 miimon 1000 antoconnect yes;
#将物理网卡绑定到bond
nmcli c a type bond-slave ifname eth0 con-name eth0 master bond1;
nmcli c a type bond-slave ifname eth1 con-name eth1 master bond1;
#创建bridge
nmcli c a type bridge ifname br0 con-name br0 ipv4.method auto autoconnect yes;


接下来怎么绑定我其实能想到的有三种写法


#第一种,我能想到的缺陷就是又创建了一次配置文件,即便我配置文件改了名,那用的到底是哪个配置文件? 
nmcli c a ifname bond1 type bridge-slave con-name bond1 master br0
#第二种,他的type符合真的可以适配吗?
nmcli c m bond1 master br0
#第三种,如果改了type,他还是bond吗?
nmcli c m bond1 type bridge-slove master br0


望大佬解答






在此官方文档中已经体现出来nmcli配置bond绑定bridge的演示,之前没搜到是因为master/slave已经在新版本的NetworkManager中被逐步废弃,已经被替换为了controller/port直接将接口配置为ethernet模式然后通过controller/master直接接入bond


#旧版本
nmcli c a type bond-slave ifname eth0 con-name eth0 master bond1

#新版本
nmcli c a type ethernet ifname eth0 con-name eth0 master bond1
nmcli c a type ethernet ifname eth0 con-name eth0 controller bond1


接我之前的问题


#官方文档演示
nmcli connection modify bond0 controller bridge0
nmcli connection modify bond1 controller bridge0

#那我应该写成的是
nmcli c m bond1 master br0
nmcli c m bond1 controller br0


master已经被变成了可兼容的旧语法了,此问题完结




关于新版NetworkManager的语法


新版NetworkManager兼容旧语法,也就是刚刚学的那些,全部是旧语法,这是我刚刚和GPT去摸官方文档发现的,以简单的例子去说明这些东西


bond的配置


#旧版本
nmcli c a type bond ifname bond1 con-name bond1 ipv4.method auto autoconnect yes
nmcli c a type bond-slave ifname eth0 con-name eth0 master bond1
nmcli c a type bond-slave ifname eth1 con-name eth1 master bond1
nmcli c u bond1

#新版本
nmcli c a type bond ifname bond1 mode active-backup con-name bond1 ipv4.method auto autoconnect yes
nmcli c a type ethernet ifname eth0 con-name eth0 controller bond1
nmcli c a type ethernet ifname eth1 con-name eth1 controller bond1
nmcli c u bond1


master/slave 参数在新版 NetworkManager 中被逐渐弃用,替换为 controller/port 模型。但为了兼容旧脚本和旧习惯,NetworkManager 仍然支持旧语法。


brige的配置


#旧版本
nmcli c a type bridge ifname br0 con-name br0 ipv4.method auto autoconnect yes
nmcli c m bond1 master br0
nmcli c u br0

#新版本
nmcli c a type bridge ifname br0 con-name br0 ipv4.method auto autoconnect yes
nmcli c m bond1 controller br0
nmcli c u br0


但因为兼容层的存在在新版本中仍可写为 master(拿bond举例)


nmcli c a type bond ifname bond1 mode active-backup con-name bond1 ipv4.method auto autoconnect yes
nmcli c a type ethernet ifname eth0 con-name eth0 master bond1
nmcli c a type ethernet ifname eth1 con-name eth1 master bond1
nmcli c u bond1




END


我可能学习和理解的不是那么的全面,还请佬友帮助进行补充,我在之后的学习中如果还遇到相关的问题会在此wiki中进行补充,谢谢你能看到这里

最新回复 (4)
  • wjy 07-10 23:48
    1

    佬加油,把自己学的东西用自己的语言表述一遍是非常好的学习方法

  • 怎么是这样的? 楼主 07-10 23:55
    2

    不过说实话,作为一个Linux社区,我感觉讨论Linux的人好少 ^-^

  • wjy 07-10 23:56
    3

    这里是ai社区,不是Linux社区啦

  • G-AISC官方 07-11 01:13
    4

    这里是ai社区,不是Linux社区啦

* 帖子来源Linux.do
返回