Linux网络配置基础二(网络模块与nmcli命令)

Linux网络配置基础二

相关命令

lsmod命令

lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
Linux网络配置基础二(网络模块与nmcli命令)
第一列:表示模块的名称
第二列:表示模块的大小
第三列:表示依赖模块的个数
第四列:表示依赖模块的内容
常用使用格式类似于:(查询当前系统是否加载某些模块)
lsmod |grep -i <模块名称>
例如:ext4、bonging
相关文件:
按照/proc/modules的格式显示加载的内核模块

rmmod命令

rmmod命令用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。
标准使用格式:
rmmod [ -f ] [ -w ] [ -s ] [ -v ] [ modulename ]
即:rmmod [options] [ modulename ]
-f:强制移除模块,该选项是非常危险:除非编译内核时,CONFIG_MODULE_FORCE_UNLOAD被设置该命令才有效果,否则没效果。用该选项可以删除正在被使用的模块,设计为不能删除的模块,或者标记为unsafe的模块。
-w –wait:等待着,直到模块能够被除时在移除模块,rmmod拒绝删除正在被使用的模块。使用该选项后,指定的模块会被孤立起来,直到不被使用。
-s:向系统日志(syslog)发送错误信息。将错误信息写入syslog,而不是标准错误(stderr)。
-v:显示指令执行的详细信息,显示程序正在做些什么,一般只显示执行时的错误信息。
用rmmod命令主要用于卸载正在使用的Linux内核模块,与modprobe -r命令相似,如下所示:

[root@localhost boot]# lsmod | grep raid1 
raid1 25153 0 
[root@localhost boot]# rmmod raid1 
[root@localhost boot]# lsmod | grep raid1

注意:大多数用户使用modprobe -r去删除模块。

以上文bonding实验为例:
删除bond0

[root@centos6 ~]# ifconfig bond0 down
[root@centos6 ~]# rmmod bonding

并删除ifcfg-bond0文件

modprobe命令

modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。(为简便起见,模块名中'_'和'-'是一样的)。modprobe会查看模块目录/lib/modules/'uname -r'里面的所有模块和文件,除了可选的/etc/modprobe.conf配置文件和/etc/modprobe.d目录外。
modprobe需要一个最新的modules.dep文件,可以用depmod来生成。该文件列出了每一个模块需要的其他模块,modprobe使用这个去自动添加或删除模块的依赖。
标准使用格式:
modprobe [ -v ] [ -V ] [ -C config-file ] [ -n ] [ -i ] [ -q ] [ -b ] [ -o modulename ] [ modulename ] [ module parame-ters… ]
modprobe [ -r ] [ -v ] [ -n ] [ -i ] [ modulename… ]
modprobe [ -l ] [ -t dirname ] [ wildcard ]
modprobe [ -c ]
modprobe [ –dump-modversions ]

选项:
-v –verbose 显示程序在干什么,通常在出问题的情况下,modprobe才显示信息。
-C –config 重载(^_^,意思取C++的重载)默认配置文件(/etc/modprobe.conf或/etc/modprobe.d)。
-c –showconfig 显示所有模块的设置文件信息并退出
-n –dry-run 可以和-v选项一起使用,调试非常有用
-i –ignore-install –ignore-remove 该选项会使得modprobe忽略配置文件中的,在命令行上输入的install和remove命令。
-q –quiet 一般modprobe删除或插入一个模块时,若没有找到会提示错误。使用该选项,会忽略指定的模块,并不提示任何错误信息。
-r –remove 该选项会导致modprobe去删除,而不是插入一个模块。通常没有没有理由去删除内核模块,除非是一些有bug的模块。你的内核也不一定支持模块的卸载;模块闲置不用时,即自动卸载模块; 。
-w –wait:等待着,直到模块能够被除时(引用计数为0)在移除模块,rmmod拒绝删除正在被使用的模块。使用该选项后,指定的模块会被孤立起来,直到不被使用。
-f –force 和同时使用–force-vermagic ,–force-modversion一样。使用该选项是比较危险的。
-l –list 列出所有可用模块
-a –all 载入所有命令行中的模块
-t –type 强制 -l 显示dirname中的模块;指定模块类型;
-s –syslog 错误信息写入syslog
示例:
查看moddules的配置文件

[root@centos6 ~]# modprobe -c

这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下:

alias char-major-109-* lvm-mod

