linux的网络篇
一,网卡命令
1,传统网卡命令机制
- 命令规范:
以太网:eth[0,1,2] //有线网络
无线网:Wlan[0,1,2] //无限网络
2,redhat 7网卡命名机制
-
systemd对网络设备的命名方式
a,如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测,则根据此索引进行命名,例如eno1
b,如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1
c,如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
d,如果用户显式启动,也可根据MAC地址进行命名,例如enx2387a1dc56
e,上述均不可用时,则使用传统命名机制 -
上述命名机制中,有的需要biosdevname程序的参与。所以必须安装biosdevname程序且启用它。
3,网络接口名称组成格式
- 基于固件,设备结构,设备类型
- 有两个字母开头表示固件
a,以太网网卡以 en 开头
b,无线网卡以 wl 开头 - 设备结构
o:主板上集成的设备的设备索引号
s:扩展槽的索引号
x:基于MAC地址的命名
ps:基于物理位置拓扑的命名。如enp2s1,表示PCI总线上第2个总线的第1个插槽的设备索引号
4,让设备回归传统的命令—便于管理
第一步;修改网卡配置文件
- [root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# mv ifcfg-ens33 ifcfg-eth0
//网卡配置文件重命名。第一步
[root@localhost network-scripts]# vim ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0 //此处要把ens33改成eht0
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth0 //此处要把ens33改成eth0
ONBOOT=yes
第二步,修改文件,添加内容
- //编辑/etc/default/grub配置文件,在以GRUB_CMDLINE_LINUX开头的行内rhgb的前面加上net.ifnames=0 biosdevname=0
[root@localhost ~]# vim /etc/default/grub //第二步,修改文件,添加内容
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=" ( s e d ′ s , r e l e a s e . ∗ (sed 's, release .* (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=rhel/root rd.lvm.lv=rhel/swap net.ifnames=0 biosdevname=0 rhgb quiet”
GRUB_DISABLE_RECOVERY="true"
第三步,通过刚修改的配置文件直接写入系统
- //为grub2生成其配置文件
[root@localhost ~]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file …
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fd0bcf5782d24ba5b903b175c35f328e
Found initrd image: /boot/initramfs-0-rescue-fd0bcf5782d24ba5b903b175c35f328e.img
Done
第四步,重启系统
- [root@localhost ~]# reboot
再次登陆后通过ip a查看网卡信息就是eth0了
二,网络管理命令
1,ifconfig
- //查看当前处于活动状态的所有网络接口
- //仅查看eth0网卡状态
- //查看所有网卡状态信息, 包括禁用和启用
- //网卡配置信息含义如下:
UP: | 网卡处于活动状态 |
---|---|
BROADCAST: | 支持广播 |
RUNNING: | 网线已接入 |
MULTICAST: | 支持组播 |
MTU: | 最大传输单元(字节),即此接口一次所能传输的最大封包 |
inet: | 显示IPv4地址行 |
inet6: | 显示IPv6地址行 |
link/enther: | 指设备硬件(MAC)地址 |
txqueuelen: | 传输缓存区长度大小 |
RX packets: | 接收的数据包 |
TX packets: | 发送的数据包 |
errors: | 总的收包的错误数量 |
dropped: | 由于各种原因, 导致拷贝在内存过程中被丢弃 |
collisions: | 网络信号冲突情况, 值不为0则可能存在网络故障 |
2,ip网络管理命令:面向对象管理命令(object)
-
//语法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT(对象类型):
link:网络接口属性
addr:协议地址
route:路由 -
使用方法 ip命令+选项或者对象+操作命令 增删改+dev 设备对象 eth0网卡
-
1, //查看网络接口所有地址
-
2,//显示报文统计信息
-
3 //启用或禁用网络接口ip link set DEV {up|down}
-
[root@localhost ~]# ip link set lo down
-
[root@localhost ~]# ip link set lo up
-
//ip addr add ADDRESS dev DEV:添加IP地址
-
//ip addr del ADDRESS dev DEV:删除IP地址
[root@localhost ~]# ip addr del 192.168.1.1/24 dev eth0
[root@localhost ~]# ip addr show eth0
-
//ip addr show DEV:查看网络接口的地址
[root@localhost ~]# ip addr show eth0
-
-
3 route
-
Linux主机之间是使用IP进行通信, 假设A主机和B主机同在一个网段内且网卡都处于激活状态, 则A具备和B直接通信的能力, 但如果A主机和B主机处于两个不同的网段, 则A必须通过路由器才能和B通信, 路由器属于IT设备的基础设施, 每一个网段都应该至少有一个网关
-
1,//查看当前路由表
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
172.16.12.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 -
2,//以数字方式显示各主机或端口等相关信息
[root@localGhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.12.2 0.0.0.0 UG 100 0 0 ens33
172.16.12.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 -
3,//增加路由
-
//语法:route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
-
//增加网段路由
[root@localhost ~]# route add -net 172.16.12.0/24 gw 172.16.12.2 dev eth1
[root@localhost ~]# route add -net 0.0.0.0/0 gw 172.16.12.2 dev eth1 -
//增加主机路由
[root@localhost ~]# route add -host 172.16.12.128 gw 172.16.12.2
-
//删除路由
[root@localhost ~]# route del -net 172.16.12.0/24
[root@localhost ~]# route del -net 0.0.0.0/0 gw 172.16.12.2
-
-
-
4 hostname与hostnamectl
-
生产环境中必须配置主机名,同时主机名也需要遵循一定的规范, 比如:
-
公有云: 地区-项目-业务-服务-节点-地址
wh-shop-register-nginx-node1-192.168.56.13
wh-med-pay-mysql-master01-192.168.56.11
wh-med-pay-mysql-slave01-192.168.56.12-
//hostname查看主机名
[root@localhost ~]# hostname
localhost.localdomain -
//hostname临时修改主机名
[root@localhost ~]# hostname wangqing
[root@localhost ~]# cat /etc/hostname
localhost.localdomain -
//注意:修改主机名后需要重新登录用户才会显示效果
//rhel7/8系统建议使用hostnamectl修改和查看主机名 -
//设定永久名称
[root@localhost ~]# hostnamectl set-hostname seancheng
[root@localhost ~]# cat /etc/hostname
seancheng -
//查看主机信息
[root@localhost ~]# hostnamectl
-
注意:
在Linux中以命令方式修改网络配置只在当前状态有效,重启后将失效,故若想使修改的配置重启后依然有效,则必须编辑配置文件进行配置的修改
-
-
3,网络相关配置文件
1,网络配置文件
- //网络配置文件:/etc/sysconfig/network
NETWORKING={yes|no}:设定整个系统是否启用网络功能,若设为no,则不论网卡如何设置都不能使用网络功能。
HOSTNAME:设置主机名
2,网络接口配置文件
-
网络接口即网卡,其配置文件的路径是/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
- [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=static
NAME=eth1
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.12.130
NETMASK=255.255.255.0
GATEWAY=172.16.12.2
DNS1=172.16.12.2
- [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
-
//网卡配置说明
//参数 | 说明 |
---|---|
BOOTPROTO=none | //引导协议,可选值有{static|none|dhcp|bootp}。如果要使用静态地址,使用static或none都可以 |
NM_CONTROLLED | //NM是NetworkManager的简写,NM是由RHEL研发的在RHEL6中取代network脚本来实现网络管理、配置的服务脚本 |
//可选值有{ yes | no } | |
//此项是设定此网卡是否接受NM控制。CentOS6建议设为“no” | |
TYPE | //接口类型。常见的接口类型有:Ethernet,Bridge |
UUID | //设备的惟一标识(网卡的唯一标识) |
HWADDR | //硬件地址,要与硬件中的地址保持一致,可省(也就是mac地址Hardware) |
IPADDR=172.16.12.130 | //固定IP地址 |
PREFIX=24 | //子网掩码 |
NETMASK=255.255.255.0 | //子网掩码 |
GATEWAY=172.16.12.2 | //默认网关 |
DNS1=172.16.12.2 | //第一个DNS服务器指向 |
DNS2 | //第二个DNS服务器指向 |
DNS3 | //第三个DNS服务器指向 |
DEVICE=eth1 | //关联的设备名称,要与文件名的后半部"INTERFACE_NAME"保持一致 dev eth0 操作的设备 |
NAME=“eth1” | //连接名称 |
ONBOOT=yes | //在系统引导时是否自动激活此网络接口,可选值有{ yes | no } |
DEFROUTE=yes | //将接口设定为默认路由[yes |
USERCTL={yes | no} |
PEERDNS={yes | no} |
-
control打开控制面板/notepad打开记事本
-
配置dncp模式可以精简配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201027121354413.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xCSjE5MjI0,size_16,color_FFFFFF,t_70#pic_center)
-
设置静态ip最少需要9行。
-
重启网卡的方法ifdown eth0;ifup eth0 down后面必须跟着分号然后ifup启用网卡。(ifconfig 是net-tool软件工具包中,需要通过dnf安装)
3,路由配置文件
-
路由配置文件的路径是/etc/sysconfig/network-scripts/route-INTERFACE_NAME
-
//添加格式一:DEST via NEXTHOP
[root@localhost ~]# vi /etc/sysconfig/network-scripts/route-ens33
172.16.12.0/24 via 172.16.12.2
-
//添加格式二:
[rootg@localhost ~]# vi /etc/sysconfig/network-scripts/route-ens33
ADDRESS0=172.16.12.0
NETMASK0=255.255.255.0
GATEWAY0=172.16.12.2
-
4 DNS配置文件
- DNS配置文件的路径是/etc/resolv.conf
[root@localhost ~]# vi /etc/resolv.conf
nameserver DNS_IP_1
nameserver DNS_IP_2
nameserver DNS_IP_3
四. NetworkManager管理网络
-
1,RHEL/CentOS7系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。
-
2,NetworkManager提供的命令行和图形配置工具对网络进行设定, 设定保存的配置文件在/etc/sysconfig/network-scripts目录下, 工具有 nmcli, nmtui, nm-connection-editor
-
3,device物理设备, 例如 ens33,enp2s0,virbr0,team0
-
4,connection连接设置, 具体网络配置方案
-
1.不同的网络连接配置可以应用到相同的物理设备,但物理设备同一时间只能应用其中某个网络连接
-
2.针对物理网络接口, 设定不同的网络连接, 在不同的使用环境中激活相应的网络连接,就可以实现网络配置信息的自动切换了
使用nmcli命令查看设备以及连接情况-
//查看设备状态
[root@localhost ~]# nmcli device
-
//查看指定设备的详细状态
[root@localhost ~]# nmcli device show ens33
-
//查看连接状态
[root@localhost ~]# nmcli connection
-
//查看所有活动的连接
NAME UUID TYPE DEVICE
ens33 03be31f5-a3c1-4f8d-88b3-aea6e85c869f 802-3-ethernet ens33
//查看指定设备连接的详细情况
-
-
五. 使用原生network管理网络
- CentOS/RHEL的网络配置文件默认目录为/etc/sysconfig/network-scripts
- 默认第一块物理网卡配置文件为ifcfg-eth0, 如果有第二块物理网卡, 配置文件则为ifcfg-eth1以此类推。 注意: 如果新增物理网卡没有配置文件,可选择复制系统默认的进行修改。
-
//设置NetworkManger开机不启动, 同时停止NetworkManger服务
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# systemctl stop NetworkManager -
//添加一块物理网卡, 然后新增网络连接配置文件
//复制配置eth0配置文件为eth1
[root@localhost ~]# cp /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-eth1} -
//编辑网卡配置文件
- //重启network网络服务加载网络并设置开机启动
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl enable network
- //重启network网络服务加载网络并设置开机启动
-
六. 网络检测工具与故障排查
1 ping 测试网络连通性;
- ping命令的目的在于测试另一台主机是否可达, 如果ping不到某台主机,就说明对方主机已经出现了问题, 但是不排除由于链路中的防火墙、ping被丢弃等原因造成ping不通的情况
- //ping命令常用选项:
-c 指定ping的次数
-I 指定ping包的发送间隔
-w 如果ping没有回应, 则在指定超时时间后退出
- //ping命令常用选项:
2 host与nslookup(域名解析命令)
-
host/nslookup命令用于查询DNS记录
-
[root@localhost ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 119.75.216.20
www.a.shifen.com has address 119.75.213.61- [root@localhost ~]# nslookup www.baidu.com
Server: 172.16.12.2
Address: 172.16.12.2#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 119.75.213.61
Name: www.a.shifen.com
Address: 119.75.216.20 - 正向解析和反向解析(反向解析域名通过host命令无法解析)
- [root@localhost ~]# nslookup www.baidu.com
-
3 netstat
- netstat用于查看网络状态
-
//显示路由表
[root@seancheng ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
172.16.12.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 -
//以数字方式显示路由表
[root@seancheng ~]# netstat -rn
-
//显示建立的tcp连接
[root@seancheng ~]# netstat -t
-
//显示udp连接
-
//显示监听状态的连接
[root@seancheng ~]# netstat -l
-
//显示监听指定的套接字的进程的进程号及进程名
[root@seancheng ~]# netstat -p
-
//显示所有状态的连接
[root@seancheng ~]# netstat -a
-
//常用选项(通常可以连用)
查看所有的侦听tcp端口以及进程号 -antlp
[root@seancheng ~]# netstat -antlp
-
4 ss
-
ss是一种网络状态查看工具,取代netstat(选项和netstat几乎一致)
-
//语法:ss [options] [ FILTER ]
- //常用的options:
-t: | tcp协议相关 |
---|---|
-u: | udp协议相关 |
-w: | 裸套接字相关 |
-x: | unix套接字相关 |
-l: | listen状态的连接 |
-a: | 所有 |
-n: | 数字格式 |
-p: | 相关的程序及pid |
-e: | 扩展的信息 |
-m: | 内存用量 |
-o: | 显示计时器信息 |
//常见的FILTER:
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
如:ss -tan state ESTABLISHED
文件的状态
LISTEN侦听状态。
ESTABLISHED,启用的状态。
TIME-WAIT;等待的状态。
-
//常见的state:
//tcp finite state machine:有限状态机
LISTENING:监听
ESTABLISHED:已建立的连接 -
//EXPRESSION:
dport =
sport =
示例:’( dport = :ssh or sport = :ssh)’,此处的ssh也即服务名可以使用其对应的端口号代替,等号两边必须有空格- 可以通过源目IP提取出自己需要的端口信息。
- 可以通过源目IP提取出自己需要的端口信息。
-
//常用组合:
-
[ root@seancheng ~]# ss -tan
-
[root@seancheng ~]# ss -tanl
-
[root@seancheng ~]# ss -antlp
-
[root@seancheng ~]# ss -anu
-
//常见端口
http 80/tcp
https 443/tcp
ssh 22/tcp
ftp 20,21/tcp
mysql 3306/tcp
rsync 873/rsync
redis 6379/tcp
小练习
1.如何查看系统中每个ip的连接数
使用who命令查看链接中地址的
2.请列出下列服务使用的端口,http,ftp,ssh,telnet,mysql,dns
http:80 ftp:20,21 ssh :22 telnet :23 mysql :1433 dns udp 53端口
3.如何在虚拟机上新增加一块网卡,并配置IP为172.16.0.10,指定网关为172.16.0.1
在n
4.详细描述dns解析过程,以访问www.baidu.com为例
第一步。pingwww.baidu.com 然后通过指定域名的解析服务器解析地址为61.135.169.121,然后访问这个地址,等待服务回应。
5.如何查看系统中运行了多少个进程
ps -aux|wc -l
6.如何查看系统中启动了哪些端口
执行命令ss -antl
7.如何查看是否开启80端口,及查看sshd进程是否存在
ss -antp state ESTABLISHED ‘( sport = :80 or dport = :80 )’
8.列出所有处于监听状态的tcp端口
ss -antl
9.查看所有的端口信息, 包括 PID 和进程名称
ss -antlp