万字详解 Linux 网络管理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

万字详解 Linux 网络管理

1.Linux处理数据包过程

当向外界主机发送数据时在它从网卡流入后需要对它做路由决策根据其目标决定是流入本机数据还是转发给其他主机

如果是流入本机的数据则数据会从内核空间进入用户空间(被应用程序接收、处理)。当用户空间响应(应用程序生成新的数据包)时响应数据包是本机产生的新数据在响应包流出之前需要做路由决策根据目标决定从哪个网卡流出

如果不是流入本机的而是要转发给其他主机的则必然涉及到另一个流出网卡此时数据包必须从流入网卡完整地转发给流出网卡这要求Linux主机能够完成这样的转发。但Linux主机默认未开启ip_forward功能这使得数据包无法转发而被丢弃。Linux主机和路由器不同路由器本身就是为了转发数据包所以路由器内部默认就能在不同网卡间转发数据包而Linux主机默认则不能转发

如果Linux主机有多块网卡如果不开启数据包转发功能则这些网卡之间是无法互通的。例如eth0是172.16.10.0/24网段而eth1是192.168.100.0/24网段到达该Linux主机的数据包无法从eth0交给eth1或者从eth1交给eth0除非Linux主机开启了数据包转发功能。🧄

在Linux上开启转发功能有多种方法

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1

在这里插入图片描述

可以使用以下几种方式查看是否开启了转发功能

sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward
sysctl -a | grep ip_forward

值为1代表处于开启状态

在这里插入图片描述

以上两种方法是临时生效的若要永久生效则应该写入配置文件

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf

2.和网络相关的几个文件说明

网卡配置文件ifcfg-*

/etc/sysconfig/network-scripts/目录下有不少文件绝大部分都是脚本类的文件但有一类ifcfg开头的文件为网卡配置文件所有ifcfg开头的文件在启动网络服务的时候都会被加载读取

在这里插入图片描述

现在来看一个实例吧

[root@192 network-scripts]# cat ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7bd71446-6924-4a75-9a06-d27020da1ed8
DEVICE=ens33  # 显示的名称必须/sys/class/net/目录下的某个网卡名相同
ONBOOT=yes
DNS1=114.114.114.114

DNS配置文件/etc/resolv.confCentOS6环境

为了更好的展示DNS配置文件的效果此处采用CentOS6环境实验

该文件用于设置DNS指向以及解析顺序。该文件格式如下

domain  domain_name       # 声明本地域名即解析时自动隐式补齐的域名
search  domain_name_list  # 指定域名搜索顺序(最多6个)和domain不能共存若共存了则后面的行生效
nameserver  IP1           # 设置DNS指向最多3个
nameserver  IP2
nameserver  IP3        
options timeout:n attempts:n  # 指定解析超时时间(默认5秒)和解析次数(默认2次)

例如将/etc/resolv.conf设置为下所示

domain klza.com

在这里插入图片描述

当解析不带点".“的主机名时如"www”认为不是全限定域名将自动加上".klza.com"变成解析"www.klza.com"

[root@xuexi ~]# host -a www
Trying "www.klza.com"
;; connection timed out; trying next origin
Trying "www"
;; connection timed out; no servers could be reached

当解析的名称末尾不带点但中间带了点的如"www.host"认为是全限定域名将直接解析"www.host"解析完这个后再解析加上"klza.com"的名称即再解析"www.host.klza.com"

[root@xuexi ~]# host -a www.host
Trying "www.host"
;; connection timed out; trying next origin
Trying "www.host.klza.com"
;; connection timed out; no servers could be reached

当解析末尾带点的名称时如"www.host.“认为是完整的全限定域名将直接解析"www.host”,解析完后直接结束解析不会再补齐本地域名再解析

[root@xuexi ~]# host -a www.host.
Trying "www.host"
;; connection timed out; trying next origin
Trying "www.host"   # 默认解析两次
;; connection timed out; no servers could be reached

search关键字的作用和domain是一样的只不过search同时还暗含域名搜索的顺序。例如设置search为如下内容

search  aaa.com bbb.com ccc.com

在这里插入图片描述

此时若解析"www.host"将依次解析"www.host",“www.host.aaa.com”“www.host.bbb.com”“www.host.ccc.com

[root@xuexi ~]# host -a www.host
Trying "www.host"
;; connection timed out; trying next origin
Trying "www.host.aaa.com"
;; connection timed out; trying next origin
Trying "www.host.bbb.com"
;; connection timed out; trying next origin
Trying "www.host.ccc.com"
;; connection timed out; no servers could be reached

