零、前言

以下内容基于ubuntu 20.04

ubuntu系统中,若没有自动设置网络的服务,一般我们可以通过两种常用方法来配置静态ip

  1. 使用命令来配置静态ip
  2. 若安装有网络管理工具或服务,通过修改相关配置文件来实现

对于第二种方法,在ubuntu系统中,常用的网络管理工具或服务有NetworkManagersystemd-networkd以及netplan等等

我们可以通过如下方法来查看系统使用的是何种工具或服务

  1. 检测相关工具或服务是否存在
#检测NetworkManagerf服务
systemctl status NetworkManager
#检测systemd-network服务
systemd-networkd
#检测netplan版本
netplan --v
  1. 检测配置文件是否存在
#查看NetworkManager的文件是否存在
/etc/NetworkManager/NetworkManager.conf 
#查看systemd-networkd的文件是否存在
/etc/systemd/network/xxx.network
#查看netplan文件是否存在
/etc/netplan/xxx.yaml

通过检测我的系统中目前只存在systemd-networkd服务,所以接下来针对systemd-networkd服务展开讲如何进行静态ip的配置

一、通过systemd-networkd配置文件修改静态ip

在使用 systemd-networkd 进行静态网络配置

  1. 创建网络服务配置文件: 在 /etc/systemd/network/ 目录下,创建一个新的 .network 文件,例如 01-eth0.network文件名的数字前缀用于控制启动顺序

  2. 编辑网络配置文件: 添加静态网络配置,以下是一个配置文件的示例:

    [Match]
    Name=eth0
    
    [Network]
    Address=10.100.1.100/24
    Gateway=10.100.1.1
    DNS=8.8.8.8
    

    在这个示例中:

    • [Match] 部分用于指定这个配置文件适用于哪个网络接口(这里是 eth0

    • [Network]部分包含了网络配置:

      • Address 设置了静态ip地址和子网掩码(这里是 192.168.1.100/24
      • Gateway 设置了默认网关。
      • DNS 设置了一个DNS服务器地址。
  3. 重启网络接口并加入自启动:

    systemctl restart systemd-networkd
    systemctl enable systemd-networkd
    
  4. 验证配置:

    1. 输入ifconfig来查看ip是否配置成功,且网络接口是否成功启动
    ifconfig
    

    image-20240528143821755

    在网络接口中看到eth0已被启动且ip地址设置成功

    1. ping一个公网地址和域名来检测是否能正常上网
    #百度ip之一
    ping 183.2.172.42
    
    #百度域名
    ping baidu.com
    

    注意:在ping检测过程中,可能会出现ip能够ping出去,但是域名不行,这是dns设置导致的问题,需要进行对应的修改,具体参考第二章。

二、修改DNS配置文件以及配置文件覆盖问题

1.修改DNS配置文件

/etc/resolv.conf文件中定义了DNS服务器地址,若系统不能正常解析外部地址,我们可以尝试在其中添加额外的DNS服务器地址,例如google提供的地址

nameserver 8.8.8.8
nameserver 8.8.4.4

修改完成后,正常情况下系统便可解析外部地址了。

2.解决DNS配置文件覆盖问题

按照步骤1修改完后,重启系统会发现resolv.conf文件又恢复原样了,此时仔细阅读resolv.conf文件会发现注释内容中提到了如下:

image-20240528145611751

注释中提到了该文件来自于systemd-resolved服务,不要编辑它。所以该文件是由某个服务生成的,我们修改它是没有作用的。

这里提到了systemd-resolved服务,所以我们可以通过如下命令查看该服务是否在运行

systemctl status systemd-resolved

image-20240528145936729

可以看到systemd-resolved服务确实是在运行,所以/etc/resolv.conf文件大概率由该服务控制的,顺着这个问题我们需要找到该服务的配置文件,在/etc/systemd/文件夹中,会看到存在一个resolved.conf配置文件,该文件即为对应服务的配置文件,打开并修改它,取消DNS这一行的注释,并添加8.8.8.8

image-20240528150337099

修改完成后,重启服务或reboot重启系统

systemctl restart systemd-resolved

或reboot

此时再次查看/etc/resolved.conf文件依然没有变化,继续检查问题所在,仔细观察会发现该文件其实是一个链接文件,并不是源文件本身,其指向了/run/systemd/resolve/stub-resolv.conf

image-20240528151209120

我们进入对应文件夹下查看情况,在这里看到了存在两个conf文件

cd /run/systemd/resolve/

image-20240528151403800

检查两个文件内容,发现resolv.conf文件已经正常按照我们的修改变化了,而stub-resolv.conf是没有变化的,所以我们判断systemd-resolved服务会更新resolv.conf这个文件,而stub-resolv.conf只是个本地存根,并不会更新。

到这里我们会发现,/etc/resolved.conf文件没有变化是因为软连接到了错误的文件上,修改软连接即可

#可以先将旧链接备份
mv /etc/resolv.conf /etc/resolv.conf.bak

#新建软连接
ln  -s  /run/systemd/resolve/resolv.conf  /etc/

此时再查看/etc/resolv.conf文件,DNS服务器已添加了8.8.8.8,系统已经能够正常解析域名。

文章作者: keeshow
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 keeshow
默认分类 Linux
喜欢就支持一下吧