现在很多系统管理员仍在使用 ifconfig、route、arp 和 netstat 等命令行工具,来管理和排查各种网络配置。这套工具也就是 net-tools 包,源于 BSD TCP/IP 工具箱,但是自 2001 年以后基本就停滞不前。
iproute 作为一套新的网络配置工具,旨在替换原有的 net-tools 工具包,这里大概介绍下两者的区别。
简介
网路配置实际上有上述介绍两套方案,都可以完成网络的配置、查看,不过较新的发行版本实际上已经只支持 iproute
这个包了,其中 net-tools
主要通过 procfs
和 ioctl
系统调用访问和更改内核网络配置,而 iproute
则通过网络链路套接字接口与内核进行联系,相比来说后者的效率要更高一些。
除了性能只外 iproute
的用户界面比 net-tools
要来得直观,而且有很多 net-tools
所不支持的功能。
iproute2 | net-tools | 备注 |
---|---|---|
ip addr show [eth0] | ifconfig [-a|eth0] | 查看所有或者某个网卡 |
主机名修改
主机名是 Linux 系统下的一个内核参数,可以通过 /proc/sys/kernel/hostname
访问该参数当前值,一般是在系统启动时通过初始化脚本设置的。当然,这也就导致不同的发行版本,甚至不同的版本,其设置方式也各有区别。
常见的一些操作可以通过如下方式查看。
----- 查看(三者值相同)
$ hostname ← 查看主机名
$ hostname -i ← 查看主机的IP
$ cat /proc/sys/kernel/hostname
$ sysctl kernel.hostname
----- 临时修改(重启后会失效),立即生效
$ echo foobar > /proc/sys/kernel/hostname
$ sysctl kernel.hostname=foobar
$ hostname foobar
$ export HOSTNAME=foobar ← 解决bash的PS显示问题
----- 永久修改 (需要重启网络)
$ cat /etc/sysconfig/network ← CentOS/RedHat
NETWORKING=yes
HOSTNAME=foobar.localdomain
$ cat /etc/hostname ← Debian/Ubuntu
foobar
----- 重启网络
$ /etc/init.d/network restart
其中,有几点需要注意的:
- 在 CentOS 中,如果在上述的配置文件中没有配置,实际也会读取
/etc/hostname
文件。查看man hostname
帮助时,也需要同时设置/etc/hostname
。 - 通过
strace
命令查看系统调用时,实际是调用的uname()
这个内核 API 。
以 CentOS 为例,在系统启动时,会执行 /etc/rc.d/init.d/network
脚本,该脚本会根据不同的配置文件尝试获取 hostname 。
另外,一个比较容易混淆的文件是 /etc/hosts
,该文件实际上就只提供了一个本地设置的 DNS 映射关系,只是有些启动脚本会通过该文件读取 hostname,这也就导致会认为 hostname 的修改是通过该文件配置的。
当然,最好也设置好该文件内容。
$ cat /etc/hosts
127.0.0.1 foobar localhost
DNS 配置
当前的网络通过 NetworkManager
管理,默认会通过 DHCP 客户端动态获取 DNS 信息,也可以修改 /etc/sysconfig/network-scripts/ifcfg-eth0
方式指定,例如。
DNS1=8.8.8.8
DNS2=6.6.6.6
配置修改完可以通过 systemctl restart NetworkManager
重启即可,可以通过命令行修改。
----- 查看当前网络连接
# nmcli connection show
----- 修改当前网络对应的DNS服务器,网络连接可以用名称或者UUID来标识
# nmcli connection modify "System ens192" ipv4.dns "114.114.114.114 8.8.8.8"
另外,当 PEERDNS
设置为 yes
时会通过 DHCP 动态获取 DNS 地址,设置为 no
时则允许其它方式配置。
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
PEERDNS=no
使用传统方式 #
可以先修改如下配置。
# vim /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
一般还需要通过 plugins=ifcfg-rh
修改配置,重启之后可以直接修改 /etc/resolv.conf
文件,内容如下。
nameserver 114.114.114.114
nameserver 8.8.8.8
systemd-resolve
很多较新的发行版本使用该命令。
----- 查看状态、统计数据
$ systemd-resolve --status
$ systemd-resolve --statistics
----- 解析某个域名
$ systemd-resolve baidu.com