文章目录
前言
网络服务是Linux系统学习中非常重要的一环,从职业角度来看,运维发生的很多网络故障都是配置和服务相关的问题,学好网络服务有助于解决你在工作中遇到了一半以上网络故障,剩下一般大多都是硬件或者网络本身的问题了。
提示:以下是本篇文章正文内容,下面案例可供参考
一、认识linux系统中的网络服务
1.NetworkManager网络服务
首先我们要知道,在Linux7及以上版本,包括其他一些Linux发行版本中,都使用NetworkManager服务作为网络服务,学习好NetworkManager服务足够应付大多数场景的网络配置,其他服务,像network服务有兴趣可以自己学习。
在 Red Hat Enterprise Linux 7 中,默认网络服务由 NetworkManager 提供,它是一个动态网络控制和配置守护进程,在网络设备和连接可用时保持启动和激活。传统的 ifcfg 类型配置文件仍受支持。
使用 NetworkManager 的主要优点是:
- 更轻松地进行网络配置: NetworkManager 确保网络连接正常工作。当发现系统中没有网络配置但存在网络设备时,NetworkManager 会创建临时连接以提供连接。
- 提供与用户的简单连接设置:NetworkManager 通过不同的工具(GUI、nmtui、nmcli )提供管理。
- 支持配置灵活性。例如:配置 WiFi 接口,NetworkManager 会扫描并显示可用的 wifi 网络。您可以选择一个接口,NetworkManager 会显示在重启过程后提供自动连接所需的凭证。
- NetworkManager 可以配置网络别名、IP 地址、静态路由、DNS 信息和 VPN 连接,以及许多特定于连接的参数。您可以修改配置选项以反应您的需要。
- 通过 D-Bus 提供 API,允许应用程序查询和控制网络配置和状态。这样,应用程序可以通过 D-BUS 检查或配置网络。例如,通过 Web 浏览器监控和配置服务器的 Web 控制台界面使用 NetworkManager D-BUS 接口来配置网络。
- 重启过程后保持设备状态,并接管在重启过程中将其设定为受管模式的接口。
处理没有被显式设置但由用户或者其他网络设备手动控制的设备。
2.NetworkManager服务管理
对服务来说,管理就是启动,停止等服务状态的设置,主要有以下几个命令:
- 启动服务
systemctl start NetworkManager
- 关闭服务
systemctl stop NetworkManager
- 查看服务状态
systemctl status NetworkManager
- 设置服务开机自启动
systemctl enable NetworkManager #下次开机生效
systemctl enable NetworkManager --now #立即生效
- 关闭服务开机自启动
systmctl disable NetworkManager
二、网络服务配置文件
在Linux世界中,一切皆文件的思想贯穿始终,不管是使用什么样的方式去修改配置,最终都是在写入配置文件,这个过程就好比“乌鸦喝水”,两只乌鸦喝水的方式不一样,目的都是为了喝水。
1. 网络接口配置文件
一个非常重要的文件(centos7为例):/etc/sysconfig/network-scripts/ifcfg-网络设备名
- cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet # 网络类型。Ethernet 、IPsec 等类型,默认类型为 Ethernet (以太网)
PROXY_METHOD=none #代理模式
BROWSER_ONLY=no ## 只是浏览器:否
HWADDR=00:0C:29:13:5D:74 # 网卡 MAC 地址
BOOTPROTO=dhcp # 网卡获得 ip 地址的方式 {static | dhcp | none | bootp}
DEFROUTE=yes # 是否使用默认路由 {yes | no}
IPV4_FAILURE_FATAL=no # 是否开启 IPV4 致命错误检测 {yes | no}
IPV6INIT=yes # IPV6 是否自动初始化 {yes | no}
IPV6_AUTOCONF=yes # IPV6 是否自动配置 {yes | no}
IPV6_DEFROUTE=yes # IPV6 是否使用默认路由 {yes | no}
IPV6_FAILURE_FATAL=no # 是否开启 IPV6 致命错误检测 {yes | no}
IPV6_ADDR_GEN_MODE=stable-privacy ##IPV6地址生成模型
DEVICE=eth33 # 网络接口物理设备名称
NAME=ens33
UUID=b7f184cb-8c09-40e7-8279-c62a3318c8f6 # 网络接口的唯一设备 ID
ONBOOT=yes # 系统启动时是否激活网络接口 {yes | no}
需要注意的是,修改了配置文件之后,网络服务可能会有读取不到配置文件的情况,导致配置文件修改之后配置未生效,这时候就需要手动加载配置:
以 root 用户身份输入 以重新载入所有连接配置集:
~]# nmcli connection reload
或者,只重新载入一个更改的文件 ,ifcfg-ifname :
~]# nmcli con load /etc/sysconfig/network-scripts/ifcfg-ifname
2.路由配置文件
在Linux系统中,路由的配置文件一般位于/etc文件中,一般会在/etc/sysconfig/network-scripts/route-网络接口名
添加格式一:
目标网络 via 下一跳地址
添加格式二:
第一条路由表示如下:
ADDRESS0=
NETMASK0=
GATEWAY0=
第二条路由表示如下:
ADDRESS1=
NETMASK1=
GATEWAY1=
在CentOS/RHEL中,添加静态路由命令可以写入对应的路由配置文件,例如:
$ echo ‘192.168.2.0/24 via 192.168.1.254 dev eth0’ >> /etc/sysconfig/network-scripts/route-ens33
添加完成后,重启网络服务或重启系统即可使配置生效
三、nmtui命令
对于没有习惯纯命令使用Linux的入门朋友们来说,nmtui的文本界面十分友好,但是在大多数场景下, 我们更多使用的是命令行的方式来配置。
nmtui提供基于光标的文本用户界面(TUI), nmtui可以提供一个文本界面来与NetworkManager交互用于配置网络。该工具包含在NetworkManager-tui子软件包中。
使用方法:直接在shell中输入nmtui
通过nmtui提供的GUI界面,可以编辑连接,启动连接,设置主机名
可以使用箭头键或按 Tab 键向前选择选项,按 Shift+Tab 组合键返回。按 Enter 选择一个选项。按 Space 键选择复选框状态。
编辑连接:
我在这里的网络接口名是ens33,我设置为自动连接,所以没有手动配置,完事保存退出即可
nmtui
命令的详细用法,参考RedHat官网资料-使用 nmtui 配置 IP 网络
ps:红帽官方文档十分详细,不弱于任何大佬出版的书籍,只是资料较多,不好查找,也很少有博主去推荐过红帽官网的资料去做学习,唯一需要注意的是,这部分资料数据机翻,有些地方语序很怪异,稍加注意,如果英文水平足够,我推荐直接读英文原文
四、nmcli
nmcli 是软件 NetworkManager 的提供的命令。使用 nmcli 命令时,必须确保 NetworkManager 为运行状态(nm 代表 NetworkManager,cli 代表 Command-Line)
nmcli命令RedHat官方参考文档:RedHat官网资料-使用 nmcli 配置 IP 网络
语法格式
nmcli [OPTIONS...] { help | general | networking | radio | connection | device | agent | monitor } [COMMAND] [ARGUMENTS...]
上面的语法就是: nmcli [选项...] 对象 [命令] [参数...]
对象 = help | general | networking | radio | connection | device | agent | monitor
提示:
1-输入命令的时候请善用tab补全,少打很多单词!
2-支持简写,例如connection可以简写成con或c, modify可以简写成mod或m
常见参数:
-a | --ask 提示输入缺少的参数,而不是报错。例如连接wifi的时候,没有提供password参数,那么如果有-a选项就会提示输入密码
-p | --pretty 显示的时候会更加易于人类阅读,尤其是多行显示的时候,可以分块显示
-m | --mode { tabular | multiline } tabular显示的时候是表格式(有表头)的,不易阅,multiline是多行类似key:value形式。如果省略,大多数命令默认使用tabular。 nmcli connection show ID和nmcli device show这两命令因为结构化信息不好单行显示,如果省略,默认使用multiline
-f | --fields { field1,field2... | all | common } 默认使用common(命令公共字段)。也可以指定特定字段,比如nmcli -f GENERAL.DEVICE,IP4.ADDRESS device show 显示网卡名和ip地址(善用tab补全)。查看可用字段的方法:1-通过对应对象的show来找到字段.对于connection对象,可以使用man 5 nm-settings查看, 或者输入错误字段,让报错来提示可字段,比如输入nmcli -f xxx connection show myAP 就会报错,提示可用字段
general对象(常规信息)
常规信息,例如:显示NetworkManager
服务的状态和操作权限,获取和修改系统主机名,NetworkManager的日志级别和域
语法
nmcli general { status | hostname | permissions | logging } [ARGUMENTS...]
networking对象(整个网络)
常用于查询NetworkManager服务的状态,启用/禁用
网络
语法:
nmcli networking { on | off | connectivity } [ARGUMENTS...]
命令示例
nmcli networking off #禁用所有被NetworkManager托管的网络接口的网络连接
nmcli networking connectivity check # 参数check表示重新检查连接状态。连接状态full表示具有完全的internet访问能力,limited表示连接到一个网络,但是internet未接入
radio对象(无线开关)
显示无线网络开关状态,启用、禁用无线网络
nmcli radio { all | wifi | wwan } [ARGUMENTS...]
常见用法:
nmcli radio wifi # 打印wifi开关状态
nmcli radio wifi off # 表示关闭wifi
connection对象(连接的配置)
NetworkManager会把网络配置保存为connections配置信息,比如保存二层网络信息,ip信息等。NetworkManger会根据这些信息知道怎么去连接一个网络。在一个特定设备,可以有多个连接配置(比如一个是dhcp的,一个是静态ip地址的),但是只有一个配置是“活动“的配置。connection对象就是用来管理这些连接配置的。
nmcli connection { show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export } [ARGUMENTS...]
- 激活连接
nmcli connection up [ id | uuid | path ] ID [ifname ifname] [ap BSSID] [passwd-file file]
一个连接由其name(名称),uuid或path(就是D-Bus路径)所标识。如果ID不明确,则可以使用关键字id,uuid或path来指明这个ID是什么。当需要特定设备激活连接时,应提供带有接口名称的ifname选项。
如果未提供ID,则需要一个ifname,NetworkManager将为给定的ifname激活最佳的可用连接。如果是VPN连接,则ifname选项指定基本连接的设备。
ap选项指定在Wi-Fi连接的情况下应使用哪个特定的AP。
passwd-file:某些网络在激活期间可能需要凭据。您可以使用此选项提供这些凭据。文件的每一行应包含一个密码。文件内容格式为setting_name.property_name:the password。例如WPA-PSK连接的格式为802-11-wireless-security.psk:secret12345。nmcli还接受wifi-sec和wifi字符串,而不是802-11-wireless-security。当NetworkManager需要密码但未提供密码时,nmcli在使用–ask运行时会要求输入密码。如果未传递–ask,则NetworkManager可以询问可能正在运行的另一个秘密代理(通常是GUI秘密代理,例如nm-applet或gnome-shell)。
- 停用连接
nmcli connection down [ id | uuid | path | apath ] ID... #注意这里的ID可指定多个
该命令用于停用指定的活动连接,但是该连接处于活动状态的设备仍可以连接,并且将通过查找设置了“自动连接”标志的合适连接来执行自动激活。
ps:停用的连接配置文件在内部被阻止再次自动连接。 因此,它不会自动连接,直到重新启动或直到用户执行取消自动连接的操作为止,例如修改配置文件或显式激活它。
该连接由其名称,UUID或D-Bus路径标识。 如果ID不明确,则可以使用关键字id,uuid,path或apath。
- 修改连接
modify [--temporary] [ id | uuid | path ] ID { option value | [+|-]setting.property value } ...
在连接配置文件中添加,修改或删除属性。
要设置属性,只需指定属性名称后跟值即可。空值(“”)将属性值重置为默认值。除了属性外,您还可以对某些属性使用简称。如果要将项目或标志附加到现有值,请使用+前缀作为属性名称或别名。
如果要从容器类型或标志属性中删除项目,请使用-前缀。对于某些属性,您还可以通过指定从零开始的索引来删除元素。 +和-修饰符仅对支持它们的属性有效。例如,这些是多值(容器)属性或标志,例如ipv4.dns,ip4,ipv4.addresses,bond.options,802-1x.phase1-auth-flag等。
如果设置和属性是唯一的,则可以缩写。该连接由其名称,UUID或D-Bus路径标识。如果ID不明确,则可以使用关键字id,uuid或path。
常见用法:
nmcli connection show # 列出网络连接的配置(存放于内存和硬盘的配置,nmcli -f active connection show 表示显示存储于内存配置, -f profile表示存放于硬盘的配置)
nmcli connection show --active # 仅列出处于活动状态的网络配置
nmcli --show-secrets -f 802-11-wireless-security.psk connection show myAP001 # 显示myAP001密码,加了--show-secrets或-s才能显示密码明文
nmcli connection show --order name # 按配置名排序,可选排序有type、active、name、path(d-bus路径),+号和-号表示升序和降序,未指定,则默认使用升序。默认排序是:--order active:name:path
nmcli connection show uuid 38781e62-4bab-4ba8-a086-bfaece222794 # 按指定关键字显示,关键字有id,uuid、path、apath。 用途是不能使用常规的nmcli connection show <配置名> 来显示的时候,这种显示方法就可以派上用场了。
nmcli connection up prof1 # 激活一个连接。
nmcli connection down prof1 # 停用一个连接
nmcli connection delete prof1 #删除一个配置, delete [ id | uuid | path ] ID...
nmcli connection add type ethernet ifname enp5s0 # 创建一个连接。这里没有指定method,则默认使用auto,也就是自动配置。类型是以太网,类型有以太网、wifi,adsl等,具体参考文章头部给的url
nmcli connection add ifname enp5s0 autoconnect yes type ethernet ip4 10.1.1.1/8 gw4 10.1.0.1 # 创建一个静态ip的以太网连接
nmcli connection modify myEth +ipv4.dns 8.8.8.8 # 给myEth的配置添加dns
nmcli connection modify myEth ipv4.method manual ipv4.addresses "192.168.43.64/24,10.0.0.23/8" #修改myEth连接为手动,ip地址设置为两个
nmcli con mod myEth autoconnect no # 设置myEth连接配置为不自动连接(重启操作系统或从起NetworkManager就能看到不会自动连接了)
device对象(网络接口)
显示或管理网络接口
nmcli device { status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp } [ARGUMENTS...]
子命令详细解释(理解了上面connection,这里也是差不多的):
set [ifname] ifname [ autoconnect { yes | no } ] [ managed { yes | no } ]
设置设备属性。连接设备。NetworkManager 将尝试找到将被激活的合适连接。它还将考虑未设置为 auto connect 的连接。如果不存在兼容的连接,则将创建并激活一个具有默认设置的新配置文件。如果没有指定—— wait 选项,则默认超时时间为90秒。
reapply ifname
尝试使用自上次应用以来对当前活动连接所做的更改来更新设备。
modify ifname { option value | [+|-]setting.property value } …
修改设备上当前活动的设置。
此命令允许您对特定设备上的活动配置执行临时更改。连接配置文件中不保留更改。有关可用属性的列表,请参见 nm 设置(5)。请注意,有些属性不能在已连接的设备上更改。还可以使用“属性别名”部分中描述的别名。语法与 nmcli 连接修改命令相同。
disconnect ifname…
断开设备连接,并防止设备自动激活。 断开软设备的连接可能会让这些设备消失
如果未指定–wait 选项,则默认超时将为10秒。
delete ifname…
删除一个设备。该命令从系统中删除接口。请注意,这只适用于软件设备,如bonds, bridges, teams, etc等(仅能删除软设备,例如bond,briges等)。命令不能删除硬件设备(如以太网)。
wifi [ list [–rescan | auto | no | yes ] [ifname ifname] [bssid BSSID] ]
列出wifi热点,可以指定无线网卡接口名和热点BSSID。列出的热点列表不会超过30秒,必要时会重新扫描(通过–rescan控制重新扫描:取值auto yes no)
wifi connect (B)SSID [password password] [ifname ifname] [bssid BSSID] [name name] [ private { yes | no } ] [ hidden { yes | no } ]
连接到由SSID或BSSID指定的wifi网络。该命令找到匹配的连接或创建一个连接,然后在设备上激活它。如果已经存在配置文件,可以直接使用nmcli connection up <配置文件名>。private表示该连接是否对其他用户可见。hidden用于连接隐藏ssid的wifi。
wifi hotspot [ifname IFNAME] [con-name NAME] [ssid SSID] [ band { a | bg } ] [channel channel] [password password]
创建一个热点,con-name是配置名。
wifi rescan [ifname IFNAME] [ssid SSID…]
重新扫描wifi接入点,可以指定多个SSID。对于隐藏ssid的网络,务必要指定ssid。命令不显示接入点列表。显示接入点列表请使用nmcli device wifi list命令
常见用法:
nmcli dev wifi list # 列出可用的wifi接入点, list可以省略
nmcli device wifi connect mySSID password '12345678' # 连接热点mySSID, 连接成功后,就会自动生成配置文件,以后要再连接,可以使用nmcli connectio up mySSID命令了
nmcli device wifi hotspot con-name ap001 ifname wlp3s0 ssid myAP001 password 12345678 # 创建热点。以后如果要使用,可以直接nmcli connection up ap001
常用属性缩写
con-name = connection.id
autoconnect = connection.autoconnect
ifname = connection.interface-name
mtu = 不同类型下的.mtu属性
ssid = wireless.ssid
mode = wireless.mode(网卡为wifi时)
ip4 = 作用于ipv4.addresses(并且设置ipv4.method为manual) ,同理可知ip6
gw4 = ipv4.gateway(同理可知gw6)
五、ip(临时配置网络)
作为系统管理员,您可以使用 ip
命令配置网络接口,但更改在重新引导后不会保留;重新引导后,您将丢失任何更改。
在上游软件包名称后,ip
实用程序的命令有时被称为 iproute2,它们记录在 man ip(8) 页面中。Red Hat Enterprise Linux 7 中的软件包名称为 iproute。如果需要,您可以通过检查其版本号来检查是否安装了 ip 工具程序,如下所示:
~]$ ip -V
ip utility, iproute2-ss130716
ip 命令可用于添加地址和路由到 NetworkManager 并行的接口,并在 nmcli、nmtui、control-center 和 D-Bus API 中识别它们。
关闭接口:
ip link set ifname down
注意
ip link set ifname 命令设置 IFF_UP 状态的网络接口,并从内核的范围中启用它。这与用于 initscripts 或 NetworkManager 设备的激活状态的 ifup ifname 命令不同。事实上,NetworkManager 始终会设置接口,即使它当前已断开连接。通过 nmcli 工具断开连接设备,不会删除 IFF_UP 标志。这样,NetworkManager 获取有关载波状态的通知。
请注意,ip 工具替换 ifconfig 工具,因为 net-tools 软件包(提供 ifconfig)不支持 InfiniBand 地址。
有关可用 OBJECT 的信息,请使用 ip help 命令。例如: ip link help 和 ip addr help。
注意
命令行中给定的 IP 命令在系统重启后不会保留。如果需要持久性时,请使用配置文件(ifcfg 文件)或向脚本添加命令。
nmtui 和 nmcli 示例后包含了为每项任务使用命令行和配置文件的示例,但解释了将其中一个图形用户界面用于 NetworkManager 之前,即 control-center 和 nm-connection-editor。
ip 工具可以用来为接口分配 IP 地址,格式如下:
ip addr [ add | del ] address dev ifname
使用 ip 命令分配静态地址
要为接口分配 IP 地址,请执行以下操作:
~]# ip address add 10.0.0.3/24 dev enp1s0
You can view the address assignment of a specific device:
~]# ip addr show dev enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether f0:de:f1:7b:6e:5f brd ff:ff:ff:ff:ff:ff
inet 10.0.0.3/24 brd 10.0.0.255 scope global global enp1s0
valid_lft 58682sec preferred_lft 58682sec
inet6 fe80::f2de:f1ff:fe7b:6e5f/64 scope link
valid_lft forever preferred_lft forever
使用 ip 命令配置多个地址
由于 ip 实用程序支持将多个地址分配到同一接口,因此不再需要使用别名接口方法将多个地址绑定到同一接口。分配地址的 ip 命令可以重复多次,以便能分配多个地址。例如:
~]# ip address add 192.168.2.223/24 dev enp1s0
~]# ip address add 192.168.4.223/24 dev enp1s0
~]# ip addr
3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:fb:77:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.2.223/24 scope global enp1s0
inet 192.168.4.223/24 scope global enp1s0
总结
更加详细的用法和示例,使用man命令在Linux命令行中查看即可,对于man命令,我只能说是尘封的宝藏,芝麻开门只是一句口令,但是使用man命令,可以为你打开一个全新的Linux世界。
nmtui–图形化
nmcli–命令行
ip–临时配置