Ubuntu修改静态IP、网关和DNS的方法总结
ubuntu系统(其他debian的衍生版本好像也可以)修改静态IP有以下几种方法。(搜索总结,可能也不太对)
/etc/netplan (use)
Ubuntu 18.04开始可以使用netplan配置网络,其也是默认安装的。配置文件位于/etc/netplan/xxx.yaml
中,netplan默认是使用NetworkManager来配置网卡信息的。
old: -- (Ubuntu 20.04.及以前版本使用)
# 可以将其修改为如下格式,来修改网卡信息
# 需要注意缩进关系,不然就会报错
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses: [192.168.16.136/24]
gateway4: 192.168.16.2
nameservers:
addresses: [192.168.16.2]
[网卡2的设备名称]:
dhcp4: no
addresses: [192.168.16.145/24]
gateway4: 192.168.16.2
nameservers:
addresses: [192.168.16.2]
# 然后运行,即可生效
sudo netplan apply
new: -- (Ubuntu 20.04.之后版本使用)
root@my-ubuntu-vm1:~# vi /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
#dhcp4: true
dhcp4: false
addresses: [192.168.31.85/24]
optional: true
routes:
- to: default
via: 192.168.31.1
nameservers:
addresses: [114.114.114.114]
version: 2
# 然后运行,即可生效
sudo netplan apply
- ethernets: 网卡数组-------------第二层
- ens33: 网卡名字-------------第三层
- dhcp4: 表示通过dhcp获取ip还是配置静态ip-------------第四层
- addresses:配置ip地址与子网掩码-------------第四层
- gateway4: 网关-------------第四层
- nameservers: dns服务器-------------第四层
- addresses:dns服务器的地址列表-------------第五层
这种方法修改也比较方便。
NetworkManager
Ubuntu等带有界面的linux操作系统默认安装了NetworkManager,正常可以直接通过 系统设置 操作NetworkManager的图形化界面修改网卡的静态IP、网关和DNS。如下为ubuntu的操作界面。
同时NetworkManager一般还提供nmcil
和nmtui
的命令,可以通过终端来修改。
-
nmcil的基本操作流程
显示网卡连接信息
nmcli connection show
短格式
nmcli con show
例如会返回如下信息
NAME UUID TYPE DEVICE
有线连接 1 ee4dce9e-bf8f-3c4b-85d5-dd5a4ac0a2f1 ethernet ens33显示网卡的具体信息
NAME有中文的时候需要加''
nmcli con show '有线连接 1'
nmcli con show [NAME]|[UUID]
修改都需要 sudo 权限
修改对应网卡的信息
修改网卡的模式,自动/手动
nmcli con modify [NAME]|[UUID] ipv4.method auto|manual
设置为自动获取IP
nmcli con modify '有线连接 1' ipv4.method auto
修改IP地址
nmcli con modify [NAME]|[UUID] ipv4.addresses [ip/mask]
修改网关
nmcli con modify [NAME]|[UUID] ipv4.gateway [gateway]
修改DNS
nmcli con modify [NAME]|[UUID] ipv4.dns [dns]
上述修改后需要重启开启网卡才能生效
nmcli con down [NAME]|[UUID]
nmcli con up [NAME]|[UUID]未生效还可以尝试重启NetworkManager服务或者系统重启
sudo service network-manager restart
完整示例
设置'有线网卡 1'的IP地址为192.168.16.140,子网掩码为 255.255.255.0,网关为 192.168.16.2,DNS为 192.168.16.2
sudo nmcli con modify '有线网卡 1' ipv4.method manual
sudo nmcli con modify '有线网卡 1' ipv4.addresses 192.168.16.140/24
sudo nmcli con modify '有线网卡 1' ipv4.gateway 192.168.16.2
sudo nmcli con modify '有线网卡 1' ipv4.dns 192.168.16.2
sudo nmcli con down '有线网卡 1'
sudo nmcli con up '有线网卡 1' -
nmtui的基本操作流程
在终端中输入nmtui
就会进入修改网卡信息的终端ui界面中,根据操作提示修改即可,注意修改后,需要重启网卡,启用连接 -> [选择对应的网卡] -> 禁用 -> 启用,修改才会生效。修改失败的话,就sudo nmtui
再试试
通过图形化界面、nmcli指令和nmtui指令操作,最终的配置信息都保存在/etc/NetworkManager
文件夹中,网卡的配置文件在/etc/NetworkManager/system-connections
文件夹中,也可以直接修改网卡配置文件来修改IP等,注意修改前最好备份一下配置文件。
经过测试,修改后需要重启NetworkManager服务后,再重启网卡,修改才能生效。
# 修改配置文件
sudo vim /etc/NetworkManager/system-connections/[网卡NAME]
# 重启NetworkManager服务
sudo service network-manager restart
# 重启网卡
sudo nmcli con down [NAME]|[UUID]
sudo nmcli con up [NAME]|[UUID]
/etc/network/interface
可以通过修改/etc/network/interface来配置网络,由于我们默认是通过NetworkManager修改网卡信息的,所以一开始interface文件中没有其他网卡的信息。
可以在文件后面添加需要修改的网卡信息。
# /etc/network/interface文件后添加
auto [网卡名称] #要设置的网卡设备名称,如 auto ens33
iface [网卡名称] inet static #设置静态IP;如果是使用自动IP用 dhcp
address xxx.xxx.xxx.xxx #IP地址
netmask xxx.xxx.xxx.xxx #子网掩码
gateway xxx.xxx.xxx.xxx #网关
# 修改完成后,重启网络服务
service networking restart
经过测试,有时候重启服务和重启网卡并不能生效 ,需要系统重启后生效,同时这个时候系统设置中的NetworkManager 就不太正常了。
这种方法不能一起修改DNS,需要修改另外一个配置文件/etc/resolv.conf
,具体详见这个博客ubuntu修改ip。但是我的ubuntu18.04的虚拟机中已经没有resolvconf这个服务了。具体见这个博客Ubuntu 手动配置DNS。
目前还不太会通过/etc/resolv.conf
修改DNS,不建议使用这种方法修改DNS。
ifconfig临时修改IP
# 需要sudo权限
# 临时修改ip
ifconfig [网卡设备名称] [ip地址] netmask [子网掩码]
# ifcogfin ens33 192.168.16.139 netmask 255.255.255.0
# 启用\关闭网卡
ifconfig [网卡名称] up
ifconfig [网卡名称] down
设置网关使用其他的命令
# 设置网关,未测试
sudo route add default gw 192.168.2.254
设置DNS详见3。
总结
- NetworkManager: NetworkManager是一个用于管理网络连接的守护进程。它在现代Linux发行版中广泛使用,并提供图形用户界面和命令行工具来管理网络设置。它可以动态管理网络配置,包括有线、无线和VPN连接等。Ubuntu系统是默认使用NetworkManager。
- /etc/netplan/: 这是Ubuntu 18.04及更高版本中使用的网络配置工具。Netplan允许您使用YAML格式定义网络配置,包括IP地址、网关、DNS等。Netplan会将配置转换为其他配置文件(如NetworkManager或systemd-networkd),从而应用新的网络设置。
- /etc/network/interfaces: 这是Debian和Ubuntu等一些Linux发行版中用于配置网络接口的文件。它定义了网络接口的基本设置,例如IP地址、网关和子网掩码等。
- ifconfig 命令通过调用系统调用以及与内核的交互来实时获取网络接口的信息。它获取到的信息是当前内核中网络接口的实时状态,而不是从配置文件中读取的静态配置信息。在Ubuntu中,使用ifconfig命令修改网卡的IP地址是临时的,不会修改任何配置文件。ifconfig命令用于动态地配置网络接口,所做的更改只会在下次系统重启时失效。
前两个都操作起来更方便。第三个修改DNS还不太会,如果单纯修改IP地址和网关还行。第四个是临时修改。
对于前三者的优先级,在配置了/etc/netplan
和/etc/network/interfaces
的时候,系统重启后,NetworkManager好像就直接挂掉了,IP和网关是由/etc/network/interfaces
设置决定,如果我再运行sudo netplan apply
,/etc/netplan
中的配置就会生效;但系统重启后还是由/etc/network/interfaces
决定。