Linux NetworkManager网络服务详解

一、网络配置文件

Linux 为 配 置 网 络 提 供 了 许 多 工 具 , 其 中 有 图 形 界 面 的 ( 如:NetworkManager)、也有伪图形界面(如:system-config-network)的。

虽然使用这些工具来配置网络会很方便,但是由于各个发行版本的 Linux 所提供的网络配置工具很可能完全不同,并且通过命令行界面的远程登录也无法使用这些图形界面的工具,所以我们并不打算使用工具来配置网络,而选择通过直接编辑相关文件来配置网络参数。在 Linux 系统中,网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作。

系统中重要的有关网络配置文件为:/etc/services、/etc/nsswitch.conf 、 /etc/xinetd.conf、 /etc/sysconfig/network、/etc/sysconfig/ networkscripts/ifcfg-ethN、/etc/host.conf 、/etc/hosts和/etc/resolv.conf等。

下面在这里逐一简要解释的这些文件。

1)/etc/services

/etc/services 作用 /etc/services文件保存了服务和端口的对应关系。但是通常服务的配置文件里会自行定义端口。那么两者间是什么关系呢?事实上,服务最终采用的方案仍然是自己的端口定义配置文件。但是/etc/services的存在有几个意义:

1、如果每一个服务都能够严格遵循该机制,在此文件里标注自己所使用的端口信息,则主机上各服务间对端口的使用,将会非常清晰明了,易于管理。

2、在该文件中定义的服务名,可以作为配置文件中的参数使用。
     例如:在配置路由策略时,使用"www"代替"80",即为调用了此文件中的条目“www  80”

3、且当有特殊情况,需要调整端口设置,只需要在/etc/services中修改www的定义,即可影响到服务。

例如:在文件中增加条目“privPort  55555”,在某个私有服务中多个配置文件里广泛应用,进行配置。

当有特殊需要,要将这些端口配置改为66666,则只需修改/etc/services文件中对应行即可。

基本上是个标准,但是不是强制的。推荐的做法是在/etc/services里面加入新端口的定义或是使用已有的端口的定义,然后在监听的时候使用从/etc/servies里面得到的端口定义。这样和其他程序有没有冲突,一目了然。而且一旦需要调整和重新分配端口的时候也容易。

比如db2监听的是db2cdb2inst1这个端口名称,至于具体这个端口是多少(通常是50000),是定义在/etc/services里的,而且可以自由调整,比如改成60000,那么下次启动db2的时候就是监听60000端口

1)作用

etc/services文件是记录网络服务名和它们对应使用的端口号及协议。

2)格式

文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。

服务名    "tab"    端口号/协议名    “tab” 别名:

kermit     1649/udp
l2tp             1701/tcp     l2f
l2tp             1701/udp     l2f
h323gatedisc     1718/tcp

2)/etc/nsswitch.conf

定义服务搜索顺序:

每行配置的格式如下: 

Info: method[[action]] [method[[action]]...] 

其中,info指定该行所描述的信息的类型,method为用来查找该信息的方法,action是对前面的method返回状态的响应。action要放在方括号里。

当需要提供nsswitch.conf文件所描述的信息的时候,系统将检查含有适当info字段的配置行。它按照从左向右的顺序开始执行配置行中指定的方法。在默认情况下,如果找到期望的信息,系统将停止搜索。如果没有指定action,那么当某个方法未能返回结果时,系统就会尝试下一个动作。有可能搜索结束都没有找到想要的信息。

1、信息(Info)

  Nsswitch.conf文件通常控制着用户(在passwd中)、口令(在shadow中)、主机IP和组信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多数信息(Info项)的类型。

automount:

自动挂载(/etc/auto.master和/etc/auto.misc)

bootparams:

无盘引导选项和其他引导选项(参见bootparam的手册页)

ethers:

MAC地址

group:

用户所在组(/etc/group),getgrent()函数使用该文件

hosts:

主机名和主机号(/etc/hosts),gethostbyname()以及类似的函数使用该文件

networks:

网络名及网络号(/etc/networks),getnetent()函数使用该文件

passwd:

用户口令(/etc/passwd),getpwent()函数使用该文件

protocols:

网络协议(/etc/protocols),getprotoent()函数使用该文件

publickey:

NIS+及NFS所使用的secure_rpc的公开密钥

rpc:

远程过程调用名及调用号(/etc/rpc),getrpcbyname()及类似函数使用该文件

services:

网络服务(/etc/services),getservent()函数使用该文件

shadow:

映射口令信息(/etc/shadow),getspnam()函数使用该文件

aiases:

邮件别名,sendmail()函数使用该文件

2、方法(method)

下面列出了nsswich.conf文件控制搜索信息类型的方法,对于每一种信息类型,都可以指定下面的一种或多种方法:

files:

搜索本地文件,如/etc/passwd和/etc/hosts

nis:

搜索NIS数据库,nis还有一个别名,即yp

dns:

查询DNS(只查询主机)

compat:

passwd、group和shadow文件中的±语法(参见本节后面的相关内容)

3、搜索顺序(从左至右)

两个或者更多方法所提供的信息可能会重叠。举例来说,files和nis可能都提供同一个用户的口令信息。如果出现信息重叠现象,就需要考虑将哪一种方法作为权威方法(优先考虑),并将该方法放在方法列表中靠左的位置上。

默认nsswitch.conf文件列出的方法并没有动作项,并假设没有信息重叠(正常情况)。在这种情况下,搜索顺序无关紧要:当一种方法失败之后,系统就会尝试下一种方法,只是时间上受到一点损失。如果在方法之间设置了动作,或者重叠的项的内容不同,那么搜索顺序就变得重要起来。

例如下面两行nsswitch.conf文件配置行:

passwd files nis
host nis files dns

第一行让系统在/etc/passwd文件中搜索口令信息,如果失败的话,就使用NIS来查找信息。如果正在查找的用户同时出现在这两个地方,就会使用本地文件中的信息,因此它就是权威信息。第二行先使用NIS搜索;如果失败的话,就搜索/etc/hosts文件;如果再次失败的话,核对DNS以找出主机信息。

4、动作项([action])

在每个方法后面都可以选择跟一个动作项,用来指定如果由于某种原因该方法成功抑或失败需要做些什么。动作项的格式如下:

[[!]STATUS =action]

其中,开头和末尾的方括号属于格式的一部分,并不是用来指出括号中的内容是可选的。STATUS(按照约定使用大写字母,但本身并不区分大小写)是待测试的状态,action是如果STATUS匹配前面的方法所返回的状态将要执行的动作。开头的感叹号(!)是可选的,其作用是将状态取反。

STATUS:

STATUS的取值如下:

NOTFOUND:方法已经执行,但是并没有找到待搜索的值。 默认的动作是continue。

SUCCESS:方法已经执行,并且已经找到待搜索的值,没有返回错误。默认动作是return。

UNAVAIL:方法失败,原因是永久不可用。举例来说,所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。

TRYAGAIN:方法失败,原因是临时不可用。举例来说,某个文件被锁定,或者某台服务器超载。默认动作是continue。