/etc/services

该文件中记录的是端口和服务的对应关系

在这里插入图片描述


3.网络接口配置和主机名

ifconfig

ifconfig命令是一个接口配置命令但更多的被用来显示已激活的网络接口信息

ifconfig [ interface | -a ]
ifconfig interface options

选项说明
interface指定被操作的网络接口名如eth0
up       激活指定的网络接口如果在命令行中为网络接口分配了IP地址则默认会up
down     将指定的接口设置为down状态
[-]arp   启用或禁用该接口上使用ARP协议如"ifconfig eth0 -arp"
mtu N    设置指定接口的最大传输单元(MTU)
netmask  设置该接口的IP netmask默认会采用A/B/C类地址的掩码位数
address  要分配给该接口的IP地址

实例

ifconfig eth0:1 192.168.100.20 netmask 255.255.255.0 up  # 添加IP地址
ifconfig eth0:1 192.168.100.20/24 up                     # 也可使用CIDR格式掩码
ifconfig eth1 up       # 激活该网络接口
ifconfig eth1 down     # 临时down掉eth1接口
ifconfig eth1 -arp     # 抑制eth1上的arp
ifconfig eth1 arp      # 启用eth1上的arp

ifconfig所有的配置都是应用于内核的所以只会临时生效重启网络服务后会立即失效🧅

ifcfg

ifcfg eth1:0 add 192.168.100.20/24   # 添加一个地址
ifcfg eth1:0 del 192.168.100.20      # 删除一个地址
ifcfg eth1 stop      # 临时禁用eth1

hostname命令

用于设置主机名但也有几个其它好用的功能

hostname [-I] [-f] [-d] [-s] [hostname]

选项说明
-I         获取该主机上所有非环回IP地址该选项不依赖于主机名解析
-f,--fqdn  获取fqdn
-d,--domain获取fqdn的域名部分等价于命令dnsdomainname
-s,--short 获取fqdn的主机名部分严格地说是获取第一个"."前的部分例如"www.baidu.com"将获取为"www"

案例

使用-I选项可以直接获取该主机上的所有IP地址包括别名地址

在这里插入图片描述

hostname修改的主机名为临时生效它修改的其实是/proc/sys/kernel/hostname文件

在这里插入图片描述

要想永久生效修改主机名需要修改配置文件/etc/hostname

echo "klza.com" >/etc/hostname

4.网关/路由

Linux上分为3种路由

  • 主机路由直接指明到某台具体的主机怎么走主机路由也就是所谓的静态路由
  • 网络路由指明某类网络怎么走
  • 默认路由不走主机路由的和网络路由的就走默认路由。操作系统上设置的默认路由一般也称为网关

若Linux上到某主机有多条路由可以选择这时候会挑选优先级高的路由。在Linux中路由条目的优先级确定方式是先匹配掩码位长度再比较管理距离。也就是说掩码位长的路由条目优先级一定比掩码位短的优先级高所以主机路由的优先级最高然后是直连网络(即同网段)的路由(也算是网络路由)随后是网络路由最后才是默认路由。若路由条目的掩码长度相同则比较节点之间的管理距离管理距离短的生效。

例如下面的路由表中若ping 192.168.5.20则先比对192.168.100.78发现无法匹配然后比对192.168.100.0发现也无法匹配接着再匹配192.168.0.0这条网络路由条目发现能匹配所以选择该路由条目

