Linux静态IP配置与DNS配置
零、前言
以下内容基于ubuntu 20.04
在ubuntu系统中,若没有自动设置网络的服务,一般我们可以通过两种常用方法来配置静态ip
- 使用命令来配置静态
ip - 若安装有网络管理工具或服务,通过修改相关配置文件来实现
对于第二种方法,在ubuntu系统中,常用的网络管理工具或服务有NetworkManager、systemd-networkd以及netplan等等
我们可以通过如下方法来查看系统使用的是何种工具或服务
- 检测相关工具或服务是否存在
#检测NetworkManagerf服务
systemctl status NetworkManager
#检测systemd-network服务
systemd-networkd
#检测netplan版本
netplan --v
- 检测配置文件是否存在
#查看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 进行静态网络配置
-
创建网络服务配置文件: 在
/etc/systemd/network/目录下,创建一个新的.network文件,例如01-eth0.network文件名的数字前缀用于控制启动顺序 -
编辑网络配置文件: 添加静态网络配置,以下是一个配置文件的示例:
[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服务器地址。
-
-
重启网络接口并加入自启动:
systemctl restart systemd-networkd systemctl enable systemd-networkd -
验证配置:
- 输入
ifconfig来查看ip是否配置成功,且网络接口是否成功启动
ifconfig
在网络接口中看到
eth0已被启动且ip地址设置成功- 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文件会发现注释内容中提到了如下:

注释中提到了该文件来自于systemd-resolved服务,不要编辑它。所以该文件是由某个服务生成的,我们修改它是没有作用的。
这里提到了systemd-resolved服务,所以我们可以通过如下命令查看该服务是否在运行
systemctl status systemd-resolved

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

修改完成后,重启服务或reboot重启系统
systemctl restart systemd-resolved
或reboot
此时再次查看/etc/resolved.conf文件依然没有变化,继续检查问题所在,仔细观察会发现该文件其实是一个链接文件,并不是源文件本身,其指向了/run/systemd/resolve/stub-resolv.conf

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

检查两个文件内容,发现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,系统已经能够正常解析域名。