Linux 网络管理

Linux的网络管理主要涉及到的是IP地址配置、路由信息管理,以及网卡名的修改等。

网络配置


网络配置流程

1、通过用户空间的工具来配置IP地址、子网掩码、路由等信息后,这些工具通常会进行系统调用将网络配置信息传递给内核;

2、内核在接收到来自用户空间的网络配置信息后,将其存储在内核网络栈的相应数据结构中。例如,设备的IP地址、子网掩码等信息会保存在相关的网络设备结构中。

3、网络通信时,内核会根据配置中指定的网络接口名称(如eth0、wlan0等)查找相应的网络接口驱动程序,驱动负责在物理层面上与网络设备进行通信。它将内核传递的数据包转换为适当的格式,并通过物理网卡发送到网络中。


网卡命名规则

  • ethx命名方式:刚开始是ethX(X是一个数字)这种命名方式,后面因为有多个网卡时,命名可能会因为启动顺序或其他因素而发生变化,所以这种命名方式被弃用了。

  • 服务器硬件命名方式:ensX(例如ens33)、enpXsY(例如:enp2s0)

  • MAC地址命名方式:enx(x是一长串数字)

  • 硬件路径命名方式:enoX、ensX、ensX等。

Linux主机上,网卡名具体叫什么是由/lib/udev/rules.d/下的规则定义的

如果习惯了ethx这种命名方式,可以通过修改grub配置文件来实现

如果是centos:

1、编辑配置文件

sudo vim /etc/default/grub 

2、修改配置文件的值

# 修改此行
GRUB_CMDLINE_LINUX="spectre_v2=retpoline rhgb quiet net.ifnames=0"

3、生成新的配置文件

# centos里面是grub2
grub2-mkconfig -o /boot/grub/grub.cfg或update-grub

4、重启系统

sudo reboot

如果是ubuntu:

1、编辑配置文件

sudo vim /etc/default/grub

2、修改配置

# 修改这行此行
GRUB_CMDLINE_LINUX="net.ifnames=0"

3、重新生成配置文件

 sudo grub-mkconfig -o /boot/grub/grub.cfg

4、重启系统

sudo reboot

通过配置文件的方式配置网络

这种方式一般用在只带有字符界面的Linux系统中。


centos7 网络配置

通过修改配置文件,然后重启服务的方式来实现网络的修改

1、修改配置文件

# 配置文件路径:/etc/sysconfig/network-scripts/ifcfg-IFACE(ifcfg-网卡名)

# 这个网卡名无所谓,但是为了方便管理,最好把这个名字设置和网卡的名字一样。

2、在配置文件中添加相关的配置,提供了相关的变量,给这些变量赋值就行了。

  • TYPE --- 设备类型,常见有的Ethernet, Bridge

  • NAME --- 描述信息,一般和网卡名同名,设置成什么无所谓

  • DEVICE --- 网络设备的名称,如eth0或ens33。

  • BOOTPROTO --- 定义网络接口获取其IP地址的方式的变量。dhcp(动态), static(静态), none(也表示静态地址), bootp(表明该接口使用BOOTP协议来动态获取其IP地址)

  • IPADDR --- 具体的IPv4地址

  • NETMASK --- 子网掩码点分十进制的写法,如:255.255.255.0

  • PREFIX --- 子网掩码CIDR表示法的写法(和NETMASK二选一)

  • GATEWAY --- 默认网关的IP地址

  • ONBOOT --- 是否在系统启动时激活这个网络接口 yes:启用网卡, no:禁用网卡

  • DNS1和DNS2 --- 首选和备选DNS服务器的IP地址

例如:静态获取ip地址配置

TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="10.0.0.7"
PREFIX="24"
GATEWAY="10.0.0.2"
DNS1="180.76.76.76"

例如:动态ip地址配置

TYPE="Ethernet"
BOOTPROTO="dhcp"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"

