Linux网络篇-网络配置管理


前言

网络服务是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...]
  1. 激活连接
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)。

  1. 停用连接
 nmcli connection down [ id | uuid | path | apath ] ID... #注意这里的ID可指定多个

该命令用于停用指定的活动连接,但是该连接处于活动状态的设备仍可以连接,并且将通过查找设置了“自动连接”标志的合适连接来执行自动激活。
ps:停用的连接配置文件在内部被阻止再次自动连接。 因此,它不会自动连接,直到重新启动或直到用户执行取消自动连接的操作为止,例如修改配置文件或显式激活它。
该连接由其名称,UUID或D-Bus路径标识。 如果ID不明确,则可以使用关键字id,uuid,path或apath。

  1. 修改连接
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–临时配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值