action:

action的取值如下:

return:返回到调用例程,带有返回值,或者不带返回值。

continue:继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。

示例:

举例来说,下面这行取自nsswitch.conf文件,它的作用是让系统首先使用DNS来搜索给定主机的IP地址。DNS方法后面的动作项是测试该方法所返回的状态是否为“非(!)UNAVAIL”。

hosts    dns [!UNAVAIL=return] files

如果DNS方法没有返回UNAVAIL(!UNAVAIL),也就是说DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那么系统就会执行与该STATUS相关的动作(return)。其结果就是,只有在DNS服务器不可用的情况下才会使用后面的方法(files)。

如果DNS服务器并不是不可用(两次否定之后就是“可用”),那么搜索返回域名或者报告未找到域名。只有当服务器不可用的时候,搜索才会使用files方法(检查本地的/etc/hosts文件)。

5、compat方法:passwd、group和shadow文件中的"±"

可以在/etc/passwd、/etc/group和/etc/shadow文件中放入一些特殊的代码,(如果在nsswitch.conf文件中指定compat方法的话)让系统将本地文件和NIS映射表中的项进行合并和修改。

在这些文件中,如果在行首出现加号'+',就表示添加NIS信息;如果出现减号'-',就表示删除信息。举例来说,要想使用passwd文件中的这些代码,可以在nsswitch.conf文件中指定passwd: compat。然后系统就会按照顺序搜寻passwd文件,当它遇到以+或者 开头的行时,就会添加或者删除适当的NIS项。

虽然可以在passwd文件的末尾放置加号,在nsswitch.conf文件中指定passwd: compat,以搜索本地的passwd文件,然后再搜寻NIS映射表,但是更高效的一种方法是在nsswitch.conf文件中添加passwd: file nis而不修改passwd文件。

3)/etc/xinetd.conf

什么是xinetd?

extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。

xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。

xinetd的特色

1、强大的存取控制功能

— 内置对恶意用户和善意用户的差别待遇设定。

— 使用libwrap支持,其效能更甚于tcpd。

— 可以限制连接的等级,基于主机的连接数和基于服务的连接数。

— 设置特定的连接时间。

— 将某个服务设置到特定的主机以提供服务。

2、有效防止DoS攻击

— 可以限制连接的等级。

— 可以限制一个主机的最大连接数,从而防止某个主机独占某个服务。

— 可以限制日志文件的大小,防止磁盘空间被填满。

3、强大的日志功能

— 可以为每一个服务就syslog设定日志等级。

— 如果不使用syslog,也可以为每个服务建立日志文件。

— 可以记录请求的起止时间以决定对方的访问时间。

— 可以记录试图非法访问的请求。

4、转向功能

可以将客户端的请求转发到另一台主机去处理。

5、支持IPv6

xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,可以通过在./configure脚本中使用with-inet6 capability选项来完成。
注意,要使这个生效,核心和网络必须支持IPv6。IPv4仍然被支持。

6、与客户端的交互功能
无论客户端请求是否成功,xinetd都会有提示告知连接状态。

Xinetd的缺点

当前最大的缺点是对RPC支持的不稳定,但是可以启动protmap,使它与xinetd共存来解决这个问题。

使用xinetd启动守护进程

原则上任何系统服务都可以使用xinetd,然而最适合的应该是那些常用的网络服务,同时,这个服务的请求数目和频繁程度不会太高。

像DNS和Apache就不适合采用这种方式,而像FTP、Telnet、SSH等就适合使用xinetd模式。

系统默认使用xinetd的服务可以分为如下几类:

① 标准Internet服务:telnet、ftp。
② 信息服务:finger、netstat、systat。
③ 邮件服务:imap、imaps、pop2、pop3、pops。
④ RPC服务:rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服务:comsat、exec、login、ntalk、shell、talk。
⑥ 内部服务:chargen、daytime、echo、servers、services、time。
⑦ 安全服务:irc。
⑧ 其他服务:name、tftp、uucp。

具体可以使用xinetd的服务在/etc/services文件中指出,例如:

# /etc/services:
# $Id: services,v 1.40 2004/09/23 05:45:18 notting Exp $
# service-name  port/protocol  [aliases ...]   [# comment]
tcpmux      1/tcp               # TCP port service multiplexer
tcpmux      1/udp               # TCP port service multiplexer
rje     5/tcp                   # Remote Job Entry
rje     5/udp                   # Remote Job Entry
echo        7/tcp
echo        7/udp
discard     9/tcp       sink null
discard     9/udp       sink null
………

Internet 网络服务文件中,记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用Tab键或空格键分隔,分别表示 “服务名称”、“使用端口”、“协议名称”及“别名”。在一般情况下,不要修改该文件的内容,因为这些设置都是Internet标准的设置。一旦修改,可能会造成系统冲突,使用户无法正常访问资源。Linux系统的端口号的范围为0~65 535,不同范围的端口号有不同的意义。

—  0:不使用。
—  1~1 023:系统保留,只能由root用户使用。
—  1 024~4 999:由客户端程序自由分配。
—  5 000~65 535:由服务器程序自由分配。