3、配置文件编写完成后,重服务才能使得配置生效
因为修改了网络配置文件,实际上只是修改了一个静态的文件,本身并不会直接触发任何变化。所以需要一个进程或服务来读取这些更改并应用它们。这个时候可以通过重启network或NetworkManager服务让配置生效。

  • centos6:network是默认的网络管理服务,networkmanager也存在,但是不是默认的。所以centos6里面执行 service network restart 生效

  • centos7:networkmanager是默认的管理服务,network当然也还可以用。centos7中执行 systemctl restart network使得配置生效

  • centos8:只有networkmanager服务了,把network服务给废弃了。所以要执行 systemctl restart NetWorkManager.service 才能使得配置生效

ubuntu1604 网络配置

1、修改配置文件

ubuntu1604的网络主配置文件是 /etc/network/interfaces

#  /etc/network/interfaces

2、在配置文件中加入相关配置

例如:静态ip地址配置

sudo vim /etc/network/interfaces
auto eth0 # 表示在系统启动时自动启动指定的网络接口
iface eth0 inet static或dhcp    #  定义一个接口以及如何配置该接口
    address 192.168.1.10  # IPv4地址
    netmask 255.255.255.0 # 子网掩码
    gateway 192.168.1.1   # 网关
    dns-nameserver 180.76.76.76 # dns服务器地址

例如:动态ip地址配置

sudo vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp

3、重新启动服务
在ubuntu1604上,/etc/network/interfaces 和 /etc/network/interfaces.d/ 的配置是由传统的 networking.service 管理的,所以修改了这些配置文件需要重启networking服务才会生效。

sudo systemctl restart networking

ubuntu1804 网络配置

自 ubuntu 17.10 开始,Ubuntu 已放弃在 /etc/network/interfaces 里设置静态 IP 的办法了,即使配置也不会生效,而是在/etc/netplan/中创建 以yaml结尾的配置文件来配置网络。
修改配置后生效也不是重启networking服务了,而是执行netplan命令来生效。

1、编辑配置文件

配置文件放在/etc/netplan/下,以 .yaml结尾

# 例如:/etc/netplan/XXX.yaml  #配置文件的名字可以随意起

2、编辑配置文件内容

相对于ubuntu1604来说,ubuntu1804及以后的版本是采用yaml格式的配置来配置网络了。配置文件采用键值对的方式进行配置。

例如: 静态IP地址配置

sudo vim /etc/netplan/01-netcfg.yaml
network:                          # 固定格式
  version: 2                      # 版本号
  renderer: networkd              # renderer: networkd 指示 netplan 使用 systemd-networkd 作为后端来配置网络,也可以是renderer: NetworkManager
  ethernets:
    eth0:                         # 网卡名
      addresses:                  # 配置多个地址就写多个ip地址
      - 192.168.8.10/24           # 需要配置的ip地址
      - 10.0.0.10/8               # 这里给这个网卡配置了两个ip地址
      gateway4: 10.0.0.2          # ipv4的网关配置
      nameservers:                # 如果要配置DNS就需要加这个
        addresses:                # 添加的DNS服务器地址,最多可以添加三个
        - 180.76.76.76
        - 8.8.8.8
        - 1.1.1.1

例如: 动态IP地址配置;

sudo vim /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd   # 配置会被转换为 systemd-networkd 能理解的格式
  ethernets:
    eth0:
      dhcp4: yes

3、配置完成后,执行netplan命令使得配置生效

Netplan 本身不直接处理网络连接,而是将配置生成为底层网络管理工具所使用的格式。配置文件中的renderer 关键字在 Netplan 中定义了哪个底层的网络管理工具将用于应用配置。

sudo netplan apply
  • networkd: systemd-networkd 服务的一部分,是一个小而高效的守护进程,设计用于管理物理和虚拟网络设备。它主要在没有桌面环境的服务器版本上使用。

  • NetworkManager: 一个完整的网络管理解决方案,设计用于管理各种网络连接类型,尤其是在桌面环境中。它包括命令行、图形和文本界面的工具。

通过图形界面配置网络