列出内核中所有已经或者未挂载的所有模块:

[root@centos6 ~]# modprobe -l |grep -i bond
kernel/drivers/net/tulip/winbond-840.ko
kernel/drivers/net/bonding/bonding.ko
kernel/drivers/media/rc/winbond-cir.ko

这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l读取的模块列表就位于/lib/modules/uname -r目录中;其中uname -r是内核的版本,例如输出结果的其中一行是:

[root@centos6 ~]# cd /lib/modules/`uname -r`/kernel/net/netfilter

由于

[root@centos6 ~]# uname -r
2.6.32-642.el6.x86_64

相当于

[root@centos6 ~]# cd /lib/modules/2.6.32-642.el6.x86_64/kernel/net/netfilter

挂载vfat模块:
modprobe vfat
这里,使用格式modprobe 模块名来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过modprobe -l所看到的模块,都是带有.ko或.o后缀。
移除已经加载的模块:

[root@centos6 ~]# modprobe -r 模块名

这里,移除已加载的模块,和rmmod功能相同。

dmesg命令

dmesg命令用于显示或控制内核环缓冲区;kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在/var/log/dmesg文件里。
所以dmesg用来帮助用户了解系统的启动信息。用户只需使用命令:dmesg > boot.messages
然后将文件 boot.messages 邮寄给某些可以帮你调试系统的人。而无须手工拷贝系统启动信息。
标准使用格式:
dmesg [-c] [-r] [-n level] [-s bufsize]
选项:
-c:显示信息后,清除ring buffer(内核环缓冲区)中的内容
-r:显示原始的消息缓冲区,即不带i.e.前缀级别的日志
-s 缓冲区大小:默认大小为 8196(此大小与 2.0.33 和 2.1.103 内核的默认 syslog 缓冲区大小一致), 如果你设置了一个大于默认值的环缓冲区, 那你就可以用这个选项定义一个相当的缓冲区 来查看完整的环缓冲区内容。
-n 级别 :设置级别为记录控制台启动信息的级别。比如, -n 1 指的就是将此级别设为最低级, 除了内核恐慌信息之外不会向控制台显示信息。 所有级别的启动信息还将记录到 /proc/kmsg, 文件中,因此, syslogd(8) 同样可以用来对信息的输出进行控制。当使用 -n 选项时, dmesg 将 不会 清除内核环缓冲区中的内容。 当同时使用以上两个选项时,只有最后一个选项才会产生效果。
示例:
Linux网络配置基础二(网络模块与nmcli命令)
Linux网络配置基础二(网络模块与nmcli命令)

ethtool命令

ethtool命令由于查询或控制网络驱动程序和硬件设置
使用格式示例:
ethtool eth* #查询eth*网口基本设置
ethtool –h #显示ethtool的命令帮助(help)
ethtool –i eth* #查询eth*网口的相关信息
ethtool –d eth* #查询eth*网口注册性信息
ethtool –r eth* #重置eth*网口到自适应模式
ethtool –S eth* #查询eth*网口收发包统计
ethtool –s eth* [speed 10|100|1000]\ #设置网口速率10/100/1000M
[duplex half|full]\ #设置网口半/全双工
[autoneg on|off]\ #设置网口是否自协商
[port tp|aui|bnc|mii]\ #设置网口类型

常用选项:
-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-i 显示网卡驱动的信息,如驱动的名称、版本等。
-d 显示register dump信息, 部分网卡驱动不支持该选项。
-e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
-E 修改网卡EEPROM byte。
-k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
-K 修改网卡Offload参数的状态。
-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
-r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。
-S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
-t 让网卡执行自我检测,有两种模式:offline or online。
-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。

数据来源 
Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为: 最重要的结构体struct ethtool_ops,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。 网卡驱动负责实现(部分)这些函数,并将其封装入ethtool_ops结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。Ethtool命令选项、struct ethtool_ops成员函数、Ethtool命令显示参数的来源,三者间的对应关系如下表所示:
Linux网络配置基础二(网络模块与nmcli命令)

由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。

实例
查看机器上网卡的速度:百兆还是千兆,请输入:

[root@centos6 ~]# ethtool eth1
Settings for eth1:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
    100baseT/Half 100baseT/Full 
    1000baseT/Full 
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
    100baseT/Half 100baseT/Full 
    1000baseT/Full 
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: off (auto)
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
               drv probe link
    Link detected: yes