解读/etc/xinetd.conf和/etc/xinetd.d/*

/etc/xinetd.conf

xinetd 的配置文件是/etc/xinetd.conf,但是它只包括几个默认值及/etc/xinetd.d目录中的配置文件。如果要启用或禁用某项 xinetd服务,编辑位于/etc/xinetd.d目录中的配置文件。例如,disable属性被设为yes,表示该项服务已禁用;disable属性被设为no,表示该项服务已启用。/etc/xinetd.conf有许多选项,下面是RHEL 4.0的/etc/xinetd.conf:

# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances             = 60
log_type               = SYSLOG authpriv
log_on_success       = HOST PID
log_on_failure       = HOST
cps                   = 25 30
}
includedir /etc/xinetd.d

参数说明:

— instances = 60:表示最大连接进程数为60个。
— log_type = SYSLOG authpriv:表示使用syslog进行服务登记。
— log_on_success= HOST PID:表示设置成功后记录客户机的IP地址的进程ID。
— log_on_failure = HOST:表示设置失败后记录客户机的IP地址。
— cps = 25 30:表示每秒25个入站连接,如果超过限制,则等待30秒。主要用于对付拒绝服务攻击。
— includedir /etc/xinetd.d:表示告诉xinetd要包含的文件或目录是/etc/xinetd.d。

/etc/xinetd.d/*

下面以/etc/xinetd.d/中的一个文件(rsync)为例。

service rsync
{
disable = yes
socket_type      = stream
wait              = no
user              = root
server           = /usr/bin/rsync
log_on_failure += USERID
}

下面说明每一行选项的含义:

— disable = yes:表示禁用这个服务。
— socket_type = stream:表示服务的数据包类型为stream。
— wait = no:表示不需等待,即服务将以多线程的方式运行。
— user = root:表示执行此服务进程的用户是root。
— server = /usr/bin/rsync:启动脚本的位置。
— log_on_failure += USERID:表示设置失败时,UID添加到系统登记表。

配置xinetd

1、格式

/etc/xinetd.conf中的每一项具有下列形式:

service service-name
{
……
}

其中service是必需的关键字,且属性表必须用大括号括起来。每一项都定义了由service-name定义的服务。

service-name是任意的,但通常是标准网络服务名,也可增加其他非标准的服务,只要它们能通过网络请求激活,包括localhost自身发出的网络请求。有很多可以使用的属性,稍后将描述必需的属性和属性的使用规则。

操作符可以是=、+=或-=。所有属性可以使用=,其作用是分配一个或多个值,某些属性可以使用+=或-=,其作用分别是将其值增加到某个现存的值表中,或将其值从现存值表中删除。

2、配置文件

相关的配置文件如下:

/etc/xinetd.conf
/etc/xinetd.d/*                                       //该目录下的所有文件
/etc/hosts.allow
/etc/hosts.deny

3、disabled与enabled

前者的参数是禁用的服务列表,后者的参数是启用的服务列表。他们的共同点是格式相同(属性名、服务名列表与服务中间用空格分开,例如disabled = in.tftpd in.rexecd),此外,它们都是作用于全局的。如果在disabled列表中被指定,那么无论包含在列表中的服务是否有配置文件和如何设置,都将被禁用;如果enabled列表被指定,那么只有列表中的服务才可启动,如果enabled没有被指定,那么disabled指定的服务之外的所有服务都可以启动。

4、注意问题

① 在重新配置的时候,下列的属性不能被改变:socket_type、wait、protocol、type;

② 如果only_from和no_access属性没有被指定(无论在服务项中直接指定还是通过默认项指定),那么对该服务的访问IP将没有限制;

③ 地址校验是针对IP地址而不是针对域名地址。

xinetd防止拒绝服务攻击(Denial of Services)的原因

xinetd能有效地防止拒绝服务攻击(Denial of Services)的原因如下:

1、限制同时运行的进程数

通过设置instances选项设定同时运行的并发进程数:

instances=20

当服务器被请求连接的进程数达到20个时,xinetd将停止接受多出部分的连接请求。直到请求连接数低于设定值为止。

2、限制一个IP地址的最大连接数

通过限制一个主机的最大连接数,从而防止某个主机独占某个服务。

per_source=5

这里每个IP地址的连接数是5个。

3、限制日志文件大小,防止磁盘空间被填满

许多攻击者知道大多数服务需要写入日志。入侵者可以构造大量的错误信息并发送出来,服务器记录这些错误,可能就造成日志文件非常庞大,甚至会塞满硬盘。同时会让管理员面对大量的日志,而不能发现入侵者真正的入侵途径。因此,限制日志文件大小是防范拒绝服务攻击的一个方法。

log_type FILE.1 /var/log/myservice.log 8388608 15728640

这里设置的日志文件FILE.1临界值为8MB,到达此值时,syslog文件会出现告警,到达15MB,系统会停止所有使用这个日志系统的服务。

4、限制负载

xinetd还可以使用限制负载的方法防范拒绝服务攻击。用一个浮点数作为负载系数,当负载达到这个数目的时候,该服务将暂停处理后续的连接。

max_load = 2.8

上面的设定表示当一项系统负载达到2.8时,所有服务将暂时中止,直到系统负载下降到设定值以下。

说明  要使用这个选项,编译时应加入“–with-loadavg”,xinetd将处理max-load配置选项,从而在系统负载过重时关闭某些服务进程,来实现防范某些拒绝服务攻击。

5、限制所有服务器数目(连接速率)

xinetd可以使用cps选项设定连接速率,下面的例子:

cps = 25 60

上面的设定表示服务器最多启动25个连接,如果达到这个数目将停止启动新服务60秒。在此期间不接受任何请求。

6、限制对硬件资源的利用

通过rlimit_as和rlimit_cpu两个选项可以有效地限制一种服务对内存、中央处理器的资源占用:

rlimit_as = 8M
rlimit_cpu=20

上面的设定表示对服务器硬件资源占用的限制,最多可用内存为8MB,CPU每秒处理20个进程。

xinetd的一个重要功能是它能够控制从属服务可以利用的资源量,通过它的以上设置可以达到这个目的,有助于防止某个xinetd服务占用大量资源,从而导致“拒绝服务”情况的出现。

下面以/etc/xinetd.d/中的一个文件(rsync)为例:

service rsync
{
disable = yes
socket_type      = stream
wait              = no
user              = root
server           = /usr/bin/rsync
log_on_failure += USERID
}

下面说明每一行选项的含义:

— disable = yes:表示禁用这个服务。
— socket_type = stream:表示服务的数据包类型为stream。
— wait = no:表示不需等待,即服务将以多线程的方式运行。
— user = root:表示执行此服务进程的用户是root。
— server = /usr/bin/rsync:启动脚本的位置。
— log_on_failure += USERID:表示设置失败时,UID添加到系统登记表。

4)/etc/sysconfig/network

/etc/sysconfig/network 文件用来为主机设定全局网络参数(也即不是针对单个网络接口的参数)。NETWORKING=<value> <value> 值表示是否配置这个网络,可以是如下值:

yes —配置网络
no — 不配置网络

HOSTNAME=<value> <value> 值为主机名,一般来说,这个主机名应该是一个完整的 FQDN ( Fully Qualified Domain Name),

也即主机名+域名,如 hostname.expample.com。但是主机名并非必须为 FQDN,你可以给主机取一个任意格式的名字

GATEWAY=<value> <value>值为网络的默认网关 IP 地址

注:/etc/sysconfig/network 中的 GATEWAY 参数会被/etc/sysconfig/network-scripts/ifcfg-eth0 中的 GATEWAY 参数覆盖

vim /etc/sysconfig/network

NETWORKING=YES|NO 
NETWORKING_IPV6=yes|no 
HOSTNAME=hostname 
NETWORKING=YES|NO 
NETWORKING_IPV6=yes|no 
HOSTNAME=hostname

5)/etc/sysconfig/network-scripts/ifcfg-ethN

对于主机上的每个网络接口都需要进行配置,在 Linux 中每个网络接口都有一个独立的配置文件,文件名一般为:/etc/sysconfig/network-scripts/ifcfg-ethN,其中 N是一个数字,代表主机网络接口的序号,例如,主机中有多个网络接口,那么第一个接口的配置文件就叫做 ifcfg-eth0,第二个接口的配置文件就叫做ifcfg-eth1,依次类推。

网络接口配置文件控制每个网络接口的行为,当系统启动时就使用这些文件来确定激活哪些网络接口和如何去配置这些接口。注意,网络接口配置文件中的某些配置会影响到主机上其他网络接口甚至整个整个主机网络配置。

BOOTPROTO=<value> <value>值表示采用何种方式来配置主机网络参数,可以是如下值:

none/static — 手动配置此主机网络
bootp — 使用 BOOTP 协议动态配置主机网络参数.
dhcp — 使用 dhcp 协议动态配置主机网络参数.

DEVICE=<value> <value>值表示物理设备的名称,也即网卡的名称。

DEFROUTE=<value> <value>值表示是否将本网络接口作为网络的默认路由(default route),可以是如下值:

yes — 是.
no — 否.

DNS{1,2}=<value> <value>值表示 DNS 服务器的 IP 地址,可以添加两个 DNS服务器 DNS1 和 DNS2,如果 PEERDNS 参数值为 yes ,那么此 DNS 参数值将覆盖 /etc/resolv.conf 文件中的DNS 服务器配置。

HWADDR=<value> <value>值为太网卡的 MAC 地址,是如下格式一个 12 位的16 进制串 AA:BB:CC:DD:EE:FF. 如果主机上有两张以上的网卡这个参数就是必须的,可以保证不管网卡加载次序如何,设备名都不会改变,进而能够让正确的配置文件来对其进行配置。

IPADDR=<value> <value>值为当前网络接口 IP 地址。

IPV4_FAILURE_FATAL=<value> <value>值指的是,当 IPv4 和 IPv6 配置都可用时,IPv4 配置失败是是否视为设备激活失败, 可以是如下值:

yes — 是.
no — 否.

IPV6INIT=<value> <value>值表示是否对配置主机的 IPv6 网络参数,可以是如下值:

yes — 是.
no — 否.

NETMASK=<value> <value>值为当前网络接口的子网掩码。

NM_CONTROLLED=<value> <value>值表示此网络接口是否允许 RHEL 和 CentOS 中的默认图形界面的网络配置工具 NetworkManager 来进行配置, 可以是如下值:

yes — 是.
no — 否.

ONBOOT=<value> <value>值表示是否在启动时激活此网络接口,可以是如下值:

yes — 是.
no — 否.

PEERDNS=<value> <value>值表示是否允许接口配置文件中的 DNS 参数值覆
盖 /etc/resolv.conf 文件中的 DNS 服务器配置,可以是如下值:

yes — 是.
no — 否.

PEERROUTES=<value>

SRCADDR=<value> 表示为从这个接口发出去的数据包指定另外一个源地址<value> (而不是接口的 IP 地址)。

USERCTL=<value> <value>值表示是否允许除 root 用户之外的用户配置此网络接口,可以是如下值:

yes — 是.
no — 否
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0  
#关联的设备名称  
BOOTPROTO={static|dhcp|none|bootp}  
#表示引导协议static|none表示静态;dhcp表示动态  
IPADDR=192.168.10.10  
#设置IP地址  
NETMASK=255.255.255.0  
#设置子网掩码  
GATEWAY=192.168.10.1  
#设置网关  
ONBOOT=yes|no  
#开机时是否自动激活网络接口  
HWADDR=00:1E:0B:8F:B0:D0  
#硬件地址要与硬件中的地址保持一致可省  
DNS1=202.106.0.20  
#指定DNS地址  
USERCTL=yes|no  
#表示是否允许普通用户启用或禁用此接口  
PEERDNS=yes|no  
#表示是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的dns地址  
DEVICE=eth0  
#关联的设备名称  
BOOTPROTO={static|dhcp|none|bootp}  
#表示引导协议static|none表示静态;dhcp表示动态  
IPADDR=192.168.10.10  
#设置IP地址  
NETMASK=255.255.255.0  
#设置子网掩码  
GATEWAY=192.168.10.1  
#设置网关  
ONBOOT=yes|no  
#开机时是否自动激活网络接口  
HWADDR=00:1E:0B:8F:B0:D0  
#硬件地址要与硬件中的地址保持一致可省  
DNS1=202.106.0.20  
#指定DNS地址  
USERCTL=yes|no  
#表示是否允许普通用户启用或禁用此接口  
PEERDNS=yes|no  
#表示是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的dns地址 

/etc/resolv.conf 配置DNS 网卡配置文件的DNS优先于/etc/resolv.conf
DNS 域名解析器 阿里的域名解析器:223.5.5.5 223.6.6.6

服务器网卡配置完毕后,重启网卡服务:

/etc/init.d/network restart

然后查看 ip 地址,命令为 ifconfig 或 ip address show 查看当前服务器所有网卡的 IP地址。

CentOS 7 Linux中,如果没有 ifconfig 命令,可以用 ip address show 查看,也可以安装 ifconfig 命令。需安装软件包 net-tools。

安装命令:

yum install net-tools -y

ubuntu系:

vim /etc/network/interfaces

# The primary network interface 
auto eth0 
iface eth0 inet static 
address 192.168.1.12 
gateway 192.168.1.1 
netmask 255.255.255.0 
#network 192.168.1.0 
#broadcast 192.168.1.255 
#dns-nameserver 8.8.8.8

Linux网卡名称命名

网卡命名方式:

  • lo:本地回环用于本机客户端访问本机服务器程序
  • ppp#:点对点
  • eth#:以太网网卡

RHEL5.0中/etc/modprobe.conf:根据alias定义网卡名称。

RHEL6.0中/etc/udev/rules.d/70-persistent-net.rules:中根据MAC地址定义网卡名称(udev文件是Linux2.6内核的重大改变;在2.4内核时/dev目录中提供了大量的不同设备文件的访问入口而在2.6内核中缩减了/dev下大量的代码因为引入了udev机制可以自动根据内核识别到的硬件信息自动创建对应的设备文件并给一个特定的名称)。

CentOS 7 服务器,默认网卡名为 ifcfg-eno1677736,如果想改成 ifcfg-eth0,则使用如下方法进行修改。

编辑 /etc/sysconfig/grub 文件,命名为 vim /etc/sysconfig/grub, 在倒数第二行 quiet 后加入如下代码,net.ifnames=0 biosdevname=0 如下图:

执行命令 grub2-mkconfig -o /boot/grub2/grub.cfg 生成新的 grub.cfg 文件,如下图:

重命名网卡名称,执行命令 mv ifconfig-eno16777736 ifcfg-eth0,修改 ifcfg-eth0 文件中 DEVICE= eno16777736 为 DEVICE=eth0

重启服务器,并验证网卡名称是否为 eth0, Reboot 完后,运行 ifconfig 查看。

6)/etc/host.conf文件

当系统中同时存在DNS域名解析和/etc/hosts主机表机制时,由该/etc/host.conf确定主机名解释顺序。

示例:

order hosts,bind #名称解释顺序
multi on #允许主机拥有多个IP地址
nospoof on #禁止IP地址欺骗

order是关键字,”order hosts,bind“定义先用本机hosts主机表进行名称解释,如果不能解释,再搜索bind名称服务器(DNS)。

7)/etc/resolv.conf 

该文件是 DNS 客户端配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。最主要是 nameserver 关键字,如果没指定 nameserver 就找不到 DNS 服务器,其它关键字都是可选的。 

nameserver =<value> <value>为 DNS 服务器的 IP 地址,总共可以指定 3 个 DNS服务器 IP 地址;

domain=<value> <value>值表示本地域名;

search=<value> <value>值表示域名的搜索列表,默认情况下仅包括本地域名;

下面是一个/etc/resolv.conf 文件的示例:

domain ringkee.com
search www.ringkee.com ringkee.com
nameserver 202.96.128.86
nameserver 202.96.128.166
nameserver 223.5.5.5  # 阿里DNS
nameserver 8.8.8.8  #谷歌DNS

如上分别表示主DNS和备DNS,DNS配置完成后,无需重启网络服务,DNS是立即生效。可以 ping -c 6 www.baidu.com 查看返回结果,如果有 IP 返回,则表示服务器DNS配置正确。

8)/etc/hosts 文件

/etc/hosts 文件是一个用于储存计算机网络中各节点信息的文件。这个文件负责将主机名映射到相应的 IP 地址。hosts 文件通常用于补充或取代小型网络中 DNS 的功能。和 DNS 不同的是,用户可以直接对/etc/hosts 文件进行控制。

在默认情况下, /etc/hosts 仅包括两行,分别用于指定 IPv4 网络中和 IPv6 网
络中回环接口的主机名(默认情况下为 localhost.localdomain):

# IP 地址
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

下面是一个/etc/resolv.conf 文件的示例:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#以上两行建议保留
# IP 地址 主机名(Hostname) 主机别名(Alias)
208.164.186.1 deep.openna.com deep
208.164.186.2 mail.openna.com mail
208.164.186.3 web.openna.com web

总结:

RHEL/Centos Linux下网络的配置路径为:

SUSE Linux下网络的配置路径为: 

Debian/Ubuntu Linux下网络配置文件路径为: 

Slackware Linux下网络配置文件路径为: 

二、NetworkManager网络管理

Linux目前提供两种网络管理工具,一种是network,一种是NetworkManager。

NetworkManager服务是管理和监控网络设置的守护进程,是2004年RedHat启动的项目,皆在能够让Linux用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置IP地址。Centos7之前的版本都是通过network.service管理网络配置。

到了Centos7就同时支持network.service和NetworkManager.service(简称NM),相当于在Centos7的一个过渡,默认情况下这2个服务都有开启,但是因为NetworkManager.service当时的兼容性不好,大部分人都会将其关闭。在RHEL 8/Centos 8上已废弃network.service(默认不安装),只能通过NetworkManager进行网络配置。

network

network是控制网络接口配置信息修改后,网络服务必须重新启动,来激活网络新配置,从而使得配置生效。这部分操作对服务而言和重新启动系统时是一样的作用。控制脚本是/etc/init.d/network这个文件,可以用这个文件后面加上下面的参数来操作网络服务。

例如:

/etc/init.d/network restart 
/etc/init.d/network restart

同样也可以用service这个命令来操作网络服务例如:

service network restart 
service network restart

NetworkManager

RHEL6新增加的网络管理工具,可用检测网络、自动连接网络的程序。无论是无线还是有线连接,它都可以令您轻松管理。对于无线网络,网络管理器可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器可以优先选择有线网络。网络管理器最初由 Redhat 公司开发,现在由 GNOME 管理。

NetworkManager守护进程启动后,会自动连接到已经配置的系统连接。用户连接或未配置的连接需要通过nmcli或桌面工具进行配置和连接。

network和NetworkManager之间的区别:

network:对网卡的配置。

NetworkManager:这个服务由几个部分组成,一个是管理系统网络连接,一个是允许用户管理网络连接的客户端程序,使用它可以更好的管理网络。

NetworkManager的作用:

NetworkManager主要管理2个对象: Connection(网卡连接配置) 和 Device(网卡设备),他们之间是多对一的关系,但是同一时刻只能有一个Connection对于Device才生效。

开机启用 NetworkManager:

chkconfig NetworkManager on 
或(CentOS7) 
systemctl enable NetworkManager 
chkconfig NetworkManager on 
或(CentOS7) 
systemctl enable NetworkManager

立即启动 NetworkManager:

service NetworkMnager start 
或(CentOS7) 
systemctl start NetworkManager 
service NetworkMnager start 
或(CentOS7) 
systemctl start NetworkManager

network和NetworkManager两个服务之间冲突解:

在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。

1、将NetworkManager 服务设置开机不启动

$ chkconfig NetworkManager off

2、将NetwokManager服务关闭

$ systemctl stop NetworkManager

3、重新启动一下network服务

$ systemctl restart network

4、重新加载配置

# 重新加载所有网卡配置
nmcli c reload
# 指定加载
nmcli c reload /etc/sysconfig/network-scripts/ifcfg-ens33
# 重新加载所有网卡配置(可靠,推荐)
nmcli networking off && nmcli networking on
ifdown ens33 && ifup ens33
nmcli con down ens33 && nmcli con up ens33

在RHEL 8/Centos 8有三种方法配置网络:

  • 通过nmcli connection add命令配置,会自动生成ifcfg文件。
  • 手动配置ifcfg文件,通过nmcli connection reload来加载生效。
  • 手动配置ifcfg文件,通过传统systemctl restart network.service来加载生效。

NetworkManager新版本增强设备以及协议的支持,NetworkManager 有一个全新的漂亮的客户端界面nmtui。”nmtui” 是 networkmanager 的一个图形化前端。在没有X Window 的情况下可以用它来方便地配置及管理网络。

两个都是用来管理网络,但是有一个前提:nmcli networking 状态必须是enable否则设备状态为unmanaged,这会导致network启动不了!

查看方式如下:

[root@master03 ~]# nmcli networking
enabled

启动nmtui:

[root@localhost ~]# nmtui

设置完成后,要记得在第二项目中设置对应网卡启动,这样才能正常使用。

 

NetworkManager的CLI工具nmcli,使用nmcli用户可以查询网络连接的状态,也可以用来管理。

优点:原始;语法相对简单;在CLI中使用NetworkManager很容易掌握。

下面是对应参数项目与配置文件内的参数对应关系图:

nmcli工具使用

语法:

nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
      -a, --ask                ask for missing parameters
      -c, --colors auto|yes|no            whether to use colors in output
      -e, --escape yes|no            escape columns separators in values
      -f, --fields <field,...>|all|common        specify fields to output
      -g, --get-values <field,...>|all|common    shortcut for -m tabular -t -f
      -h, --help                print this help
      -m, --mode tabular|multiline        output mode
      -o, --overview                overview mode
      -p, --pretty                pretty output
      -s, --show-secrets            allow displaying passwords
      -t, --terse                terse output
      -v, --version                show program version
      -w, --wait <seconds>            set timeout waiting for finishing operations

OBJECT
      g[eneral]    NetworkManager's general status and operations
      n[etworking]    overall networking control
      r[adio]        NetworkManager radio switches
      c[onnection]     NetworkManager's connections
      d[evice]    devices managed by NetworkManager
      a[gent]    NetworkManager secret agent or polkit agent

general 常规选项

命令格式:

nmcli general {status|hostname|permissions|logging}

命令描述:使用此命令可以显示网络管理器状态和权限,你可以获取和更改系统主机名,以及网络管理器日志记录级别和域。

显示网络管理器的整体状态(status):

$ nmcli general status
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

获取主机名或该更主机名(hostname):

# 查询主机名
$ nmcli general hostname
centos8-nat-168-182-152
# 设置主机名
$ nmcli general hostname centos8-nat-168-182-152-test
$ hostname
centos8-nat-168-182-152-test

显示当前用户对网络管理器可允许的操作权限(permissions):

$ nmcli general permissions 
PERMISSION                                                        VALUE 
org.freedesktop.NetworkManager.checkpoint-rollback                yes   
org.freedesktop.NetworkManager.enable-disable-connectivity-check  yes   
org.freedesktop.NetworkManager.enable-disable-network             yes   
org.freedesktop.NetworkManager.enable-disable-statistics          yes   
org.freedesktop.NetworkManager.enable-disable-wifi                yes   
org.freedesktop.NetworkManager.enable-disable-wimax               yes   
org.freedesktop.NetworkManager.enable-disable-wwan                yes   
org.freedesktop.NetworkManager.network-control                    yes   
org.freedesktop.NetworkManager.reload                             yes   
org.freedesktop.NetworkManager.settings.modify.global-dns         yes   
org.freedesktop.NetworkManager.settings.modify.hostname           yes   
org.freedesktop.NetworkManager.settings.modify.own                yes   
org.freedesktop.NetworkManager.settings.modify.system             yes   
org.freedesktop.NetworkManager.sleep-wake                         yes   
org.freedesktop.NetworkManager.wifi.scan                          yes   
org.freedesktop.NetworkManager.wifi.share.open                    yes   
org.freedesktop.NetworkManager.wifi.share.protected               yes  

获取和更改网络管理器日志记录级别和域,没有任何参数当前日志记录级别和域显示(loggin):

$ nmcli general logging
LEVEL  DOMAINS                                                                                                                                                                                                                       
INFO   PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY 

networking 网络控制

命令格式:

nmcli networking {on|off|connectivity}

命令描述:查询网络管理器网络状态,开启和关闭网络。

选项:

 - on: 禁用所有接口
 - off: 开启所有接口
 - connectivity:获取网络状态,可选参数checl告诉网络管理器重新检查连接性,否则显示最近已知的状态。而无需重新检查。(可能的状态如下所示)
	- none: 主机为连接到任何网络
 	- portal: 无法到达完整的互联网
 	- limited: 主机已连接到网络,但无法访问互联网
 	- full: 主机连接到网络,并具有完全访问
 	- unknown: 无法找到连接状态

获取网络状态:

$ nmcli networking connectivity
full

重启所有网络接口:

$ nmcli networking off && nmcli networking on

radio 无线限传输控制

命令格式:

nmcli radio {all|wifi|wwan}

显示无线开关状态,或启用和禁用开关。

显示无线状态:

$ nmcli radio all
WIFI-HW  WIFI     WWAN-HW  WWAN    
enabled  enabled  enabled  enabled 
$ nmcli radio wifi
enabled
$ nmcli radio wwan
enabled

monitor 活动监视器

活动监视器(ACTIVITY MONITOR),观察网络管理器活动。监视连接的变化状态、设备或连接配置文件。

connection 连接管理

命令格式:

nmcli connection {show|up|down|modify|add|edit|clone|delete|monitor|reload|load|import|export}

这是主要使用的一个功能。

列出活动的连接,或进行排序(+-为升降序):

# 查看所有连接状态
$ nmcli connection show
# 等同于nmcli connection show --order +active
$ nmcli connection show --active
# 以活动的连接进行排序
$ nmcli connection show --order +active
# 将所有连接以名称排序
$ nmcli connection show --order +name
# 将所有连接以类型排序(倒序)
$ nmcli connection show --order -type

 查看网卡信息:

nmcli connection
nmcli con show

查看指定连接的详细信息:

$ nmcli con show bond-bond0

nmcli connection show eth0


停用连接,提供连接名或uuid进行停用,若未提供,则可以使用ifname指定设备名进行激活(down):

# 以连接名进行激活
$ nmcli connection donw bond-bond0
# 以uuid进行激活
$ nmcli connection down 3a538589-12b9-4a82-adda-fe3da844510c
# 以设备接口名进行激活
$ nmcli connection donw ifname bond0

 激活连接,提供连接名称或uuid进行激活,若未提供,则可以使用ifname指定设备名进行激活(up) :

# 以连接名进行激活
$ nmcli connection up bond-bond0
# 以uuid进行激活
$ nmcli connection up 3a538589-12b9-4a82-adda-fe3da844510c
# 以设备接口名进行激活
$ nmcli connection up ifname bond0

【修改】这些属性可以用nmcli connection show bond-bond0进行获取,然后可以修改、添加或删除属性,若要设置属性,只需指定属性名称后跟值,空值将删除属性值,同一属性添加多个值使用+。同一属性删除指定值用-加索引(modify)。

添加一个网卡连接:

nmcli connection add type ethernet con-name eth0 ifname eno33554992

 修改ip地址,我这里设置eth0为手动设置静态地址,为192.168.31.5,子网掩码24,自启动:

nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.31.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.31.2 connection.autoconnect yes 

nmcli connection up eth0

添加或删除一个ipv4:

# nmcli connection modify eth0 +ipv4.addresses 192.168.0.59/24
# nmcli connection modify eth0 -ipv4.addresses 192.168.0.59/24

ip addr show eth0

更改为静态链接:

nmcli con up "static"

更改为dhcp链接:

nmcli con up "default"

添加多个ip(+ipv4.addresses):

# 添加三个ip
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.102/24
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.103/24
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.104/24
# 查看,查不到。
$ nmcli -f IP4 connection show bond-bond0
IP4.ADDRESS[1]:                         192.168.182.152/24
IP4.GATEWAY:                            192.168.182.2
IP4.ROUTE[1]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.182.2, mt = 300
IP4.DNS[1]:                             8.8.8.8
# 启用配置
$ nmcli connection up bond-bond0
# 再次查看,就可以查到刚才添加的三个ip
$ nmcli -f IP4 connection show bond-bond0
IP4.ADDRESS[1]:                         192.168.182.152/24
IP4.ADDRESS[2]:                         192.168.182.102/24
IP4.ADDRESS[3]:                         192.168.182.103/24
IP4.ADDRESS[4]:                         192.168.182.104/24
IP4.GATEWAY:                            192.168.182.2
IP4.ROUTE[1]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[2]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[3]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[4]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[5]:                           dst = 0.0.0.0/0, nh = 192.168.182.2, mt = 300
IP4.DNS[1]:                             8.8.8.8

添加ipv6地址:

[root@despotic ~]# nmcli connection modify ens37 ipv6.addresses 2001::1/64 ipv6.gateway 2001::1 ipv6.dns 2001::1
[root@despotic ~]# nmcli connection reload
[root@despotic ~]# nmcli connection down ens37
Connection 'ens37' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
[root@despotic ~]# nmcli connection up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)

[root@despotic ~]# ifconfig
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.27.36 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::8de7:fb4:1c03:22da prefixlen 64 scopeid 0x20<link>
inet6 2001::1 prefixlen 64 scopeid 0x0<global>
ether 00:0c:29:5f:90:9d txqueuelen 1000 (Ethernet)
RX packets 103348 bytes 6768910 (6.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 698 bytes 54398 (53.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ping一下也可以pin通:

[root@despotic ~]# ping6 2001::1
PING 2001::1(2001::1) 56 data bytes
64 bytes from 2001::1: icmp_seq=1 ttl=64 time=0.121 ms
64 bytes from 2001::1: icmp_seq=2 ttl=64 time=0.128 ms
^C
--- 2001::1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.121/0.124/0.128/0.011 ms

注意:

有的时候配置可能没有ipv4.gateway这个选项,可用如下方式配置:

ipv4.address "192.168.0.11/24 192.168.0.1"

使用ip addr show eth1 | grep ipv4 可以看见有一条是这样写的,这条信息包含了ip,掩码,网关:

ipv.addresses { ip = 192.168.0.11/24, gw = 192.168.0.1 }

删除指定ip(-ipv4.addresses):

# 删除刚刚添加的三个ip
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.102/24
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.103/24
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.104/24
# 启用配置
$ nmcli connection up bond-bond0
# 查看
$ nmcli -f IP4 connection show bond-bond0

【添加】这是创建一个新的连接,需要指定新创建连接的属性,语法与modify相同(add):

# 查看当前所有连接,c是connection的缩写
$ nmcli c show
$ nmcli con add con-name eth1 type ethernet  autoconnect yes ifname ens33
$ nmcli c show
# con-name     连接名称
# type              连接类型
# autoconnect 是否自动连接
# ifname          连接到的设备名称

克隆连接,克隆一个存在的连接,除了连接名称和uuid是新生成的,其他都是一样的(clone):

$ nmcli connection clone eth1 eth1_1

【删除】删除连接,这将删除一个连接(delete),con 是connection的缩写:

$ nmcli con delete eth1_1

如果不小心配置错误,可将配置信息删除重新配置:

[root@despotic ~]# nmcli connection add type ethernet con-name ens37 ifname ens37 autoconnect yes
Connection 'ens37' (894ebf60-16c9-4344-8674-62ad5fb9b2b7) successfully added.

[root@despotic ~]# nmcli connection 
NAME UUID TYPE DEVICE 
ens33 e2301185-1a8d-4b12-b1c7-bfbdf84f7a50 802-3-ethernet ens33 
ens37 894ebf60-16c9-4344-8674-62ad5fb9b2b7 802-3-ethernet ens37

[root@despotic ~]# nmcli connection modify ens37 ipv4.addresses "192.168.27.36/16" ipv4.gateway 192.168.0.1 ipv4.dns 192.168.0.1 ipv4.method manual connection.autoconnect yes connection.interface-name ens37
重新加载一下,启动ens37就可以看见ens37的网络信息了
[root@despotic ~]# nmcli connection reload
[root@despotic ~]# nmcli connection up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@despotic ~]# nmcli connection show ens37 | grep ipv4
ipv4.method: manual
ipv4.dns: 192.168.0.1

[root@despotic ~]# nmcli connection delete ens37
Connection 'ens37' (894ebf60-16c9-4344-8674-62ad5fb9b2b7) successfully deleted.
[root@despotic ~]# nmcli connection 
NAME UUID TYPE DEVICE 
ens33 e2301185-1a8d-4b12-b1c7-bfbdf84f7a50 802-3-ethernet ens33

从磁盘加载/重新加载一个或多个连接文件,例如你手动创建了一个/etc/sysconfig/network-scripts/ifcfg-ethx连接文件,你可以将其加载到网络管理器,以便管理:

$ echo -e "TYPE=Ethernet\nNAME=ethx" > /etc/sysconfig/network-scripts/ifcfg-ethx
$ nmcli con show
$ nmcli con load /etc/sysconfig/network-scripts/ifcfg-ethx
$ nmcli connection show

监视连接配置文件活动(monitor):

$ nmcli connection monitor bond-bond0

device 设备管理

命令格式:

nmcli device {status|show|set|connect|reapply|modify|disconnect|delete|monitor|wifi|lldp}

显示和管理设备接口。该选项有很多功能,例如连接wifi,创建热点,扫描无线,邻近发现等,下面仅列出常用选项。详细功能可使用nmcli device help查看。

打印设备状态,如果没有将命令指定给nmcli device,则这是默认操作(status)
以下两条命令对等:

$ nmcli device status       #查看设备的信息
$ nmcli device show enp0s3  #查看 enp0s3设备的信息

 显示所有设备接口的详细信息(show):

$ nmcli device show ens33

设置设备属性(set) :

$ nmcli device set ifname ens33 autoconnect yes

连接设备(connection)。提供一个设备接口,网络管理器将尝试找到一个合适的连接, 将被激活。它还将考虑未设置为自动连接的连接。(默认超时为90s):

$ nmcli dev connect ens33

修改设备上处于活动的设备(modify),但该修改只是临时的,并不会写入文件。(语法与 nmcli connection modify 相同):

$ nmcli device modify ens33 +ipv4.addresses 192.168.100.103/24

断开当前连接的设备(disconnect),防止自动连接。但注意,断开意味着设备停止!但可用 connect 进行连接:

$ nmcli device disconnect ens33

删除设备(delete),该命令从系统中删除接口。请注意, 这仅适用于诸如bonds, bridges, teams等软件设备。命令无法删除硬件设备 (如以太网)。超时时间为10秒:

$ nmcli device delete bond0

监视设备活动(monitor)。每当指定的设备更改状态时, 此命令都会打印一行:

$ nmcli device monitor bond0

nmcli 返回状态码

mcli 如果成功退出状态值为0,如果发生错误则返回大于0的值:

0: 成功-指示操作已成功
1: 位置或指定的错误
2: 无效的用户输入,错误的nmcli调用
3: 超时了(请参阅 --wait 选项)
4: 连接激活失败
5: 连接停用失败
6: 断开设备失败
7: 连接删除失败
8: 网络管理器没有运行
10: 连接、设备或接入点不存在
65: 当使用 --complete-args 选项,文件名应遵循。

三、网络故障处理

1. network无法启动

如果遇到network无法启动的情况,检测配置是是否有问题,如果是服务器(多网口),检测网线是否插在你启动的网网口上。

检测你的NetworkManage是否启动,如果启动了可参考一下方法处理:

简单粗暴:关闭NetworkManage服务,并取消开机启动(要是你使用的为命令行模式,没有有用图形界面,可以放心使用这种方法,使用图形界面的话还是建议自己排查一下)

排查NetworkManager:

  • 检查nmctl networking 状态是否为enabled,如果不是,执行一下命令开启。
[root@master03 ~]# nmcli networking on
[root@master03 ~]# systemctl restart NetworkManager
[root@master03 ~]# systemctl restart network
[root@master03 ~]# nmcli device
DEVICE   TYPE      STATE      CONNECTION
ens33    ethernet  connected  ens33
docker0  bridge    unmanaged  --
lo       loopback  unmanaged  --
[root@master03 ~]#

检测device有没有连接到connection,命令:nmcli connection来查看连接状态。

若没有,则使用命令来连接:

nmcli device connect ens33

  • 检测连接是否启用
[root@master03 ~]# nmcli connection
NAME   UUID                                  TYPE      DEVICE
ens33  4d574cba-a63e-49ae-8cb2-d663a8dd796e  ethernet  ens33

如果没有启用:

注意了:我的连接名称是ens33,根据你自己的情况自己改进,所有操作完成以后都执行以下命令。

[root@master03 ~]# systemctl restart NetworkManager
[root@master03 ~]# systemctl restart network

否则可能不生效,当然上面两种网络管理方式network与NetworkManager其它是相辅相成的作用,只需要使用其中一种方式来管理即可,另外一种可以禁用掉(注意:至少保持一种自启动,否则可能会出现开机没有网络的状况)。

我比较喜欢使用NetworkManager来管理网络,更大的强大和易用,所以我这里把NetworkManager设置为开机启动,network为禁止开机启动。使用以下命令来查看启动状态。

# 查看NetworkManager的是否为自启动
[root@mx ~]# systemctl list-unit-files --type service | grep NetworkManager

# 查看network是否设置为自启动
[root@mx ~]# chkconfig --list | grep network

2. 网卡故障:弹出界面 eth0: 错误:没有找到合适的设备:没有找到可用于链接 System eth0 的

报错截图如下:

排错步骤如下:

1:查看系统是否识别相应网卡 (发现没有 eth0 网卡存在)

根据显示信息我们可以初步判定系统网卡信息有问题。

2:查看当前 MAC 地址相关信息

删除多余 mac 地址信息,并修改网卡配置文件。

/etc/udev/rules.d/70-persistent-net.rules 文件下记录着网卡对应 mac 地址信息:

 

修改网卡配置文件并保存:

/etc/sysconfig/network-scripts/ifcfg-eth0  网卡配置文件位置:

4:重启网卡查看是否配置正确,发现可以正常启动 

查看相应网卡信息(如何发现网卡 IP 地址正常但显示为 eth1, 建议重启后生效): 

3.  修改MAC地址

#ifconfig eth0 down
#cd /etc/sysconfig/network-scripts
#vi ifcfg-eth0
修改其中的"HWADDR=xx:xx:xx:xx:xx:xx"为"MACADDR=xx:xx:xx:xx:xx:xx"
#ifconfig eth0 up

注意:关键词HWADDR和MACADDR是有区别的。
特别是 CentOS7中,查询ip addr 就显示MACADDR了,而CentOS6.8使用ip addr查询,结果是 HWADDR。

[root@ligle2 ~]# uuidgen eth1
07d07031-eb0f-4691-8606-befb46645433

获取到eth1网卡的uuid,即可完成对ifcfg-eth1配置文件的修改,最后通过service network restart命令重启网卡,OK。

#service network start
#service network restart

4. Determining if ip address xxx.xxx.xxx.xxx is already in use for device eth0...

在centos或者rehat里,设置网卡后,重启的时候出现如下报错:

[root@Server ~]# service network restart
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0: Determining if ip address 192.168.170.136 is already in use for device eth0...
                                                           [确定]
[root@Server ~]#

在网卡配置文件里添加一条ARPCHECK=no,是arp检查导致的关闭就可:

sed -i "ARPCHECK=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@Server ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=00:0C:29:6F:D7:6E
TYPE=Ethernet
UUID=14e3be88-e1a9-4ebd-bea3-6d337b161e10
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.170.136
NETMASK=255.255.255.0
GATEWAY=192.168.170.2
DNS1=192.168.170.2
ARPCHECK=no

添加完成,重启一下看看:

[root@Server ~]# service network restart
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0:                                            [确定]
[root@Server ~]#

5. 更改网卡配置后重启网络服务,启动报错 journalctl -xe

装完系统后想修改网卡文件名为eth0,默认的为:eno16777736;然后直接修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736里面的name和device,并把配置文件名改为ifcfg-eth0。重启网络:systemctl restart network.service。后来因重启失败还原为原来的信息,以为会正常,但仍没有解决。

# systemctl restart network.service
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.

查看日志:

# cat /var/log/messages |grep network
Jul  4 10:05:10 dg-p systemd: Starting LSB: Bring up/down networking...
Jul  4 10:05:10 dg-p network: Bringing up loopback interface:  Could not load file '/etc/sysconfig/network-scripts/ifcfg-lo'
Jul  4 10:05:10 dg-p network: Could not load file '/etc/sysconfig/network-scripts/ifcfg-lo'
Jul  4 10:05:10 dg-p network: Could not load file '/etc/sysconfig/network-scripts/ifcfg-lo'
Jul  4 10:05:10 dg-p network: Could not load file '/etc/sysconfig/network-scripts/ifcfg-lo'
Jul  4 10:05:10 dg-p network: [  OK  ]
Jul  4 10:05:11 dg-p network: Bringing up interface eno16777736:  Error: Connection activation failed: No suitable device found for this connection.
Jul  4 10:05:11 dg-p network: [FAILED]
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p network: RTNETLINK answers: File exists
Jul  4 10:05:11 dg-p systemd: network.service: control process exited, code=exited status=1
Jul  4 10:05:11 dg-p systemd: Failed to start LSB: Bring up/down networking.
Jul  4 10:05:11 dg-p systemd: Unit network.service entered failed state.
Jul  4 10:05:11 dg-p systemd: network.service failed.

删除网卡连接:

nmcli connection delete eno16777736

ip addr,在ifcfg-ens中增加HWADDR为新的mac:

修改/etc/sysconfig/network-scripts/下以ifcfg开头的网络链接文件。

例如vim /etc/sysconfig/network-scripts/ifcfg-eno16777736,将HWADDR="00:0c:29:7e:67:f7"改为HWADDR="00:0c:29:5d:6f:01":

修改DEVICE和Name还有文件名与ip addr中的网卡名一致,不行需要将Device注释掉:

# mv /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-eth0
修改配置文件里面name和device
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0                           #修改和文件名一样
HWADDR=00:0c:29:5d:6f:01             #这里原文件没有,手动添加上去
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.70.42
NETMASK=255.255.255.0
GATEWAY=192.168.70.254

修改/etc/sysconfig/grub,添加net.ifnames=0 biosdevname=0:

# vi  /etc/sysconfig/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap net.ifnames=0 biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

查看接口的MAC地址:

# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:28:ac:54 brd ff:ff:ff:ff:ff:ff

手动生成70-persistent-net.rules,生成文件:

# vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:28:ac:54", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

或者可以直接修改内核参数配置并植入内核:

# vi /etc/default/grub

 植入内核:

grub2-mkconfig -o /boot/grub2/grub.cfg 

最后重启网卡service network restart或重启即可:

systemctl stop NetworkManager
systemctl disable NetworkManager 

reboot

添加网卡:

nmcli connection add type ethernet con-name eth0

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/126205393