带有图形界面的 Linux 发行版,网络配置和管理的功能通常是由 NetworkManager 提供。在图形界面进行网络设置的时候,实际上GUI是与 NetworkManager 的守护进程进行交互,将用户在图形界面输入的配置请求传递给后台的NetworkManager。然后NetworkManager再和Linux内核进行交互。

所以在图形界面上配置一个新的网络连接或更改现有的网络设置时,这些更改最终会被保存到 /etc/NetworkManager/system-connections/ 目录下的相应文件中。

ubuntu1604

1、点击右上角的系统设置

2、选择网络

3、选择指定的网络,wired就是有线

4、点击option就可以进行相关设置了

ubuntu1804 图形界面的配置文件

带图形界面的ubuntu1804及后面的版本中,我们可以看到/etc/netplan/01-network-manager-all.yaml这个配置文件的内容是:

network:
  version: 2
  renderer: NetworkManager

原因:

Netplan 使用 YAML 描述网络配置,但Netplan本身并不直接处理网络连接。只会将配置转发给一个后端,由后端程序处理网络连接。

Netplan 支持两个后端渲染器:NetworkManager 和 systemd-networkd

  • NetworkManager:现在默认的网络管里工具,功能强大。

  • systemd-networkd:最小安装,不带图形界面一般是用这个来作为网络管理工具(排除像centos这种很老的发行版系统)

配置文件中的renderer:

  • renderer: NetworkManager 表示 Netplan 已配置为将所有网络配置转发给 NetworkManager 处理

  • renderer: networkd表示使用 systemd-networkd 来管理网络配置

带图形界面,通过配置文件配置IP地址注意事项:

我们可以知道,如果是带图形界面的ubuntu1804及以上的系统,想要通过配置文件来指定ip地址,需要将renderer指向networkd,让 systemd-networkd 来管理了网络配置,让 NetworkManager 不应该再对它们进行任何操作,就不会出现冲突的问题

但是由于 NetworkManager 不再管理那些接口,所以在 GUI 中,这些接口可能会显示为未托管或未连接。

如果renderer仍然指向NetworkManager,可能会出现冲突。因为前端的GUI图形界面就是调用后端的NetworkManager进行网络管理,然后再在配置文件里面再指定了NetworkManager并配置网络,就会出现冲突的问题;


network和NetworkManager区别

  • network服务:使用脚本和配置文件来管理和控制网络接口。在系统V init 或其他传统的 init 系统中,它主要是通过初始化脚本实现网络的配置;

  • NetworkManager守护进程:运行在后台,负责管理网络连接。它特别适合于桌面环境和移动设备,稳定且比network服务更强大。

早期的centos6,network 服务是默认的网络管理工具。但 NetworkManager 也是可用的,尤其是在桌面版本中,centos7就将NetworkManager 作为了默认的网络管理工具。但 network 服务仍然存在,从centos8开始就没network服务了。

如 Ubuntu,NetworkManager 很早就被采纳为默认的网络管理工具,特别是在桌面版本中,如ubuntu1604就是默认采用的NetworkManager。

ubuntu1604默认使用NetworkManager作为网络管理工具,但是修改配置文件配置网络的时候,还是重启networking服务

可以简单理解为是历史原因造成的,在 Debian 和基于 Debian 的系统,如早期的 Ubuntu中,/etc/network/interfaces 是标准的网络配置文件。随着时间的推移,为了增加易用性和更现代的网络管理能力,NetworkManager 被引入。

但为了保持向后兼容性,/etc/network/interfaces 仍然被支持。NetworkManager 默认配置为忽略在 /etc/network/interfaces 中配置的接口,从而允许两种方法并存。这就是为什么ubuntu1604默认使用NetworkManager作为网络管理工具,修改这个配置文件还需要重启networking服务的原因。

在ubuntu1604中,如果不想修改/etc/network/interfaces文件配置网络,用nmcli这个命令行工具就可以了,nmcli是NetworkManager提供的一个网络配置工具。

posted on 2022-07-09 22:44  背对背依靠  阅读(4768)  评论(0编辑  收藏  举报