[root@xuexi ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
172.16.10.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.0.0     192.168.100.70  255.255.0.0     UG    0      0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.78  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

再比如下面的路由表。由于两块网卡eth0和eth1都是192.168.100.0/24网段地址所以它们的路由条目在掩码长度的匹配上是相同的但是和eth0直连的网段主机通信时肯定会选择eth0这条路由条目因为eth1和该网段主机隔了一个eth0距离增加了1

[root@xuexi ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     101    0        0 eth1

5.网关/路由相关命令

route命令

route命令用于显示和管理路由表。当使用了add或del选项时route命令将设置路由条目否则route命令将显示路由表

语法说明

route [add/del] [-host/-net/default] [address[/mask]] [netmask] [gw] [dev]

选项说明
add/del增加或删除路由条目
-net增加或删除的是一条网络路由
-host增加或删除的是一条主机路由
default增加或删除的是一条默认路由
netmask明确使用netmask关键字指定掩码要可以不使用该选项直接在地址上使用cidr格式的掩码即IP/MASK。
gw指定下一跳的地址。要求下一跳地址必须是能到达的且一般是和本网段直连的接口。
dev强制将路由条目关联到指定的接口上。一般内核会自动判断路由条目应该关联到哪个网络接口。

要显示路由表信息只需简单的route -n即可其中-n选项表示不解析主机名

在这里插入图片描述

对于CentOS 6以上的系统请忽略MetricRef两列它们已经不被内核使用只是有些路由软件可能会用上🥕

若要管理路由表则使用add或del选项

添加和删除默认路由

route add default gw 192.168.100.10
route del default

添加和删除网络路由

route add -net 172.16.10.0/24 gw 192.168.100.70
route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
# 若实在不知道下一跳给谁那么指定本机接口也是可以的
route add -net 172.16.10.0/24 dev eth0

删除路由可以直接在增加路由的语句上将add改为del关键字

route del -net 172.16.10.0/24 gw 192.168.100.70
route del -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
route del -net 172.16.10.0/24 dev eth0

添加和删除主机路由

route add -host 172.16.10.55 gw 192.168.10.20
route del -host 172.16.100.55

配置永久路由

根据接口创建路由配置文件/etc/syconfig/network-scripts/route-ethX要从那个接口出去X就是几

路由配置文件的配置格式非常简单每一行一个路由条目先是要到达的目标然后是via关键字最后是下一跳地址。要求下一跳必须能到达且一般都和ethX同网段

例如eth0网卡的IP地址是192.168.10.123要通过网卡eth0出去到达10.0.0.10那么下一跳的地址要和eth0的地址在同网段如192.168.10.222

10.0.0.10 via 192.168.10.222

添加主机路由、默认路由、网段路由示例如下

# 默认路由
default     via 192.168.100.1
0.0.0.0/0   via 192.168.100.1

# 网段路由
192.168.10.0/24   via 192.168.100.1

# 主机路由
192.168.100.52/32 via 192.168.100.33

配置在哪个eth文件中就会从哪个接口出去🌰

配置完后重启network服务即可立即生效

配置永久路由时需要注意几点

  • route-ethX的对应网卡配置文件ifcfg-ethX必须存在否则路由无效
  • 如果在文件中配置永久默认路由则必须保证所有使用了DHCP服务的网卡配置文件ifcfg-ethX中的DEFROUTE指令设置为"no"表示DHCP不设置默认路由
  • 如果在route-ethX文件中配置永久路由且该网卡使用了DHCP服务分配地址则必须保证该网卡的ifcfg-ethX文件中的PEERROUTES指令设置为"no"表示DHCP设置的路由允许被覆盖

6.arping命令

arping用于发送arp请求报文解析并获取目标地址的MAC。默认将先发送广播报文收到回复后再发送单播报文局域网内所有主机都能收到广播报文但只有目标主机才会回复自己的MAC地址

发送arp请求报文实际上是另类的ping所以可以探测目标是否存活🥜

语法说明

arping [-fqbDU] [-c count] [-w timeout] [-I device] [-s source] destination
-f : 收到第一个reply就立即退出
-q : 安静模式什么都不输出
-b : 只发送广播不发送单播
-D : 地址冲突检测
-U : 主动更新邻居的arp缓存(Unsolicited ARP mode)
-c count : 发送多少个arp请求包后退出
-w timeout : 等待reply的超时时间
-I device : 使用哪个接口发送请求包。发送arp请求包接口的MAC地址将缓存在目标主机上
-s source : 指定arp请求报文中源地址若发送的接口和源地址不同则目标主机将缓存该地址和接口的MAC地址而非该源地址所在接口的MAC地址
destination : 向谁发送arp请求报文即要获取该IP或主机名的MAC地址

实例1

请求解析192.168.100.70主机的MAC地址

arping -f 192.168.100.70

在这里插入图片描述

这将会发送广播报文直到收到192.168.100.70的回复才退出

实例2

指定发送一个请求报文给192.168.100.70就退出发送报文的接口为eth1并指定请求报文中的源地址为本机eth0接口上的地址192.168.100.54

arping -c 1 -I eth1 -s 192.168.100.54 192.168.100.70

发送这样的arp请求包将会使得目标主机192.168.100.70缓存本机的arp条目为"192.168.100.54 MAC_eth1"但实际上192.168.100.54所在接口的MAC地址为MAC_eth0

arping命令仅能实现这种简单的arp欺骗更多的arp欺骗方法可以使用专门的工具🫘

实例3

探测对方主机是否存活

例如发送4个探测报文有回复就说明对方存活

[root@xuexi ~]# arping -c 4 -I eth0 192.168.100.2  
ARPING 192.168.100.2 from 192.168.100.54 eth0
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.593ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.930ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.868ms
Unicast reply from 192.168.100.2 [00:50:56:E2:16:04]  0.844ms
Sent 4 probes (1 broadcast(s))
Received 4 response(s)

7.ip命令

这是一个极其强大的命令前面所有的网络信息显示和管理的命令都可以由ip命令来替代完成。它是一个严格模式化的命令。

ip addr

ip addr用于管理网络设备上的ip地址也可以查看ip地址的属性信息

ip addr add/del

新增网卡的IP地址

ip addr add 192.168.100.45 dev eth0
ip addr add 192.168.100.35/24 dev eth1

此方式添加的地址不会在ifconfg命令中显示ifconfg能捕捉到的是别名所以可以为地址加上label以让secondary被ifconfig查看到。例如

ip addr add 192.168.100.45 dev eth0 label eth0:0

要删除ip则简单的多

ip addr del 192.168.100.45 dev eth0
ip addr del 192.168.100.35/24 dev eth1

ip addr show

因为ip命令可以缩写所以可以写为下面这几种形式都是正确的写法

ip addr show
ip a show
ip a s
ip a

在这里插入图片描述

ip addr flush

用于批量删除地址该命令其实非常危险一个不小心就会误伤无辜

例如删除eth1上所有地址

ip a flush dev eth1

删除eth1上所有的secondary地址

ip a f secondary dev eth1

ip route

该命令维护和查看内核中的路由表

ip route add/del/change/append/replace

语法格式为

ip route { add | del | change | append | replace } dest[/cidr_mask] [ via ADDRESS ] [ dev STRING ]

其中dest为目标地址可以是主机地址、网段地址一般在地址后都会带上cidr格式的掩码长度不带时默认为32位长度。如果dest为"0/0"或者写为"default"则表示默认路由。

例如添加/修改/替换普通路由

ip route add/change/replace 172.16.10.0/24 via 192.168.10.20

添加/修改/替换默认路由

ip route add/change/replace default via 192.168.10.20
ip route add/change/replace 0/0 via 192.168.100.2

删除某路由

ip route del 172.16.10.0/24
ip route del default   # 删除默认路由

ip route show

列出路由表。

ip r  # 查看本机路由表

在这里插入图片描述

ip route flush

批量删除路由表条目

例如删除由eth1出去的路由条目

ip route flush eth1

删除下一跳为192.168.100.70的路由条目

ip r flush via 192.168.100.70

删除目标为192.168.0.0/16网段的路由

ip route flush 192.168/16

ip route save/restore

用于保存当前的路由表以及恢复路由表。保存路由表时路由表将以二进制裸数据的格式输出也就是看不懂的二进制文件。恢复路由表时要求设备的设置和保存路由表时是一样的恢复时已存在于路由表中的路由条目将被忽略

保存当前路由表当当前目录的route.txt文件

ip route save > route.txt

在这里插入图片描述

恢复路由表

ip route restore < route.txt

ip link

ip link set

该命令用于管理和查看网络接口甚至可以添加虚拟网络接口将网络接口分组进行管理。

语法说明

ip link set DEVICE  { up | down | arp { on | off } | name NEWNAME | address LLADDR }  

选项说明
dev DEVICE指定要操作的设备名
up and down启动或停用该设备
arp on or arp off启用或禁用该设备的arp协议
name NAME修改指定设备的名称建议不要在该接口处于运行状态或已分配IP地址时重命名
address LLADDRESS设置指定接口的MAC地址

例如禁用eth1网卡

ip link set eth1 down

其实等价于

ifconfig eth1 down

修改网卡eth1的MAC地址

ip link set eth1 address 00:0c:29:f3:33:77

ip link show

语法说明

ip [ -s | -h ] link show [dev DEV]  

选项说明
-s将显示各网络接口上的流量统计信息
-h以人类可读的方式显式即单位转换。注"-h"在CentOS 7上才支持。

实例

[root@192 ~]# ip -s -h link show  dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:f1:a6:2b brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    23.7M      19.3k    0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    2.45M      7.94k    0       0       0       0   

本教程基于博客园骏马金龙

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux

“万字详解 Linux 网络管理” 的相关文章