RHEL 7.9,我有一个四端口网卡
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 01:23:45:67:89:ab brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/16 brd 192.168.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::a4:3cef:41fa:73e1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 01:23:45:67:89:ac brd ff:ff:ff:ff:ff:ff
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 01:23:45:67:89:ad brd ff:ff:ff:ff:ff:ff
5: eth3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 01:23:45:67:89:ae brd ff:ff:ff:ff:ff:ff
# -----------------------------------------------------------------------------------------
ls -FC /etc/sysconfig/network-scripts
ifcfg-ens11f0 ifdown@ ifdown-isdn@ ifdown-TeamPort* ifup-ib* ifup-post* ifup-tunnel*
ifcfg-ens11f1 ifdown-bnep* ifdown-post* ifdown-tunnel* ifup-ippp* ifup-ppp* ifup-wireless*
ifcfg-ens11f2 ifdown-eth* ifdown-ppp* ifup@ ifup-ipv6* ifup-routes* init.ipv6-global*
ifcfg-ens11f3 ifdown-ib* ifdown-routes* ifup-aliases* ifup-isdn@ ifup-sit* network-functions
ifcfg-eth0 ifdown-ippp* ifdown-sit* ifup-bnep* ifup-plip* ifup-Team* network-functions-ipv6
ifcfg-lo ifdown-ipv6* ifdown-Team* ifup-eth* ifup-plusb* ifup-TeamPort* route-eth0
我的接口名称一开始是,ens11f
但我已经完成了GRUB_CMDLINE_LINUX = net.ifnames=0 biosdevname=0
。关于网络接口名称,网络在 Linux(特别是 RHEL 7,如果重要的话)中如何工作?能否对下面的文件进行解释/etc/sysconfig/network-scripts
,并且该位置的所有内容都重要吗?
- 为什么我没有看到
ifcfg-eth1
andifcfg-eth2
和ifcfg-eth3
?这真的让我很困惑。 - MAC 地址如何或在哪里映射到接口名称,因为它不在我的
ifcfg-eth0
文件中? - UUID 在每个网络配置文件中重要吗?
- 我想了解整个网络配置在linux中是如何工作的。我只涉足图形网络管理器 GUI,大多数时候我可以使用它完全搞乱一切;就像 Networkmanager GUI 只是冰山一角?
答案1
当系统第一次启动时,它看到您的四端口网卡使用新式名称(ens11f[0-3]
),发现它们不存在任何配置,并为每个网卡创建默认配置文件,并将它们的 MAC 地址和 UUID 记录到这些配置文件中。配置文件。
然后,您添加了net.ifnames=0 biosdevname=0
启动选项。之后,四端口 NIC 使用旧式名称可见 ( eth[0-3]
)。但由于 MAC 地址和 UUID 仍然相同,因此配置系统足够聪明,可以注意到这些 NIC 以前已经见过,尽管名称不同。
盲目创建新的配置文件可能与系统管理员可能已经设置的内容重叠,因此...最安全的是不执行任何操作并让系统管理员决定需要做什么:也许他们想要迁移现有设置换成新名字,或者也许他们想从头开始。
如果您删除了现在无用的ifcfg-ens11f*
配置文件,那么系统可能会在下次启动时生成新的默认配置文件。或者也许只有在运行特殊firstboot
程序时才会发生这种情况,我不记得了。
如果您希望将特定的 NIC 名称绑定到具有特定硬件 MAC 地址的卡,您可以添加HWADDR=<MAC address>
到您的ifcfg-eth*
文件中。但是,由于某些集群虚拟化平台并不总是允许 VM 具有从 VM 的一次启动到下一次启动持续存在的 MAC 地址,因此保留该HWADDR=
字段也必须是有效的配置:在这种情况下,NIC 名称纯粹由检测确定顺序由 NIC 驱动程序及其加载顺序或您可能添加的任何 udev 规则确定。
(对于虚拟机内的半虚拟化网卡驱动程序,驱动程序检测到的顺序可能会很好地工作:半虚拟化驱动程序可以与虚拟化主机通信,并确保虚拟机的网卡始终以相同的顺序和编号呈现,无论是在虚拟化平台中管理工具和虚拟机本身。)
UUID 本身对于网络配置没有任何意义,但如果您使用 DHCP,则 DHCP 服务器可以将其用作备用客户端标识符(DHCP 选项代码 61;如果需要更多详细信息,请参阅 RFC2132 和 RFC4361)。如果您为每个 DHCP 客户端主机分配了特定于主机的 UUID,并且希望每个主机在更换 NIC 后仍继续使用相同的 DHCP 分配,则可以在此处提供 UUID。
就像 Networkmanager GUI 只是冰山一角?
哦是的。这个兔子洞相当深。
一开始只有net-tools
网络配置命令包。每个发行版都开发了自己的方法来使用它们来配置网络设置并持久存储它们。
随着时间的推移,出现了一些标准化:RedHat Linux 的后代发行版倾向于使用这些/etc/sysconfig/network-scripts/ifcfg-*
文件,SuSE 及其后代做了一些几乎但不太相似的事情,Debian 及其后代使用单个/etc/network/interfaces
文件。其他发行版要么模仿其中之一,要么制定自己的解决方案。
在某个时候,该包的开发net-tools
陷入了停滞,并且开发了更高级的命令行网络配置工具包:iproute2
.但并非所有人都希望从熟悉的ifconfig
和命令迁移route
到新的ip addr
和命令ip route
,尽管新命令启用了旧命令无法配置的新功能net-tools
。
然后是带有 WiFi 的笔记本电脑、VPN 的激增以及存储 WiFi 和 VPN 密码的需要,这可能是个人的:即使在同一台笔记本电脑上,一个用户可能知道特定 WiFi 网络的密码,而另一个用户可能不知道,这可能是一种理想的情况(例如父母和孩子)。 NetworkManager 的设计既可以实现每个用户的网络设置存储,又可以统一不同版本发行版之间的网络配置管理。
为此,NetworkManager 可以有多个配置存储后端:始终存在 NetworkManager 的“本机”配置存储后端,该后端使用/etc/NetworkManager/system-connections/
目录,并且可以补充其他配置后端(如果它们无法处理例如 VPN 连接的信息)。通常还有一个特定于发行版的配置后端,它至少可以读取(有时也可以写入)该发行版的“传统”配置文件。然后通常有一个特定于桌面环境的配置后端,它使用桌面环境具有的任何安全存储机制(例如 GNOME 密钥环或 KDE 钱包)来管理每个用户配置设置的存储。
NetworkManager 还包括一个 D-Bus 接口,可以轻松分离特权 NetworkManager 主进程及其各种用户界面、GUI 等。
该systemd
套件还包括一个可选systemd-networkd
组件,我曾经读过该组件最初主要是作为嵌入式系统的轻量级网络配置子系统,但似乎从那里开始滚雪球。
您可能看过这部 XKCD 漫画:
Ubuntu 开发了netplan
一种基于 YAML 的网络配置语法和一组配置后端来管理 NetworkManagersystemd-networkd
和netplan
.
这个故事还没有结束:是否会出现任何收敛,或者每个解决方案是否会找到其最佳位置,还有待观察。