操作完毕后,输出信息中Speed:这一项就指示了网卡的速度。
停止网卡的发送模块TX,请输入:

[root@centos6 ~]# ethtool -A tx off eth1

操作完毕后,可输入ethtool -a eth0查看tx模块是否已被停止。

[root@centos6 ~]# ethtool -a eth1
Pause parameters for eth1:
Autonegotiate:    on
RX:        off
TX:        off

查看网卡eth0采用了何种驱动,请输入:

[root@centos6 ~]# ethtool -i eth1
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: 
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入:

[root@centos6 ~]# ethtool -K eth2 rx off

操作完毕后,可输入ethtool –k eth0,查看校验功能是否已被停止。

[root@centos6 ~]# ethtool -k eth2
Features for eth2:
rx-checksumming: off
tx-checksumming: on
    tx-checksum-ipv4: off
    tx-checksum-unneeded: off
    tx-checksum-ip-generic: on
    tx-checksum-ipv6: off
    tx-checksum-fcoe-crc: off [fixed]
    tx-checksum-sctp: off [fixed]
scatter-gather: on
    tx-scatter-gather: on
    tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
    tx-tcp-segmentation: on
    tx-tcp-ecn-segmentation: off
    tx-tcp6-segmentation: off
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on [fixed]
tx-vlan-offload: on [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
fcoe-mtu: off [fixed]
loopback: off [fixed]

如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:

[root@centos6 ~]# ethtool -p eth2 10

操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。
查看网卡,在接收/发送数据时,有没有出错?请输入:

[root@centos6 ~]# ethtool -S eth2
NIC statistics:
 rx_packets: 253023
 tx_packets: 32
 rx_bytes: 28024224
 tx_bytes: 2384
 rx_broadcast: 0
 tx_broadcast: 0
 rx_multicast: 0
 tx_multicast: 0
 rx_errors: 0
 tx_errors: 0
 tx_dropped: 0
 multicast: 0
 collisions: 0
 rx_length_errors: 0
 rx_over_errors: 0
 rx_crc_errors: 0
 rx_frame_errors: 0
 rx_no_buffer_count: 0
 rx_missed_errors: 0
 tx_aborted_errors: 0
 tx_carrier_errors: 0
 tx_fifo_errors: 0
 tx_heartbeat_errors: 0
 tx_window_errors: 0
 tx_abort_late_coll: 0
 tx_deferred_ok: 0
 tx_single_coll_ok: 0
 tx_multi_coll_ok: 0
 tx_timeout_count: 0
 tx_restart_queue: 0
 rx_long_length_errors: 0
 rx_short_length_errors: 0
 rx_align_errors: 0
 tx_tcp_seg_good: 0
 tx_tcp_seg_failed: 0
 rx_flow_control_xon: 0
 rx_flow_control_xoff: 0
 tx_flow_control_xon: 0
 tx_flow_control_xoff: 0
 rx_long_byte_count: 28024224
 rx_csum_offload_good: 127055
 rx_csum_offload_errors: 0
 alloc_rx_buff_failed: 0
 tx_smbus: 0
 rx_smbus: 0
 dropped_smbus: 0

将千兆网卡的速度降为百兆,请输入:

[root@centos6 ~]# ethtool -s eth2 speed 100

综合示例:
卸载网卡驱动:

[root@centos6 ~]# modprobe -r e1000
[root@centos6 ~]# rmmod e1000

装载网卡驱动:

[root@centos6 ~]# modprobe e1000

注意:e1000为网卡驱动模块由 ethtool -i eth2 获得

最后重启网络服务,网卡就会重新识别
查看当前系统网卡驱动模块存储位置

[root@centos6 ~]# locate e1000.ko
/lib/modules/2.6.32-642.el6.x86_64/kernel/drivers/net/e1000/e1000.ko

配置动态路由
通过守护进程获取动态路由;linux系统中quagga程序包支持多格式的RIP、OSPF和BGP。
通过yum安装quagga
注意:安装前请确认由可靠并配置正确的yum

[root@centos6 ~]# yum -y install quagga

quagga会将运行的脚本文件存放在/etc/rc.d/init.d/目录下
而/etc/rc.d/init.d/中存放有很多服务的运行脚本
早期linux系统中没有service命令,都是靠直接运行脚本来完成服务的管理的
所以我们有时管理某些服务如autofs可以由如下操作
Linux网络配置基础二(网络模块与nmcli命令)

我们现在需要启动ospfd服务来开启使用vtysh命令
注意:开启sopfd服务之前要先将quagga的相关配置文件新建一下
Linux网络配置基础二(网络模块与nmcli命令)

然后开启ospfs服务
Linux网络配置基础二(网络模块与nmcli命令)
然后就可以运行vtush命令进入类似思科管理界面,配置管理路由了
Linux网络配置基础二(网络模块与nmcli命令)

netstat命令

netstat命令显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组等Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
但是此命令有些过时并且相较于相同功能但更新的ss命令来说,在运行时对于资源的占用更多,所以推荐使用ss命令
常用语法格式:
显示网络连接:
netstat [–tcp|-t] [–udp|-u] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]
选项:
-t: tcp协议相关
-u: udp协议相关
-w: raw socket(裸套接字)相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口;
-e:扩展格式
-p: 显示相关进程及PID

