网络基础与静态 IP 配置(Ubuntu & CentOS)
为什么需要静态 IP?
- NFS 的访问控制(
/etc/exports)和客户端挂载(/etc/fstab)都依赖 IP/主机名。 - DHCP 分配的地址重启后会变,一变所有挂载全部失效。
- 生产环境中存储服务器 IP 还会被写进 DNS、监控、备份白名单,从来都是静态。
0. 前置检查:先看环境再动手
先查网卡名和网关(两个系统通用):
ip addr # 当前 IP 和网卡名(如 ens33)
ip route | grep default # 默认网关(本次实验为 192.168.232.2)
然后分别用各自的方式查看 IP 是动态还是静态:
Ubuntu:查看 netplan 配置
ls /etc/netplan/ # netplan 配置文件(本次为 50-cloud-init.yaml)
cat /etc/netplan/50-cloud-init.yaml
dhcp4: true 就表示现在是动态 IP,由 DHCP 自动分配。
CentOS:查看 ifcfg 配置
cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="dhcp" 表示 IP 由路由动态分配,但我们要改成静态分配。
一、Ubuntu 静态 IP 配置
1. 禁用 cloud-init 网络接管
50-cloud-init.yaml 是 cloud-init 自动生成的,直接改的话重启后会被还原。先关掉 cloud-init 的网络配置:
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
在配置文件里加上一句:
network: {config: disabled}
2. 备份原配置
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
.bak 结尾不会被 netplan 加载,放在同目录安全。
3. 写入静态 IP 配置
sudo vim /etc/netplan/50-cloud-init.yaml
修改成下面这段:
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.232.131/24 # 192.168.232 是"网络位"(小区名),由网络环境决定,不能凭空改;131(门牌号)可以变
routes:
- to: default
via: 192.168.232.2 # 下一跳网关(保安亭),必须和 IP 同网段,跟 ip route | grep default 查到的一致
nameservers:
addresses: [192.168.232.2, 114.114.114.114] # DNS 服务器地址
4. 应用配置
sudo netplan apply
如果出现 WARNING:root:Cannot call Open vSwitch,忽略即可,只是提示系统没装 OVS,不影响配置。
5. 验证
ip addr show ens33
ping -c 3 192.168.232.2 # 网关
ping -c 3 baidu.com # 外网
预期:ens33 显示 inet 192.168.232.131/24 且没有 dynamic 字样。
⚠️
netplan apply后 Xshell 会断线(IP 变了),用新 IP 重新连接即可。
二、CentOS 静态 IP 配置(异曲同工)
1. 配置文件位置不同
CentOS 的网卡配置文件在 /etc/sysconfig/network-scripts/ifcfg-ens33:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="dhcp" 表示 IP 由路由动态分配,但我们要改成静态分配。
2. 备份配置文件
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33_bak_0818
3. 修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改文件内容如下:
DEVICE=ens33
BOOTPROTO=static # 由动态改为静态分配
ONBOOT=yes # 开机时是否自动启用这块网卡
IPADDR=192.168.232.131 # 静态 IP
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.232.2 # 网关
4. DNS 配置
和 Ubuntu 不同的是,CentOS 的 DNS 配置在另一个文件 /etc/resolv.conf:
vim /etc/resolv.conf
加入:
nameserver 8.8.8.8 # 谷歌 DNS
⚠️ 小提示:
/etc/resolv.conf在重启网络时可能被覆盖,更推荐的做法是在ifcfg-ens33里加一行DNS1=192.168.232.2,这样才永久生效。
5. 重启网络生效
systemctl restart network
ip addr
ping www.baidu.com
看看网络是否正常。
三、网络配置理解:虚拟机访问 www.baidu.com 的完整流程
场景:你住 192.168.232.131 这一户,想点一份"百度"外卖。
第一步:查地址(DNS 解析)
你不知道百度的详细地址,于是打开外卖平台搜索框(DNS),输入 www.baidu.com。系统看 /etc/resolv.conf,知道该问哪个平台(192.168.232.2 或 8.8.8.8),问完得到结果:
www.baidu.com → 103.235.46.102
第二步:看是不是同小区(子网掩码判断)
拿到地址后,先拿子网掩码 255.255.255.0 算一下:
你的地址:192.168.232.131 → 网络位是 192.168.232(小区:192.168.232)
百度地址:103.235.46.102 → 网络位是 103.235.46(小区:103.235.46)
不是同一个小区!不同小区不能直接送,必须出小区。
如果目标和你同小区,比如
192.168.232.1,就直接送,不需要经过保安亭——这也是为什么 ping 同网段不需要网关。
第三步:交给保安亭(网关)
既然要出小区,数据包就交给保安亭 192.168.232.2。你的电脑查路由表,发现默认路由 default via 192.168.232.2,于是把所有"寄往外地的快递"统一交给它。
第四步:保安亭接力转送(路由)
保安亭(VMware NAT 网关)把快递转出去,经过 VMnet8 → Windows → 你的路由器 → 运营商,一路上的每一个"保安亭"(路由器)都只干一件事:看快递上写的目的地,把它送到下一站。最终到达百度服务器 103.235.46.102。
第五步:百度回包
百度收到请求,把回复按原路寄回来:还是经过那一串保安亭,最后从 192.168.232.2 送进小区,交到你手上 192.168.232.131。
第六步:你看到结果
浏览器显示网页,或者 ping 打出 64 bytes from 103.235.46.102。
四、Ubuntu 与 CentOS 配置对比
| 对比项 | Ubuntu | CentOS |
|---|---|---|
| 配置文件 | /etc/netplan/*.yaml | /etc/sysconfig/network-scripts/ifcfg-ens33 |
| 动态/静态开关 | dhcp4: true / false | BOOTPROTO="dhcp" / static |
| 掩码写法 | /24(CIDR 写法) | NETMASK=255.255.255.0 |
| 网关写法 | routes: to: default, via: ... | GATEWAY=... |
| DNS 配置 | nameservers.addresses | /etc/resolv.conf 或 DNS1=... |
| 生效命令 | sudo netplan apply | systemctl restart network |
| 是否会被覆盖 | cloud-init 会还原,需先禁用 | 一般不会 |
小结
- 配置前先跑
ip addr和ip route | grep default,看清自己住在哪个小区、保安亭在哪。 - 格式跟规则走:
dhcp4、addresses、routes、nameservers这些字段是 netplan 规定死的;BOOTPROTO、IPADDR、GATEWAY是 CentOS 的规矩。 - 数值跟环境走:IP、网关、DNS 由网络环境决定,不能照抄。