最早的时候配置linux网络都是从网上直接搜索“配置Ubuntu/CentOS网络”等,得到的答案也都是打开某个配置文件,怎么配置,怎么重启就OK了。但是从来没有想过这些配置文件到底是什么。随着工作经历的增长遇到越来越多的命令和名词,是时候梳理一下了。
首先我们要知道,内核不会读取任何配置文件去配置网卡(包括磁盘等),都是init进程启动的后续程序或脚本通过系统调用实现的。参考: How is the content of configuration files parsed on different Linux distributions?
使用命令行手动配置网络
涉及到两个软件包,net-tools 和 iproute2 (还有一个ethtool命令是用来配置网卡network interface controllers (NICs)的)
这些命令直接调用系统调用配置内核的网络参数。
net-tools软件包
它里边的命令还可以使用而且是我们最常用最熟悉的。但是这个软件包不更新了,有些过时了,建议使用iproute2软件包的命令。
arp(8), hostname(1), ifconfig(8), ipmaddr, iptunnel, mii-tool(8), nameif(8), netstat(8), plipconfig(8), rarp(8), route(8) and slattach(8)
iproute2软件包
ip, ss, bridge, rtacct, rtmon, tc, ctstat, lnstat, nstat, routef, routel, rtstat, tipc, arpd, devlink
管理网络的软件包
NetworkManager 和 systemd-networkd ,他们都是会自动配置网络(DHCP方式)管理网络,具体他们做什么尚未了解清楚(自动侦听网络变化,配置网络?)。另外DHCP也有专门的服务,如dhcpcd, dhclient。
管理解析的软件包
resolvconf 和 systemd-resolved, 他们都会管理/etc/resolv.conf 管理系统的域名解析服务
Linux上解析域名比较复杂,解析过程还会引用/etc/nsswitch.conf的配置,决定查找的优先级。
开机辅助配置网络的软件包
ifupdown 或 netplan
ifupdown软件包包含ifup和ifdown,旧系统的/etc/init.d/下的网络脚本负责读取配置文件然后调用ifup,ifdown来配置网络。
centos 的配置文件在/etc/sysconfig/network-scripts/ , ubuntu的配置文件/etc/network/interfaces。
Ubuntu 新版改使用netplan去管理网络了,配置文件在/etc/netplan/xxxx.yaml, 这些配置文件的格式都是不同的。
同时提一下cloud-init,它能够对系统进行自动化配置,一般用于云服务器的自动化配置,虚拟机管理器会挂载对应的配置文件进入虚拟机,cloud-init利用配置文件进行配置,其中也包括配置网络的部分。