常用组合:
-tan, -uan, -tnl, -unl
Linux网络配置基础二(网络模块与nmcli命令)
Linux网络配置基础二(网络模块与nmcli命令)

显示路由表:
netstat {–route|-r} [–numeric|-n]
-r: 显示内核路由表
-n: 数字格式

[root@localhost ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags   MSS Window  irtt Iface
0.0.0.0 10.1.0.10.0.0.0 UG0 0  0 eno16777736
10.1.0.00.0.0.0 255.255.0.0 U 0 0  0 eno16777736
192.168.122.0   0.0.0.0 255.255.255.0   U 0 0  0 virbr0

显示接口统计数据:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]
查看所有端口
netstat -i
ifconfig
查看指定端口
netstat –I=IFACE
ifconfig -s eno16777736
Linux网络配置基础二(网络模块与nmcli命令)
信息列:
Iface:接口
MTU:数据包大小
OK/接收发送数据包正常
ERR/接收发送数据包报错
DRP/接收发送数据包抛弃
OVR/接收发送数据包过载

ss命令

ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。
但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。当服务器维持的连接达到上万个的时候,,用ss节省时间。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag和netlink。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
标准使用格式:
ss [options] [ FILTER ]
选项:
-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字(网络连接);
-l:显示处于监听状态(LISTEN)的套接字网路连接;
-o:显示计时器信息(TCP定时器x);
-e:扩展的信息
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-s:连接统计
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字(等同于 -A tcp);
-u:只显示udp套接字(等同于 -A udp);
-d:只显示DCCP套接字(等同于 -A dccp);
-w:仅显示RAW套接字(等同于 -A raw);
-x:仅显示UNIX域套接字(等同于 -A unix)。

常用组合:
-tan, -tanl, -tanlp, -uan
常用用法:
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -s 列出当前socket详细信息

显示信息项
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常见状态:
tcp finite state machine:
LISTEN: 监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED

支持过滤
EXPRESSION:
dport =
sport =
示例:’ ( dport = :ssh or sport = :ssh )’
显示所有已建立的ssh连接
ss -o state established '( dport = :ssh or sport = :ssh)'
显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport =:http )'

网络配置文件

使用命令进行的配置网络多数只是临时生效,永久生效则要配置相关文件
IP、 MASK、 GW、 DNS相关配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE

路由相关的配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE
相关行:
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备的MAC地址
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
NM_CONTROLLED: NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的惟一标识
IPADDR:指明IP地址
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中(设置为no,则当IP自动获取时,dns手动配置)

/etc/sysconfig/network-scripts/route-IFACE
注意:需service network restart 生效
配置route-IFACE两种风格:
(1) TARGET via GW
如: 10.0.0.0/8 via 172.16.0.1
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
示例:
route add -net 192.168.0.0/24 gw 172.16.0.2 dev eth1
可以在
/etc/sysconfig/network-scripts/route-eth1文件(没有手动创建)中
192.168.0.0/24 via 172.16.0.2
10.0.0.0/8 via 172.16.0.2

ADDRESS1=192.168.0.0
NETMASK1=255.255.255.0
GATEWAY1=172.16.0.2

ADDRESS2=10.0.0.0
NETMASK2=255.0.0.0
GATEWAY2=172.16.0.2

本地解析器host
解析器执行正向和逆向查询/etc/hosts
本地主机名数据库和IP地址的映像
对小型独立网络有用
通常,在使用DNS前检查
getent hosts 查看/etc/hosts 内容
格式:IP 域名
例如:
192.168.0.1 www.baidu.com

