说实话,配网络这事儿真没你想的那么玄乎
好多刚接触Linux的兄弟,一碰到网络配置就头皮发麻。网卡起不来、IP配不对、DNS解析不了,折腾半天连个ping都出不去。你想想,明明Windows点两下鼠标就搞定的事,咋到Linux就变成写配置文件了?
别急,今天老司机带你把几个主流发行版的网络配置摸个透。Ubuntu用netplan、CentOS靠NetworkManager、Arch玩systemd-networkd、Alpine用ifupdown,各有各的脾气。搞懂套路之后,你会发现其实也就那么回事儿。
先把话撂这儿:配网络不是背命令,是理解逻辑。底层都是那几样东西,只不过不同发行版穿了不同的马甲。下面咱们一个一个拆开来揉碎了讲。
1. Ubuntu/Debian:netplan 配置(YAML格式)
从Ubuntu 18.04开始,Canonical彻底把网络配置交到了netplan手里。说白了,netplan就是个配置文件翻译器,你写YAML,它帮你生成后端的配置,后端一般是systemd-networkd或者NetworkManager。
配置文件位置在/etc/netplan/目录下,文件名通常是01-netcfg.yaml或者50-cloud-init.yaml。名字不重要,扩展名必须是.yaml。
静态IP配置示例:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
这里头有几个坑你得注意。第一,YAML格式对缩进极度敏感,必须用空格,不能用Tab,缩进层级搞错了直接报错。第二,dhcp4: no得显式声明,不然系统可能默认给你开DHCP。第三,routes是新版写法,老教程里写的gateway4已经被标记为废弃,虽然目前还能用,但迟早得改。
写完配置文件别急着重启网络,先用sudo netplan try测试一下。这个命令有个好处,配置如果导致网络断了,它会自动回滚。确认没问题再sudo netplan apply生效。
你要是嫌每次写配置麻烦,可以直接用DHCP,三行搞定:
network:
version: 2
ethernets:
enp0s3:
dhcp4: yes
Debian系基本就这套路,Ubuntu和Debian在netplan这块儿没啥区别,照着抄就行。
2. CentOS/RHEL:NetworkManager + nmcli 命令
CentOS和红帽系走的是另一条路。从CentOS 7开始,NetworkManager成了网络管理的绝对主力,配合nmcli命令行工具,你基本不用碰配置文件就能完成所有操作。
说实话,刚开始用nmcli可能会觉得命令又长又啰嗦,但用熟了你会发现它比改配置文件安全多了。至少不会因为少敲一个空格就把网络搞瘫痪。
查看当前网络状态:
$ nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33
lo loopback unmanaged --
配置静态IP:
$ nmcli con mod ens33 ipv4.addresses 10.0.0.50/24
$ nmcli con mod ens33 ipv4.gateway 10.0.0.1
$ nmcli con mod ens33 ipv4.dns 8.8.8.8
$ nmcli con mod ens33 ipv4.method manual
这四条命令分别设置IP地址、网关、DNS和IPv4获取方式。注意ipv4.method manual这句,它告诉NetworkManager别再搞DHCP了,改用手动配置。
改完记得重新加载配置并激活连接:
$ nmcli con reload
$ nmcli con up ens33
想看配置生效没,用这条:
$ nmcli device show ens33 | grep IP
IP4.ADDRESS[1]: 10.0.0.50/24
IP4.GATEWAY: 10.0.0.1
IP4.DNS[1]: 8.8.8.8
NetworkManager的配置文件实际存在/etc/NetworkManager/system-connections/目录下,不过有nmcli在,你基本不用去碰那些文件。
CentOS 8和RHEL 8还引入了nmstate这个声明式网络管理工具,思路跟netplan类似,不过nmcli依然是最稳的选择。
3. Arch Linux:systemd-networkd 配置
Arch用户都懂,KISS原则是信仰。网络配置也不例外,systemd-networkd就是systemd生态里的网络管理方案,轻量、直接、不搞花里胡哨的。
配置文件放在/etc/systemd/network/目录下,文件名格式是名字.network。配置文件会被按字典序读取,所以你可以用数字前缀控制优先级。
DHCP配置:
[Match]
Name=enp0s3
[Network]
DHCP=yes
[DHCP]
RouteMetric=100
这里头的[Match]段用来匹配网卡,[Network]段定义网络行为,[DHCP]段细化DHCP选项。结构清晰,一看就懂。
静态IP配置:
[Match]
Name=enp0s3
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=1.1.1.1
改完配置记得重启服务:
$ sudo systemctl restart systemd-networkd
别忘了解锁systemd-resolved来处理DNS解析:
$ sudo systemctl enable --now systemd-resolved
Arch的网配就是这么干脆利落,没有多余的东西,配置写对就完事。
4. Alpine Linux:ifupdown 配置
Alpine走的是极简路线,网络配置用的是经典的ifupdown方案,配置文件在/etc/network/interfaces。这玩意儿跟Debian老派用法基本一样,只是Alpine里用的是busybox的ifupdown实现。
DHCP配置:
auto eth0
iface eth0 inet dhcp
就两行,干净利索。auto声明开机自动拉起,iface定义接口类型和获取方式。
静态IP配置:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
DNS配置在Alpine里是单独的文件/etc/resolv.conf:
nameserver 8.8.8.8
nameserver 1.1.1.1
改完网络配置后执行/etc/init.d/networking restart或者直接重启network服务。Alpine的ifupdown简单归简单,但稳定性极高,很多嵌入式设备和路由器都靠这套方案撑着。
5. 通用调试命令:配完网络怎么验证?
配置文件写完了,服务也重启了,这时候别急着开香槟,先跑几条命令验验货。
ip addr:查看IP地址分配情况,确认网卡状态和IP对不对。
$ ip addr | grep inet
inet 192.168.1.100/24 scope global eth0
inet6 fe80::1/64 scope link
ip route:查看路由表,确认默认网关有没有正确写入。
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp
192.168.1.0/24 dev eth0 proto kernel scope link
ping:测试连通性,先ping网关再ping外网DNS。
$ ping -c 3 -W 2 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.3ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=11.8ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=12.1ms
ss:查看端口监听状态,确认服务有没有绑对地址。
$ ss -tulpn | grep :80
tcp LISTEN 0 128 0.0.0.0:80 users:nginx
resolvectl:检查DNS解析状态,systemd系发行版必备。
$ resolvectl status
Link 2 (eth0): DNS=8.8.8.8 1.1.1.1
Current DNS Server: 8.8.8.8
这几条命令跑一遍,网络通不通、路由对不对、DNS能不能解析,基本就门儿清了。
6. 常见故障排查:网络不通怎么办?
说实话,网络配完之后ping不通是常有的事。别慌,按下面这套流程走一遍,90%的问题都能定位。
第一步:查物理层
跑ip link show看网卡状态。如果显示DOWN,先ip link set eth0 up。如果是虚拟机,检查虚拟网卡有没有桥接正确。
第二步:查IP配置
ip addr看看IP地址有没有正确分配。DHCP模式下如果拿不到IP,可能是DHCP服务器挂了,也可能是网卡MAC被过滤了。
第三步:查路由
ip route里必须有default via xxx这条默认路由。没有的话,外网就别想了。
第四步:查DNS
能ping通IP但域名解析不了,问题在DNS。检查/etc/resolv.conf或者用resolvectl status看DNS服务器配对了没。有些发行版里resolv.conf是被NetworkManager或systemd-resolved自动管理的,手动改可能会被覆盖。
第五步:查防火墙
iptables或firewalld可能把流量拦了。临时关闭防火墙测试一下,如果关了就能通,那就是规则配得太死了。生产环境别直接关,按最小权限原则放行需要的端口。
第六步:查SELinux
CentOS/RHEL用户注意,SELinux有时候会拦截网络服务。getenforce查看状态,如果是Enforcing且你怀疑SELinux在搞鬼,可以临时设为Permissive:setenforce 0。当然,正式环境应该配置正确的SELinux策略,而不是关掉它。
按这个流程走下来,问题基本跑不掉。网络配置说难不难,说简单也不简单,关键是把底层逻辑理清楚。配置写错了改回来就行,别怕折腾,多配几次就熟了。
搞定了上面这些,不管拿到什么Linux发行版,你都能快速把网络跑起来。收藏这篇,下次配网络的时候翻出来照着做,省得到处翻文档。