DNS域名解析
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
/etc/nsswitch.conf
与/etc/hosts相比优先于DNS
正解: FQDN–>IP
# dig -t A FQDN
# host -t A FQDN
反解: IP–>FQDN
# dig -x IP
# host -t PTR IP

正常情况下本地解析器host的优先级高于DNS,但是在linux中可以通过修改/etc/nsswitch.conf
Linux网络配置基础二(网络模块与nmcli命令)
Linux网络配置基础二(网络模块与nmcli命令)

说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt

网卡名称

rhel6之前,网络接口使用连续号码命名: eth0、 eth1等,当增加或删除网卡时,名称可能会发生变化
rhel7使用基于硬件,设备拓扑和设置类型命名:
(1) 网卡命名机制systemd对网络设备的命名方式
(a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1
(b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1
(c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
(d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
(e) 上述均不可用时,则使用传统命名机制

基于BIOS支持启用biosdevname软件
内置网卡: em1,em2
pci卡: pYpX (Y:slot插槽 ,X:port接口)
(2) 名称组成格式
en: Ethernet 有线局域网
wl: wlan 无线局域网
ww: wwan无线广域网
名称类型:
o: 集成设备的设备索引号
s: 扩展槽的索引号
x: 基于MAC地址的命名
ps: enp2s1

网卡设备的命名过程:
第一步:
udev
辅助工具程序/lib/udev/rename_device
/usr/lib/udev/rules.d/60-net.rules
第二步:
biosdevname 会根据/usr/lib/udev/rules.d/71-biosdevname.rules
第三步:
通过检测网络接口设备,根据
/usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD
ID_NET_NAME_SLOT
ID_NET_NAME_PATH

CentOS6网卡名称
eth#(0,1,2,….)
CentOS7网卡名称
eno16777736
eno########
CentOS7以前网卡名称有时会因为物理网卡的变动而发生变化(例如原先eth0,添加一块新网卡就变成eth1,但是配置文件没有改变,所以并不稳定)因此7以后改为eno########的命名方式
但是我们在有些时候希望使用传统的命名方式的名称,则可以如下操作:

使用传统命名方式:
(1) 编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="rhgb quiet"后面添加net.ifnames=0即:
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
Linux网络配置基础二(网络模块与nmcli命令)
(2) 为grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
Linux网络配置基础二(网络模块与nmcli命令)
(3) 重启系统

由于grub2-mkconfig -o /etc/grub2.cfg是按照/etc/default/grub为模板更新/etc/grub2.cfg,而/etc/grub2.cfg其实是/boot/grub2/grub.cfg的符号链接文件所以可以直接修改–>/boot/grub2/grub.cfg已达到上面1、2操作
Linux网络配置基础二(网络模块与nmcli命令)
注意:此处由两个linux16的行,另外一个是救援系统的!而且其它信息不要乱动,因为是内核参数,如果乱动会造成无法启动的后果

以上操作针对所有网卡的名称,但是网卡各自对应的配置文件名和当中的命名选项没有改动,需要额外手动设置。

注意:建议生产环境下还是使用稳定的默认命名方式

nmcli命令

地址配置工具: nmcli
推荐在CentOS7上使用,6上不建议
注意:NeworkManager是管理和监控网络设置的守护进程,运行此命令需要NetworkManager服务开启
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device – show and manage network interfaces
nmcli device help
connection – start, stop, and manage network connections
nmcli connection help
修改IP地址等属性:
#nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway ipv4.dns1 ipv4.method manual | auto
修改配置文件执行生效:
systemctl restart network重启服务

nmcli con reload重新加载配置文件

nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
示例:
Linux网络配置基础二(网络模块与nmcli命令)
connection可以简写
注意:图中的名称对应于/etc/sysconfig/network-scripts/ifcfg-###网卡文件中的“NAME=”这一项,修改此项就可以修改名称

设备即网络接口,连接是对网络接口的配置。一个网络接口
可有多个连接配置,但同时只有一个连接配置生效。
显示所有包括不活动连接

[root@localhost ~]# nmcli connection show
名称UUID  类型设备   
eth0ab4ee136-d703-4d37-9339-085beec3e181  802-3-ethernet  eth0   
eth150f31347-a405-47c5-b4d3-c52e79ecdcf1  802-3-ethernet  -- 
eth0e44ae173-22c3-479b-a2be-16df771e9ce7  802-3-ethernet  -- 
eth1df090843-cd20-470b-8126-dbbc9a89fe16  802-3-ethernet  eth1   
virbr0  8a92c72b-3520-4a69-bc3d-2b467a17558e  bridge  virbr0

显示所有活动连接

[root@localhost ~]# nmcli connection show --active 
名称UUID  类型设备   
eth0ab4ee136-d703-4d37-9339-085beec3e181  802-3-ethernet  eth0   
eth1df090843-cd20-470b-8126-dbbc9a89fe16  802-3-ethernet  eth1   
virbr0  8a92c72b-3520-4a69-bc3d-2b467a17558e  bridge  virbr0

显示网络连接配置
nmcli connection show "网卡名称" 显示当前对应网卡的详细信息

[root@localhost ~]# nmcli connection show "eth1"
connection.id:  eth1
connection.uuid:50f31347-a405-47c5-b4d3-c52e79ecdcf1
connection.interface-name:  eth1
connection.type:802-3-ethernet
...
GENERAL.MASTER-PATH:--
IP4.地址[1]:10.1.253.94/16
IP4.地址[2]:10.1.249.44/16
IP4.网关:   10.1.0.1
IP4.路由器[1]:  dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1003
IP4.DNS[1]: 10.1.0.1
IP4.域[1]:  magedu.com
DHCP4.选项[1]:  requested_ms_classless_static_routes = 1
...
DHCP4.选项[30]: dhcp_server_identifier = 10.1.0.1
IP6.地址[1]:fe80::20c:29ff:fe43:6497/64
IP6.网关:

显示设备状态
nmcli dev status

[root@localhost ~]# nmcli dev status
设备类型  状态CONNECTION 
virbr0  bridge连接的  virbr0 
eth0ethernet  连接的  eth0   
eth1ethernet  连接的  eth1   
lo  loopback  未管理  -- 
virbr0-nic  tap   未管理  --

显示网络接口属性
nmcli dev show eth1

[root@localhost ~]# nmcli dev show eth1
GENERAL.设备:   eth1
GENERAL.类型:   ethernet
GENERAL.硬盘:   00:0C:29:43:64:97
GENERAL.MTU:1500
GENERAL.状态:   100 (连接的)
GENERAL.CONNECTION: eth1
GENERAL.CON-PATH:   /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.容器:  开
IP4.地址[1]:10.1.253.94/16
IP4.地址[2]:10.1.249.44/16
IP4.网关:   10.1.0.1
IP4.路由器[1]:  dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1003
IP4.DNS[1]: 10.1.0.1
IP4.域[1]:  magedu.com
IP6.地址[1]:fe80::20c:29ff:fe43:6497/64
IP6.网关:

创建新连接default, IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0
示例:

[root@localhost ~]# nmcli connection add con-name home type ethernet ifname eth1 autoconnect no

[root@localhost ~]# nmcli connection add con-name office type ethernet ifname eth1 autoconnect no

创建新连接static ,指定静态IP,不自动连接
nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ip4 172.25.X.10/24 gw4 172.25.X.254
示例:

[root@localhost ~]# nmcli connection add con-name home type ethernet ifname eth1 autoconnect yes ip4 10.1.100.100/24 gw4 10.1.0.254

[root@localhost ~]# nmcli connection add con-name office type ethernet ifname eth1 autoconnect yes ip4 10.1.100.200/24 gw4 10.1.0.254

注意:以上命令执行过程中会自动生成/etc/sysconfig/network-scripts/ifcfg-,并且相关内容已经添加进文件内部,无论其dhcp还是固定的
Linux网络配置基础二(网络模块与nmcli命令)
Linux网络配置基础二(网络模块与nmcli命令)
但是要想启用或切换对应配置需要运行如下命令:
nmcli connection up home

[root@localhost ~]# nmcli connection up home
#或切换office配置
[root@localhost ~]# nmcli connection up office

删除对应网卡配置连接
nmcli con del default
示例:

[root@localhost ~]# nmcli connection delete home

注意:此删除操作会删除对应网卡的配置文件

查看帮助
nmcli con add help
修改连接设置
nmcli con mod “static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16

修改连接配置后,需要重新加载配置
nmcli con reload
nmcli con down “system eth0” 可被自动激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用网卡,访止被自动激活

Linux网络配置基础二(网络模块与nmcli命令)

图形工具
nm-connection-editor

网络组Network Teaming

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现.
多种方式runner
broadcast(广播)
roundrobin(轮流)
activebackup(活动备份)
loadbalance(负载均衡)
lacp (implements the 802.3ad Link Aggregation Control Protocol)链路聚合控制协议:需要汇聚层交换机支持

网络组
启动网络组接口不会自动启动网络组中的port接口
启动网络组接口中的port接口不会自动启动网络组接口
禁用网络组接口会自动禁用网络组中的port接口
没有port接口的网络组接口可以启动静态IP连接
启用DHCP连接时,没有port接口的网络组会等待port接口的加入

创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]
CNAME 连接名, INAME 接口名
JSON 指定runner方式
格式: '{"runner": {"name": "METHOD"}}'
METHOD 可以是broadcast, roundrobin,
activebackup, loadbalance, lacp

示例:

[root@localhost ~]# nmcli connection add con-name team0 type team ifname team0 config '{"runner"{"name":"activebackup"}}'

创建port接口
nmcli con add type team-slave con-name CNAME
ifname INAME master TEAM
CNAME 连接名
INAME 网络接口名
TEAM 网络组接口名
连接名若不指定,默认为team-slave-IFACE
示例:

[root@localhost ~]# nmcli connection add con-name team0 -eth1 type team-slave ifname eth1 master team0 
[root@localhost ~]# nmcli connection add con-name team0 -eth2 type team-slave ifname eth2 master team0

然后配置team0网络组的ip地址
设置IP
# nmcli con mod team0 ipv4.addresses 192.168.1.100/24
设置固定IP模式
# nmcli con mod team0 ipv4.method manua

INAME 设备名 CNAME 网络组接口名或port接口

对应生成以下文件
管理网络组配置文件
# /etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.25.5.100
PREFIX0=24
NAME=team0
网络组成员文件(一个或多个)
# /etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes
ONBOOT=yes

启用网络组
# nmcli con up team0
# nmcli con up team0-eth1
# nmcli con up team0-eth2
查看网络组状态
#teamdctl team0 state

使用nmcli命令配置主机名
rhel6之前主机名配置文件: /etc/sysconfig/network
rhel7.0主机名配置文件:/etc/hostname ,默认没有这个文件, 通过DNS反向解析获取主机名, 主机名默认为:localhost.localdomain
显示主机名信息
hostname
hostnamectl status

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostnamectl status 
   Static hostname: localhost.localdomain
 Icon name: computer-vm
   Chassis: vm
Machine ID: 6bac7ebde6464025ad032e7509ed872a
   Boot ID: da759007bf444c96bb86ed3148c68888
Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
   CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
  Architecture: x86-64

创建并修改文件并生效
hostnamectl set-hostname HOSTNAME
立刻生效而且对应配置文件/etc/hostname也会更改
删除文件,恢复主机名localhost.localdomain

DNS设置,存放在/etc/resolv.conf文件中
PEERDNS=no 表示当IP通过dhcp自动获取时, dns仍是手动设置,不自动获取。等价于下面命令:
nmcli con mod “system eth0” ipv4.ignore-auto-dns yes

测试网络
在命令行下测试网络的连通性
测试网络连通性
ping
mtr
显示正确的路由表
ip route
确定名称服务器使用:
nslookup
host
dig
跟踪路由
traceroute
Tracepath

网络客户端工具
lftp, ftp, lftpget, wget
# lftp [-p port] [-u user[,password]] SERVER
子命令:
get、 mget(下载多个文件)、 ls、 help、lcd(跳转目录)、passive模式切换
# ftp
# lftpget URL [URL…](非交互式下载一个地址一个文件(支持多地址))
lftpget ftp://10.1.0.1/pub….iso
# wget(支持下载ftp或http资源)
wget [option]… [URL]…[DIR]
-q: 静默模式
-c: 断点续传
-O: 保存位置
–limit-rates=: 指定传输速率

注意:
!COMMAND:表明在本机运行
COMMAND:表明在ftp服务器上运行

links浏览器
抓取网站文件
links –dump > FILE.txt
抓取网站脚本
links –source

curl浏览器
curl

原创文章,作者:NameLess,如若转载,请注明出处:http://www.178linux.com/45025