路由的概念与路由器设置(Linux)


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/108940373
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

路由的概念与路由器设置

00. 路由

0.1 路由表的概念

  • 每台主机、路由器都有自己的路由表。路由表决定数据的转发方向,当你要给处于网络边缘的某台主机或者服务器发送数据的时候,那么你就要查看路由表。因为路由表决定着路由的转发方向。当发送数据的时候。主机或者路由要绝对下一条从那个网卡出去,给哪一个IP地址。

    • 可以通过traceroute来了解router的数据包转发方向
      • 不过traceroute是通过icmp数据包来了解数据包转发方向
      • traceroute第一次将TTL设置为1,之后依次发送icmp包,递增TTL的值,来知道数据包的流向
      • 因为有些路由器或者转发设备直接屏蔽了icmp包,所以有些中间数据的流向不可见
  • Linux查看路由表

[root@www ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
  • Linux系统的路由表是由小网络到大网络从上到下排列组成的(当然,路由转发的匹配规则就是从上到下查找,只要查找到符合规则的路由表就直接匹配进行转发,那么则就意味着,路由表是以详细的、小的网段优先匹配。),例如上面的路由表排序从上到下依次是192.168.1.0->169.254.0.0->0.0.0.0,他们的排序规则就是按照小网段到大网段从上到小排序的。最后一个0.0.0.0是默认路由

0.2 路由表产生的情况

  1. 依据网络接口产生ip而存在的路由
  • 首先查看自己服务器的私有ip地址
[root@www ~]  ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:64 errors:0 dropped:0 overruns:0 frame:0
          TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7675 (7.4 KiB)  TX bytes:8833 (8.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
  • 我自己主机的eth0网卡的ip地址为192.168.1.123,所以上面第一条路由表就是根据我主机的eth0这个网卡的IP地址产生的。所以说这个路由是根据主机的网卡的网段所设置的。如:
  • Linux上新加块网卡,然后临时设置网卡的ip地址。
[root@www ~] ifconfig eth1 192.168.238.100 netmask 255.255.255.0 up
  • 现在继续查看路由信息
[root@www ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.238.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0

可以看到多出来了一个192.168.238.0这个网段的路由,其实这个路由就是根据刚才新生成的网卡(配置ip地址后)而出现的路由

  1. 手动或者默认路由(Default Route
  • 你可以使用route这个命令手动给予额外的路由设置,例如默认路由(0.0.0.0/0)就是额外的默认路由。
  • 使用route命令时,最重要的一个概念是你所规划的路由,必须是你的设备eth0或者IP可以直接沟通(broadcast)的情况才行
    • 就是这个路由的下一跳是你的设备可以直接连通的或者和你的IP处于同一网段
route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1 # 以设备( eth0 )为单位 作为到达 192.168.2.0 的出口
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.4.101 # 网关为单位作为 到达 192.168.2.0 的出口
  • 我做一个路由转发的实验,A有两个网卡,分别是192.168.1.0网段的和192.168.4.0网段的,B有三个网卡分别是192.168.1.0网段192.168.2.0192.168.4.0网段,同时B作为路由器负责转发。C有两个网卡分别为192.168.1.0网段和192.168.2.0网段

  • A、B、C、的路由分别为

# A的路由
[root@www ~] route -n          
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.2.0     192.168.4.101   255.255.255.0   UG    0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

# B的路由
[root@www ~]#            route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     102    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 ens36
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 ens35

# C的路由
[root@www ~]# route -n        
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 ens35
192.168.4.0     192.168.2.101   255.255.255.0   UG    0      0        0 ens35

为了防止其他因素影响,我们对3个主机都删除了默认路由,命令route del default,删除某条特定的路由命令为route del -net 192.168.4.0 netmask 255.255.255.0 dev ens35FlagsG非常重要,因为那个G代表使用外部设备作为Gateway的意思。而那个Gateway必须存在于我们的路由环境当中。

  • B配置路由转发功能,修改/etc/sysctl.conf文件,末尾添加net.ipv4.ip_forward = 1
[root@www ~]# vim /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
# 执行 sysctel -p 加载配置文件,使路由转发生效
[root@www ~]# sysctl -p
net.ipv4.ip_forward = 1
  • 实验ApingC192.168.2.0网段的主机
[root@www ~] ping 192.168.2.100
PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
64 bytes from 192.168.2.100: icmp_seq=1 ttl=63 time=1.62 ms
64 bytes from 192.168.2.100: icmp_seq=2 ttl=63 time=0.423 ms
^C
--- 192.168.2.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1785ms
rtt min/avg/max/mdev = 0.423/1.025/1.628/0.603 ms
[root@www ~] ping 192.168.2.101
PING 192.168.2.101 (192.168.2.101) 56(84) bytes of data.
64 bytes from 192.168.2.101: icmp_seq=1 ttl=64 time=0.224 ms
64 bytes from 192.168.2.101: icmp_seq=2 ttl=64 time=0.325 ms
64 bytes from 192.168.2.101: icmp_seq=3 ttl=64 time=0.204 ms
^C
--- 192.168.2.101 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2556ms
rtt min/avg/max/mdev = 0.204/0.251/0.325/0.052 ms

可以看到ping不同的网段ping通了

  1. 动态路由
  • 除了上面这两种可以直接使用命令的方法来增加路由规则之外,还有一种可以通过路由器与路由器之间的协商以实现动态路由的环境。不过这需要i额外的软件支持:zebra或者Quagga

  • 事实上,Linux的路由规则都是通过内核来实现的,所以这些路由表的规则都是在内核功能中,也就是运行在内存中。


0.3 IP alias,虚拟网卡,实现一个网卡绑多个IP

  • 一个网卡模拟出一个虚拟接口,使同一个网卡具有多个IP,具有多个IP的功能就被称之为IP Alias

  • 虚拟网卡接口eth:0的设备可以通过ifconfigip这两个命令来实现,下面我们来看看ifconfigip这两个命令的介绍


0.3.1 ifconfig
0.3.1.1 功能说明
  • ifconfig命令用于配置网卡IP地址等网络参数或显示当前网络的接口状态,其类似于Windows下的ipconfig命令,这两个命令很容易混淆。

  • ifconfig命令在配置网卡信息时必须以root的身份来执行

  • 如果没有ifconfig命令,那么则需要安装一下,安装命令yum -y install net-tools


0.3.1.2 语法格式
ifconfig [interface] [option]
  • [interface]代表网络接口名,网络接口名下Centos6下为eth0eth1lo等,分别对应于第一块网卡,第二块网卡,回环接口
  • 如果只键入ifconfig命令,那么则显示所有网卡信息(包括回环接口和网卡虚拟接口)。
  • 如果键入ifconfig [interface],那么则显示具体的某个对应网卡的信息
  • ifconfig配置命令,只会临时生效,重启网卡、网络服务、或主机。其配置就会失效
  • 要想永久修改网卡的网络配置信息,则需要去/etc/sysconfig/network-scripts/目录下,修改对应的配置文件

  • 关于网卡的硬件信息文件位于/etc/udev/rules.d/70-persistent-net.rules下(该文件对应着网卡名和网卡的mac地址),如果Linux增加新的网卡,该文件上会记录着新增的网卡名和对应的mac地址。然后你需要根据该信息在/etc/sysconfig/network-scripts/下创建对应的网卡的IP信息。实现添加网卡,永久配置网络地址目的。

  • 我下虚拟机上添加一张网卡,然后配置网卡的网络信息
# 可以看到虽然新增加了一块网卡,但是虚拟机里面没有对应网卡的配置信息
[root@www ~]  ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:566 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:95897 (93.6 KiB)  TX bytes:106631 (104.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# 查看网卡的主配置文件
[root@www ~] cat /etc/udev/rules.d/70-persistent-net.rules  
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ce:89:dc", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ce:89:e6", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# 进入到 /etc/sysconfig/network-scripts/ 目录下
[root@www ~] cd /etc/sysconfig/network-scripts/

[root@www network-scripts] cp ifcfg-eth0 ifcfg-eth1

# 编辑配置文件, 将刚才在 /etc/udev/rules.d/70-persistent-net.rules 上看到的网卡名字和 网卡mac地址,复制到这个文件上的配置 项
[root@www network-scripts] vim ifcfg-eth1         
DEVICE=eth1  # 网卡名 对应与  /etc/udev/rules.d/70-persistent-net.rules eth1 的名字
HWADDR=00:0c:29:ce:89:e6  # mac 地址名字  对应于  /etc/udev/rules.d/70-persistent-net.rules eth1 的mac地址
HOSTNAME=node3
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static  # 静态 ip地址
IPADDR=192.168.4.100  
NETMASK=255.255.255.0
GATEWAY=192.168.4.101
DNS2=114.114.114.114
DNS1=8.8.8.8
USERCTL=no
PEERDNS=yes
IPV6INIT=no

# 再次查看 eth1 的配置信息
[root@www network-scripts] ifconfig eth1          
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:243 (243.0 b)  TX bytes:636 (636.0 b)

0.3.1.3 ifconfig命令的参数选项
  • 表格如下
参数含义
-a显示所有的网络接口信息,包括活动的和非活动的
up激活指定的网络接口
down关闭指定的网络接口
hw设置网络接口的物理地址(MAC
  • ifconfig查看某个网卡的网络信息
[root@www network-scripts] ifconfig eth1 # 查看eth1 网络接口信息
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3081 (3.0 KiB)  TX bytes:636 (636.0 b)
  • 第一行
    • Link encap
      • 代表网卡类型
    • HWaddr表示硬件MAC地址
  • 第二行
    • inet addr:网卡IPV4地址
    • Bcast:广播地址
    • mask:子网掩码
  • 第三行
    • inet6 addrIPV6地址
  • 第四行:
    • up代表网卡开启状态
    • RUNNING代表网卡上的网线处于连接状态
    • MULTICAST:代表支持组播
    • MTU:1500:表示最大传输单元为1500字节
  • 5行:RX(receive)
    • 显示了网卡接收数据包的统计信息
  • 6行:TX
    • 显示了网卡发送数据包的统计信息
  • 8行:显示了网卡接收、发送数据字节数的统计信息
  • 如果直接使用ifconfig可以查看所有开启的网卡的信息(但是不包括关闭的网卡的信息)。ifconfig -a可以查看所有的网卡的网络信息。包括关闭的网卡,没有设置开机自启动的网卡

  • 关闭网卡
[root@www network-scripts]    ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1595 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1040 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:181917 (177.6 KiB)  TX bytes:197211 (192.5 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3324 (3.2 KiB)  TX bytes:636 (636.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@www network-scripts] ifconfig eth1 down   # 关闭 eth1 这个网卡
[root@www network-scripts] ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1661 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1077 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:188757 (184.3 KiB)  TX bytes:203873 (199.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
  • 开启网卡
[root@www network-scripts] ifconfig eth1 up
[root@www network-scripts] ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1705 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1102 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:193287 (188.7 KiB)  TX bytes:208535 (203.6 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3324 (3.2 KiB)  TX bytes:964 (964.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
  • 使用ifconfig临时配置IP地址
[root@www network-scripts] ifconfig
**********
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3567 (3.4 KiB)  TX bytes:1104 (1.0 KiB)
***********
# 修改ip地址,子网掩码
[root@www network-scripts] ifconfig eth1 192.168.4.122 netmask 255.255.255.0

# 可以看到对应的ip地址已经发生改变
[root@www network-scripts] ifconfig 
************
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.122  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3567 (3.4 KiB)  TX bytes:1104 (1.0 KiB)
***************
  • 为网卡配置别名ip
[root@www network-scripts] ifconfig eth1:0 192.168.5.1 netmask 255.255.255.0 up  # up 代表 激活网卡
# 查看网卡信息,可以看到别名ip 生效
[root@www network-scripts] ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.122  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5301 (5.1 KiB)  TX bytes:1104 (1.0 KiB)

eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

# 可以 使用 /24 的方式配置 掩码  就不需要 netmask 255.255.255.0 这么复杂的方式配置 ip地址
[root@www network-scripts] ifconfig eth1:1 192.168.10.123/24 up  

[root@www network-scripts] ifconfig
************
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.4.122  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5544 (5.4 KiB)  TX bytes:1104 (1.0 KiB)

eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1:1    Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.10.123  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
***********

  • 修改网卡MAC地址
[root@www network-scripts] ifconfig eth1 hw ether 00:AA:BB:CC:DD:EE    # eth1 网卡名 hw (修改mac地址的关键词,设置mac地址) ether (网络设备类型)
[root@www network-scripts] ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:AA:BB:CC:DD:EE  
          inet addr:192.168.4.122  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5544 (5.4 KiB)  TX bytes:1104 (1.0 KiB)

# 可以看到网卡别名 ip 的 mac地址 也已经被修改
[root@www network-scripts] ifconfig 
*********
eth1      Link encap:Ethernet  HWaddr 00:AA:BB:CC:DD:EE  
          inet addr:192.168.4.122  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5544 (5.4 KiB)  TX bytes:1104 (1.0 KiB)

eth1:0    Link encap:Ethernet  HWaddr 00:AA:BB:CC:DD:EE  
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1:1    Link encap:Ethernet  HWaddr 00:AA:BB:CC:DD:EE  
          inet addr:192.168.10.123  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
********
  • 上面使用ifconfig命令的修改都是临时修改。想要永久修改网卡的配置信息就必须修改网卡的配置文件。
网卡类型网卡标识对应的配置地址路径
第一块网卡eth0/etc/sysconfig/network-scripts/ifcfg-eth0
第二块网卡eth1/etc/sysconfig/network-scripts/ifcfg-eth1
第一块网卡的别名IPeth0:0/etc/sysconfig/network-scripts/ifcfg-eth0:0(别名IP)也可以配置物理文件
0.3.2 ip命令
0.3.2.1 功能说明
  • ip命令是iproute软件包中一个强大的网络配置工具,用于显示或者管理Linux系统的路由、网络设备、策略路由和隧道值
0.3.2.2 语法格式
  • 格式如下
ip [option] [object] [command]
0.3.2.3 选项说明
参数选项解释说明
-s输出更加详细的信息,为了显示更加详细的信息,可重复使用此选项
-r显示主机时,不用ip地址,而是使用主机的域名显示
网络对象指定要管理的网络对象
支持的网络对象如下
link 网络设备
address 设备的协议地址(IP地址)
addrlabel 协议地址标签管理
neighbourarpndisc缓存表
route 路由表
rule 策略路由表
maddress 多播地址
mroute 多播路由缓存表
tunnelIP隧道
xfrmIPsec协议框架
这里有一个有趣的用法,比如ip address可以简写为ip addr或者最简化ip a,他们的效果是一样的,其他对象也是如此
helpip help 查看ip命令的帮助
ip [object] help 查看指定网络对象的帮助
操作命令对指定的网络对象完成的具体操作,通常,每一个具体操作的命令后面又有一组相关的命令选项
不同的操作对象所支持的操作命令也不同,下面按照操作的网络对象给出所支持的常见操作命令
link对象支持的操作命令:set(修改设备属性)、show(显示设备属性);
address对象支持的操作命令:add(添加协议地址),del(删除协议地址)、flush(清除协议地址)、show(查看协议地址);
addrlabel对象支持的操作命令:adddellistflush
neighbour对象支持的操作命令:adddeleteflushshowchangereplace
route对象支持的操作命令:adddeleteshowflushchangereplaceget
maddress对象支持的操作命令:showadddelete
mroute对象支持的操作命令:show
tunnel对象支持的操作命令:addchangedeleteprlshow
xfrm对象支持的操作命令:statepolicymonitor
说明:
show命令用于显示指定设备的信息,如果后面不接设备名,则会显示所有设备的信息。例如ip aip a show的结果是一样的
操作命令也可以简写。比如ip a show可以简写为ip a s
0.3.2.4 命令演示
  • 显示网络设备属性
[root@www network-scripts] ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:dc brd ff:ff:ff:ff:ff:ff

# 显示详细信息
[root@www network-scripts] ip -s  link show dev eth0  
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:dc brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    341532     3042     0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    343085     1907     0       0       0       0   

# 显示更加详细的信息
[root@www network-scripts] ip -s -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:dc brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    337662     3012     0       0       0       0      
    RX errors: length  crc     frame   fifo    missed
               0        0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    338877     1883     0       0       0       0      
    TX errors: aborted fifo    window  heartbeat
               0        0       0       0  
  • 激活关闭网卡
[root@www network-scripts] ip link set eth1 down   # 关闭网卡
[root@www network-scripts] ip -s link show dev eth1  # -s 显示 dev eth1 设备的详细信息,可以看到 eth1 处于关闭状态(down)
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    8139       54       0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    1104       16       0       0       0       0  

# 激活网卡 
[root@www network-scripts] ip link set eth1 up
# 查看 网卡 运行状态,此时为开启状态
[root@www network-scripts] ip -s link show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    8139       54       0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    1342       19       0       0       0       0      
  • 修改网卡mac地址
[root@www network-scripts] ip link set eth1 address 00:0C:29:CE:89:E6
[root@www network-scripts] ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
  • 查看网卡信息
[root@www network-scripts] ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.123/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fece:89dc/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet6 fe80::2aa:bbff:fecc:ddee/64 scope link 
       valid_lft forever preferred_lft forever

# 或者使用 ip a 也可以查看
[root@www network-scripts] ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.123/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fece:89dc/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet6 fe80::2aa:bbff:fecc:ddee/64 scope link 
  • 添加或者删除ip地址
# 查看 eth1 网络信息
[root@www network-scripts] ip address show dev eth1 
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet6 fe80::2aa:bbff:fecc:ddee/64 scope link 
       valid_lft forever preferred_lft fore

[root@www network-scripts] ip address add 192.168.15.100/24 dev eth1  # 为网卡添加ip地址, 192.168.15.100 子网掩码 255.255.255.0 简写 192.168.15.100/24  使用dev 选项 指定网络设备为 eth1

# 查看 eth1 的网络信息
[root@www network-scripts] ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet 192.168.15.100/24 scope global eth1
    inet6 fe80::2aa:bbff:fecc:ddee/64 scope link 
       valid_lft forever preferred_lft forever

# 关闭网卡
[root@www network-scripts] ip link set eth1 down
# 开启网卡 
[root@www network-scripts] ip link set eth1 up

# 查看网卡 网络信息
[root@www network-scripts] ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet 192.168.15.100/24 scope global eth1
    inet6 fe80::20c:29ff:fece:89e6/64 scope link 
       valid_lft forever preferred_lft forever

# 继续添加一个辅助ip
[root@www network-scripts] ip address add 192.168.20.100/24 dev eth1

# 查看网卡 网络信息
[root@www network-scripts] ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet 192.168.15.100/24 scope global eth1
    inet 192.168.20.100/24 scope global eth1
    inet6 fe80::20c:29ff:fece:89e6/64 scope link 
       valid_lft forever preferred_lft forever

# 查看 网卡 ip 信息
[root@www network-scripts] ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global eth1:1
    inet 192.168.15.100/24 scope global eth1
    inet 192.168.20.100/24 scope global eth1
    inet6 fe80::20c:29ff:fece:89e6/64 scope link 
       valid_lft forever preferred_lft forever
       

# 删除网卡的辅助 ip
[root@www network-scripts]  ip address del 192.168.10.123/24 dev eth1

# ip address  ip信息 发现 192.168.10.123 辅助ip 已经被删除
[root@www network-scripts] ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.122/24 brd 192.168.4.255 scope global eth1
    inet 192.168.5.1/24 brd 192.168.5.255 scope global eth1:0
    inet 192.168.15.100/24 scope global eth1
    inet 192.168.20.100/24 scope global eth1
    inet6 fe80::20c:29ff:fece:89e6/64 scope link 
       valid_lft forever preferred_lft forever
       

  • 使用ip命令创建别名ip
# 查看eth1 的ip地址
[root@www network-scripts] ip address show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ce:89:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.6.100/24 scope global eth1
    inet6 fe80::20c:29ff:fece:89e6/64 scope link 
       valid_lft forever preferred_lft forever

# 使用 ifconfig 查看 网卡信息
[root@www network-scripts] ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.6.100  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:133 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17370 (16.9 KiB)  TX bytes:3144 (3.0 KiB)


# 使用 label 选项创建别名ip
[root@www network-scripts] ip address add 192.168.7.100 dev eth1 label eth1:0

# 再次查看发现别名ip 已经被创建
[root@www network-scripts] ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.6.100  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17613 (17.2 KiB)  TX bytes:3144 (3.0 KiB)

eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.7.100  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

使用ifconfig命令创建的别名ipip命令能够查询到;但是使用ip命令创建的辅助ipifconfig命令则无法知道。查询不了。除非使用ip命令的

  • 查看路由表
[root@www network-scripts] ip route show           
192.168.6.0/24 dev eth1  proto kernel  scope link  src 192.168.6.100 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.123 
169.254.0.0/16 dev eth0  scope link  metric 1002 
169.254.0.0/16 dev eth1  scope link  metric 1003 
default via 192.168.4.101 dev eth1 

# 使用 column -t 对输出结果格式化,默认分隔符 为空格,来创建一个格式化的表
[root@www network-scripts] ip route show | column -t
192.168.6.0/24  dev  eth1           proto  kernel  scope   link  src  192.168.6.100
192.168.1.0/24  dev  eth0           proto  kernel  scope   link  src  192.168.1.123
169.254.0.0/16  dev  eth0           scope  link    metric  1002
169.254.0.0/16  dev  eth1           scope  link    metric  1003
default         via  192.168.4.101  dev    eth1

# 和我们前面 使用的route -n 对比一下
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.6.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.4.101   0.0.0.0         UG    0      0        0 eth1
  • 删除添加路由表
# 添加一个路由 记得是 ip地址/掩码 如果没有加掩码的话。 那么就会默认掩码为 32
[root@www network-scripts] ip route add 192.168.123.0/24 via 192.168.6.101 dev eth1

# 用ip 命令查看路由
[root@www network-scripts] ip route show
192.168.6.0/24 dev eth1  proto kernel  scope link  src 192.168.6.100 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.123 
192.168.123.0/24 via 192.168.6.101 dev eth1 
169.254.0.0/16 dev eth0  scope link  metric 1002 
169.254.0.0/16 dev eth1  scope link  metric 1003 
default via 192.168.4.101 dev eth1 

# 用 route 命令查看路由
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.6.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.123.0   192.168.6.101   255.255.255.0   UG    0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.4.101   0.0.0.0         UG    0      0        0 eth1


  • 查看arp缓存
# 查看arp 缓存
[root@www network-scripts]  ip neighbour show
192.168.1.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
  • 添加静态arp缓存
# 添加arp 缓存,记住 mac地址为 48位,如果mac 地址填少了就会 报错
[root@www network-scripts] ip neighb add 192.168.6.101 lladdr 00:0a:bd:cd:ef:ed dev eth1
[root@www network-scripts] ip neighb show
192.168.1.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.6.101 dev eth1 lladdr 00:0a:bd:cd:ef:ed PERMANENT
  • 删除arp缓存
# 删除 arp 缓存
[root@www network-scripts] ip neighb del 192.168.6.101 dev eth1
[root@www network-scripts] ip neighb show
192.168.1.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE

CentOS7默认使用ip命令,如果最小安装CentOS7的话,默认是没有ifconfig命令的。所以说ip命令是CentOS7的主推命令

0.3.3 IP Alias 的作用
  1. 测试用
  • 不修改既有的网络环境下,访问ip路由器的私有IP,通过这个私有ip访问ip路由器的www接口,实现对ip路由器的设置(ip路由器的设置基本都是通过使用www接口来提供设置的)。方式如下:
ifconfig [device] [IP] netmask [netmask ip] [up|down]
ifconfig eth0:0 192.168.0.100 netmask 255.255.255.0 up
ip address add 192.168.5.100/24 dev eth1 label eth1:0  
  1. 在一个实体网络中含有多个IP网络
  • 如果在网络环境不允许修改主机的网络配置的情况下,仍希望大家互通所有的计算机信息时,就可以让每个同学都通过IP Alias来设置同一网络的IP,这样大家就可以在同一网段内进行各项网络服务的测试了
  1. 既有设备无法提供更多实体网卡
  • 如果某台主机需要连接多个网络,但该设备却无法提供安装更多的网卡时,你就只能使用IP Alias来提供不同网段的连接服务

  • IP Alias都是实体网卡仿真的,所以当要启动eth0:0时,eth0必须要先启动才行,而当eth0被关闭后,所以eth0:n的模拟网卡也将同时被关闭。这需要先了解才行。否则常常会搞错启动设备。在路由规则的设置当中,常常需要进行一些测试,那这个IP Alias就排上用场了,尤其是在学校、单位的练习环境当中

  • 除非有特殊需求,否则建议你如果有多个ip,最好在不同网卡上实现。如果你真的需要使用IP Alias时,可以设置IP Alias的开机自启动。

    • ifconfig或者ip命令设置的IP Alias添加到开机自启动脚本当中,也就是写入到/etc/rc.d/rc.local文件中(但是使用/etc/init.d/network restart时,该IP Alias无法被重新启动)
    • 建立/etc/sysconfig/network-scripts/ifcfg-eth0:0配置文件,将信息写入到该配置文件当中,ONBOOT记得设置为yes
  • 设置

# 配置 IP Alias 的文件
[root@www network-scripts] vim ifcfg-eth1:0
DEVICE=eth1:0   #  DEVICE 的名字一定要和 文件名相同
HWADDR=00:0c:29:ce:89:e6
TYPE=Ethernet
ONBOOT=yes   # 是否设置开机自启动
BOOTPROTO=static
IPADDR=192.168.22.100
NETMASK=255.255.255.0
  • 重启网络
[root@www network-scripts] ifdown eth1
[root@www network-scripts] ifup eth1 # 重启网卡
Determining if ip address 192.168.4.100 is already in use for device eth1...
Determining if ip address 192.168.22.100 is already in use for device eth1...
# 重启网络
[root@www network-scripts] service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 192.168.1.123 is already in use for device eth0...
                                                           [  OK  ]
Bringing up interface eth1:  Determining if ip address 192.168.4.100 is already in use for device eth1...
Determining if ip address 192.168.22.100 is already in use for device eth1...
                                                           [  OK  ]
  • 当使用配置文件ifcfg-eth1:0配置IP Alias时,使用/etc/init.d/network restart时,系统依旧会使用配置文件ifcfg-eth1:0内的设置值来启动虚拟网卡。
  • 不论ifcfg-eth1:0内的ONBOOT设置值为何,只要ifcfg-eth1这个实体网卡的配置文件中,ONBOOTyes时,开机就会将全部的eth1:n都启动
  • 如果一张网卡分别通过dhcp以及手动的方式来设置IP参数,那么DHCP的取得务必使用实体网卡,既是eth0之类的网卡代号,而手动取得的就以eth0:0之类的代号来设置较好

0.4 重复路由的问题

  • 一般来说不应该设置同一网络的不同ip在同一台主机上
  • 演示:
# 现在我们将 两张网卡 设置为同一 ip地址
[root@www ~] ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:DC  
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:935 errors:0 dropped:0 overruns:0 frame:0
          TX packets:581 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:107979 (105.4 KiB)  TX bytes:92699 (90.5 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:CE:89:E6  
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fece:89e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:42 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4770 (4.6 KiB)  TX bytes:2196 (2.1 KiB)
  • 我们查看路由表
[root@www ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
  • 我们看到去往192.168.1.0这个网段有两条路径,一条通过eth0网卡出去,另外一条通过eth1网卡出去,但是默认情况下只会匹配到第一条路由也就是从eth0出去的路由。那么就会造成两件事情
    • 当要主动发送数据包到192.168.1.0/24这个网络时,都会只通过第一条规则,也就是通过eth0来传出去
    • 在响应数据包方面,不管是由eth0还有由eth1进来的网络数据包,都会通过eth0来转发
  • 同一台主机设置相同ip的话,需要特别留意路由规则,因为这样可能会导致数据包传递错误

01. 路由器配置

  • 路由功能的实现方式
    • 硬件功能:如CiscoTP-LinkD-Link等公司都生产硬件路由器,这些路由器内有嵌入式的操作系统,可以负责不同网段间的数据包翻译与传递等功能
    • 软件功能:如Linux这个操作系统的内核就提供了数据包传递的能力

高级的路由器可以连接不同的硬件设备,并且可以翻译很多不同的数据包格式

  • 查看Linux内核是否开启路由转发能力
# 查看看到路由转发没有开启
[root@www ~] cat /proc/sys/net/ipv4/ip_forward 
0  # 0 代表没有启动  1 代表启动了

1.1 开启路由转发

  • 临时开启路由转发:将文件/proc/sys/net/ipv4/ip_forward修改为1
[root@www ~] echo "1" > /proc/sys/net/ipv4/ip_forward 
[root@www ~] cat /proc/sys/net/ipv4/ip_forward            
1
  • 永久开启路由转发,不会因为开机自启动而导致路由转发的失效:修改sysctl.conf文件
[root@www ~] vim /etc/sysctl.conf 
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 1   # 开启路由转发  
************  # 省略

# 执行 sysctl -p 让刚才的设置生效,应该是重新读取了 /etc/systl.conf 这个配置文件
[root@www ~] sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

sysctl是用来在内核工作时用来直接修改内核参数的一个命令。

1.2 路由器规划路由的方式

  1. 静态路由:直接以类似route这个命令来设置路由表到内核功能当中,设置值只要与网段环境相符合即可。不过,当你的网段有变化时,路由器就要重新设置了

  2. 动态路由:通过类似于Quaggazebra软件的功能,这些软件可以安装在Linux路由器上,而这些软件可以动态检测网络的变化。并且直接修改Linux内核的路由表信息,无需手动以Route来修改路由表信息


  • NAT(Network Address Translation)网络地址转换器与路由器的区别
    • 一般来说路由器最少应该有两个接口,通过路由器本身的IP转发功能让两个网段可以互相沟通网络数据包,那如果两个接口一边是公共IP(Public IP),但另一边是私有IP(Private IP)会怎么样呢?由于私有IP和公有IP不能直接沟通。此时就需要额外的IP转换功能
    • linuxNAT服务器可以通过修改数据包的IP包头数据的来源或目标IP,来让私有IP的数据包可以转成NAT服务器的公有IP,直接连上Internet
    • 当路由器两端的网络分别是Public IPPrivate IP时才需要NAT的功能
  • 实际上nat功能限制非常的多,因为不可能让一个私有IP直接对应上一个公有IP,不然局域网里面这么多主机都需要公有IP连接上互联网,然后公有IP又是非常精确的,那么如何实现让局域网内的所有用户能够直接全部连接上互联网呢?这就需要用到PAT技术,(port adress translation),端口地址映射

1.3 路由实验的注意事项

  • 关闭防火墙
  • 路由转发使用编辑/etc/sysctl.conf文件,添加net.ipv4.ip_forward = 1改行,那么便会开启路由转发
  • 编辑/etc/sysctl.conf文件,添加这一行net.ipv4.icmp_echo_ignore_all = 1可以不理会icmp
  • ip route的使用,还有其metric的使用
  • 路由是双向的,需要考虑一来一去的路由。不要只配一边的路由
  • ARP Proxy可以通过arproute的功能,让路由器两端都处于同一网段内

02. 网络命令和Zebra

2.1 Zebra

2.1.1 zebra文件
  • 要实现动态路由的机制,那么便可以使用quagga,quaggazebra计划的延伸

    • 常用的动态路由协议有RIPV1RIPV2OSPFBGP
  • 那么我们先安装quagga

yum -y install quagga
  • quagga的配置文件
[root@idys ~] ls /etc/quagga/
vtysh.conf  zebra.conf
  • Zebra的基本配置
[root@idys ~] vim /etc/quagga/zebra.conf 
hostname www.idys.com  # 设置主机名
password idys  # 设置密码
enable password idys  # 将密码生效
log file /var/log/quagga/zebra.log  #  将/zebra/产生的信息存放于日志文件中
# 添加路由
IP route 10.0.0.0/24 ens33
  • 重启zebra
[root@idys ~] systemctl restart zebra   # 修改配置文件后重启zebra
  • 登录zebra
[root@idys ~] telnet localhost 2601
# 查看路由
idys> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, A - Babel,
       > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.2.1, ens33
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.2.0/24 is directly connected, ens33
S>* 192.168.5.0/24 [1/0] is directly connected, ens33

上面显示的路由信息里面字母含义如下:

  • k:代表route命令加入内核的路由规则
  • C:代表由网络接口所设置的IP而产生的相关的路由规则
  • S:以zebra功能所增加的静态路由规则
2.1.2 rip文件
  • rip文件的路径为vim /etc/quagga/ripd.conf

  • rip配置文件说明

[root@idys quagga] cat ripd.conf 
hostname idys   # router 主机名
password idys   # 设置自己的密码
debug rip events  # 记录错误信息
debug rip packet  # debug rip 数据包
router rip  # 使用 rip协议
version 2   #  rip 版本为 ripv2
network 192.168.1.0/24  # 相邻网段的值
network 192.168.3.0/24  # 相邻网段的值
interface eth0   # 针对外部的那个接口,略过身份验证的方式
no ip authentication mode  # 略过身份验证
log file /var/log/quagga/zebra.log  # 日志文件
  • 开启rip服务
[root@idys quagga] systemctl restart ripd

2.2 route 命令

2.2.1 命令说明
  • route命令可以显示或管理linux系统的路由表,route命令设置的路由主要是静态路由

2.2.2 命令语法格式
route [option]

2.2.3 选项说明
  • route命令的参数选项及说明
参数选项解释说明
-n直接使用ip不进行DNS解析主机名
-ee显示更为详细的路由信息
add添加路由信息
del删除路由信息
target指定目标网络或主机。可以用IP地址或主机/网络名
-net到一个网络的路由,后面接的是一个网络号地址
-host到一个主机的路由,后面接的是一个主机地址
netmask NM为添加的路由指定网络掩码
gw GW为发往目标网络/主机的任何分组指定网关
dev if指定由那个网络设备出去,后面接网络设备名,如eth0

  • 查看当前系统路由表信息
[root@www ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.4.101   0.0.0.0         UG    0      0        0 eth1
  • 命令结果字段说明
  • Destination:表示网络号,也就是network的意思
  • Gateway:连出网关地址,也就是说该网络是通过该ip连接出去的,如果显示0.0.0.0,则表示该路由是直接由本机传送出去的,如果有ip显示,则表示本条路由必须经过该IP的转接才能连接出去
  • Genmask:表示子网掩码地址,也就是netmaskDestnationGenmask将组合成一个完成的网络
  • Flags:路由标记信息,通常会有下面几种不同的标记
    • Uroute is up,表示此路由当前状态为启动状态
    • Htarget is a host,目标路由是一个主机(IP)而非网络
    • Rreinstate route for dynamic routing,使用动态路由时,恢复路由信息标识
    • G:(use gateway):表示需要通过外部的主机(gateway)来转接传递数据
    • M(modified from routing daemon or redirect):表示路由已经被修改了
    • D(dynamically installed by daemon or redirect):已经由服务设定为动态路由
    • !(reject route):这个路由将不会被接受。(用来抵挡不安全的网络)
  • metric:需要经过几个网络节点(hops)才能到达路由的目标网络地址
  • Ref:参考到此路由规则的数目
  • Use:有几个转送数据包参考到了此路由规则
  • Iface:路由对应的网络设备接口

  • 命令输出结果的第一行(192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1)表示主机所在的网段为10.0.0.0,若数据传送目标是在同一网段,则可以直接通过eth0转发数据包

路由也是有顺序的,如果不符合任何一条规则就交给默认网关来处理


2.2.4 route 命令演示
  • 删除默认路由
[root@www ~] route del default
  • 添加默认路由
[root@www ~] route add default gw 192.168.4.101
  • 查看路由
[root@www ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.4.101   0.0.0.0         UG    0      0        0 eth1
  • 添加默认路由
[root@www network-scripts] route add default gw 192.168.1.2  dev eth0
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.22.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
  • 另外一种方式添加默认路由
[root@www network-scripts] route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.2 dev eth0
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.22.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
  • 添加网段路由
[root@www network-scripts] route add -net 192.168.23.0 netmask 255.255.255.0 gw 192.168.1.2 
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.23.0    192.168.1.2     255.255.255.0   UG    0      0        0 eth0
192.168.22.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
[root@www network-scripts] route add -net 192.168.24.0 netmask 255.255.255.0 gw 192.168.1.2 dev eth0 
[root@www network-scripts] route add -net 192.168.25.0 netmask 255.255.255.0 dev eth0  # 如果只指定出口设备,不指定网关的话,那么路由便为以为是与这个网段直接连接
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.23.0    192.168.1.2     255.255.255.0   UG    0      0        0 eth0
192.168.22.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.25.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.24.0    192.168.1.2     255.255.255.0   UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
  • 删除网段
[root@www network-scripts]  route del -net 192.168.25.0/24
  • 添加主机路由
[root@www network-scripts] route add -host 192.168.7.8 gw 192.168.1.2
[root@www network-scripts] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.7.8     192.168.1.2     255.255.255.255 UGH   0      0        0 eth0
  • 删除主机路由
[root@www network-scripts] route del -host 192.168.7.8

2.2.5 永久修改路由(重启不会失效)
  • 方法一:/etc/sysconfig/network-scripts/route-eth0,这个文件默认是不存在的,需要自己添加。
[root@www network-scripts] vim /etc/sysconfig/network-scripts/route-eth0  # 配置 eth0 的路由文件
192.168.4.0/24 via 192.168.1.2  # 路由配置

重启网络服务或者重启系统会生效

  • 方法二:/etc/sysconfig/static-routes,这个文件默认是不存在的,需要自己添加
[root@www network-scripts] vim /etc/sysconfig/static-routes
any net 192.168.4.0/24 gw 192.168.1.2

写到配置文件,重启网络服务和重启系统都会生效!

  • 方法三:/etc/rc.local
[root@www network-scripts] vim /etc/rc.local 
route add -net 192.168.1.0/24 gw 192.168.1.2

重启系统会生效


2.3 arp命令

2.3.1功能说明
  • arp命令用于操作本机arp缓存区,它可以显示arp缓存区中的所有条目、删除指定的条目或者添加静态的IP地址与MAC地址的对应关系。

  • 语法格式如下

arp [option]

2.3.2 选项说明
参数选项含义
-n显示数字IP地址
-s<主机><MAC地址>设置指定主机的IP地址与MAC地址的静态映射
-d<主机>ARP缓存区中删除指定主机的arp条目
-i<接口>指定网络接口
-v显示更为详细的ARP缓存区条目,包括缓冲区条目的统计信息

2.3.3 使用演示
  • 显示arp缓存区的所有条目
[root@www network-scripts] arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.2              ether   00:50:56:f5:03:bb   C                     eth0
192.168.1.1              ether   00:50:56:c0:00:08   C                     eth0

字段含义解释:

  • Address:主机地址
  • Hwtype:硬件类型
  • Hwaddress:硬件地址
  • Flags Mask:记录标志,C表示高速缓存中的条目,M表示静态的arp条目
  • 查询指定主机的arp条目
[root@www network-scripts] arp -n 192.168.1.2
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.2              ether   00:50:56:f5:03:bb   C                     eth0
  • 静态绑定IP地址与MAC地址
# 在某个网卡上绑定 对应的ip地址 和mac地址
[root@www network-scripts] arp -i eth0 -s 192.168.7.8 0a:bb:cc:dd:ee
[root@www network-scripts] arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.7.8              ether   0a:bb:cc:dd:ee:00   CM                    eth0
  • 删除绑定条目
[root@www network-scripts] arp -i eth0 -d 192.168.7.8
[root@www network-scripts] arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.7.8                      (incomplete)                              eth0
192.168.1.2              ether   00:50:56:f5:03:bb   C                     eth0
192.168.1.1              ether   00:50:56:c0:00:08   C                     eth0

2.4 netstat查看网络状态

2.4.1 功能说明
  • netstat命令用于显示本机网络的连接状态,运行端口和路由表等信息

  • 语法选项

netstat [option]

2.4.2 选项说明
参数选项含义
-r显示路由表信息,该功能类似于前面学过的routeip route
-g显示多播功能群组成员,该功能类似于前面学过的ip maddr
-i显示网络接口信息,该功能类似于前面学过的ip -s link
-s显示各类协议的统计信息
-n显示数字形式的地址而不是去解析主机,端口或用户名。默认情况下,netstat命令会尝试解析并且显示主机的主机名,这个过程通常比较长也是非必须的
-a显示处于监听状态和非监听状态的socket信息
-A显示指定网络类型的网络连接状态
-c<秒数>后面跟的秒数表示每隔几秒就刷新显示一次
-l仅显示连接状态为LISTEN的服务的网络状态
-t显示所有的tcp连接情况
-u显示所有的udp连接情况
-P显示socket所属进程的PID和名称

2.4.3 使用演示
  • 显示连接
[root@idys ~] netstat -an  # -a 和 -n 组合,显示所有的连接信息
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 192.168.84.132:22       192.168.84.178:2945     ESTABLISHED
tcp        0     96 192.168.84.132:22       192.168.84.178:3703     ESTABLISHED
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 ::1:323                 :::*                               
raw6       0      0 :::58                   :::*                    7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     20264    private/proxywrite
unix  2      [ ACC ]     STREAM     LISTENING     20267    private/smtp
unix  2      [ ACC ]     STREAM     LISTENING     20270    private/relay
unix  2      [ ACC ]     STREAM     LISTENING     20276    private/error
unix  2      [ ACC ]     STREAM     LISTENING     20279    private/retry
unix  2      [ ACC ]     STREAM     LISTENING     20282    private/discard
unix  2      [ ACC ]     STREAM     LISTENING     20240    private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     20243    private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     20246    private/bounce
unix  2      [ ACC ]     STREAM     LISTENING     20249    private/defer
unix  2      [ ACC ]     STREAM     LISTENING     20252    private/trace
unix  2      [ ACC ]     STREAM     LISTENING     20255    private/verify
  • 对于第一行的每一列进行说明
名称含义
Protosocket使用的协议(TCPUDPRAW
Recv-Q接收到但是还未处理的字节数
Send-Q已经发送但是未被远程主机确认收到的字节数
Local Address本地主机地址和端口
Foreign Address远程主机地址和端口
Statesocket的状态,通常仅仅有TCP的状态,状态值可能有ESTABLISHEDSYN_SENTSYN_RECVFIN_WAIT1FIN_WAII2TIME_WAIT
  • 对于state的状态进行详解
状态含义
ESTABLISHEDsocket已经建立连接,表示处于连接的状态,一般认为有一个ESTABLISHED是一个服务的并发连接。该连接状态需要重点关注
SYN_SENTsocket正在积极尝试建立一个连接,即处于发送后连接前的一个等待但未匹配进入连接的状态
SYN_RECV已经从网络上收到一个连接请求
FIN_WAIT1sock已关闭,连接正在或正要关闭
FIN_WAIT2连接已经关闭,并且socket正在等待远端结束
TIME_WAITsocket正在等待关闭处理仍在网络上的数据包,这个连接状态在生产环境中很重要,需要重点关注
CLOSEDsocket不再被占用
CLOSE_WAIT远端已经结束,等待socket关闭
LAST_ACK远端已经结束,并且socket也已关闭,等待acknowledgement
LISTENsocket正在监听连接请求
CLOSINGsocket关闭,但是我们仍旧没有发送数据
UNKNOWNsocket状态未知
  • 显示所有TCPUDP正在监听的连接信息
[root@www ~] netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1140/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1048/cupsd          
tcp        0      0 :::22                       :::*                        LISTEN      1140/sshd           
tcp        0      0 ::1:631                     :::*                        LISTEN      1048/cupsd          
tcp        0      0 ::1:25                      :::*                        LISTEN      1224/master         
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               1048/cupsd  
  • -t:显示所有LISTEN状态的网络连接
  • -n:显示IP地址,不进行DNS解析成主机名、域名
  • -t:显示所有TCP连接
  • -u:显示所有UDP连接
  • -p:显示进程号和进程名

  • 显示当前系统的路由信息
[root@www ~] netstat -rn  # 使用 -r 表示路由信息 ,该命令相当于 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.22.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.4.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         192.168.1.2     0.0.0.0         UG        0 0          0 eth0
  • 显示网络接口状况
[root@www ~] netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0      111      0      0      0       87      0      0      0 BMRU
eth1       1500   0        1      0      0      0       12      0      0      0 BMRU
eth1:0     1500   0      - no statistics available -                            BMRU
lo        16436   0        0      0      0      0        0      0      0      0 LRU
  • 以下是命令结果解释

  • Iface:表示网络设备的接口名称

  • MTU:表示最大传输单元,单位为字节

  • RX-OK/TX-OK:表示已经准确无误地接收/发送了多少数据包

  • RX-ERR/TX-ERR:表示接/发送数据包时产生了多少错误

  • RX-DRP/TX-DRP:表示接收/发送数据包时丢弃了多少数据包

  • RX-OVR/TX-OVR:表示由于误差而遗失了多少数据包

  • Flg:表示接口标记,其中各标记含义具体如下

    • L:表示该接口是个回环设备
    • B:表示设备了广播地址
    • M:表示接收所有数据包
    • R:表示接口正在运行
    • U:表示接口处于活动状态
    • O:表示在该接口上禁用arp
    • P:表示一个点到点的连接

正常情况下,RX-ERR/TX-ERRRX-DRP/TX-DRPRX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降

  • 网络连接状态统计
[root@www ~]   netstat -n | awk '/tcp/ {++idys[$NF]} END{for(a in idys) print a,idys[a]}'
TIME_WAIT 3
ESTABLISHED 2

2.5 ss命令查看网络状态

2.5.1 功能说明
  • ss命令是类似并将取代netstat的工具,它能用来查看网络状态信息,包括TCPUDP连接,端口等,它的优点是能够显示更多更加详细的有关网络连接状态的信息,而且比netstat更加快速更为高效
  • 如果系统没有ss,可以安装它。yum -y install iproute

  • 语法格式
ss [option] [filter]
2.5.2 参数说明
参数选项含义
-n显示ip地址,不进行dns解析
-r尝试解析数字IP地址和端口
-a显示所有socket连接
-l显示所有监听socket
-o显示计时器信息
-e显示详细的socket信息
-m显示socket的内存使用情况
-p显示使用socket的进程
-i显示TCP内部信息
-s实现socket使用统计
-4仅显示IPV4socket
-6仅显示ipv6socket
-0仅显示PACKETsocket
-t仅显示tcpsocket
-u仅显示udpsocket
-d仅显示dccpsocket
-w仅显示RAWsocket
-x仅显示unixsocket
  • 显示所有的tcp连接,不进行dns解析
[root@US ~] ss -atn | column -t
State   Recv-Q  Send-Q  Local            Address:Port         Peer  Address:Port
LISTEN  0       128     127.0.0.1:54499  *:*
LISTEN  0       128     *:80             *:*
LISTEN  0       128     *:22             *:*
LISTEN  0       128     *:443            *:*
ESTAB   0       0       45.63.58.227:22  171.43.243.20:15064
LISTEN  0       128     [::]:22          [::]:*
LISTEN  0       128     [::]:443         [::]:*
  • 显示所有正在监听的TCPUDP连接
[root@www ~]      ss -lntup | column -t
Netid  State   Recv-Q  Send-Q  Local          Address:Port  Peer                        Address:Port
udp    UNCONN  0       0       *:631          *:*           users:(("cupsd",1048,9))
tcp    LISTEN  0       128     :::22          :::*          users:(("sshd",1140,4))
tcp    LISTEN  0       128     *:22           *:*           users:(("sshd",1140,3))
tcp    LISTEN  0       128     127.0.0.1:631  *:*           users:(("cupsd",1048,7))
tcp    LISTEN  0       128     ::1:631        :::*          users:(("cupsd",1048,6))
tcp    LISTEN  0       100     ::1:25         :::*          users:(("master",1224,12))
  • 显示sock统计
[root@www ~] ss -s
Total: 389 (kernel 400)
TCP:   7 (estab 2, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3

Transport Total     IP        IPv6
*         400       -         -        
RAW       0         0         0        
UDP       1         1         0        
TCP       7         4         3        
INET      8         5         3        
FRAG      0         0         0  

当服务器端产生大量socket连接时,通常会使用该命令来做宏观数据统计


2.6 arping 发送arp请求

2.6.1 功能说明
  • arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址

  • 语法格式
arping [option]

2.6.2 选项说明
选项含义
-c<次数>发送指定次数的arp报文后退出命令
-f当收到第一个应答报文时,立即退出命令。此选项用于判断目标主机是否存在或者正常运行
-I网络接口指定网络接口发送arp报文
-w<截止时间>设置命令的执行截止时间
-s source设定arping发送的arp数据包中的源地址
2.6.3 命令演示
  • 查看主机是否存活
[root@www ~] arping -f 192.168.1.150 
ARPING 192.168.1.150 from 192.168.1.123 eth0
Unicast reply from 192.168.1.150 [00:0C:29:D1:1B:95]  0.676ms   # 可以看到我们已经知道这个 ip的mac地址了
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

2.7 nc:多功能网络管理工具

2.7.1 功能说明
  • nc是一个简单、可靠、强大的网络工具,它可以建立tcp连接,发送UDP数据包,监听任意的TCPUDP端口,进行端口扫描,处理IPV4IPV6数据包

  • 语法格式
nc [option]

2.7.2 选项说明
参数含义
-l指定监听端口,然后一直等待网络连接
-z表示zero,表示扫描时不发送任何数据
-v显示详细输出
-w设置超时时间,对-l失效
-p指定nc命令使用的端口,不能和-l选项一起使用,可能引起错误
-u使用UDP连接,默认是TCP连接
-s指定发送数据的源IP地址,适用于多网卡主机
2.7.3 命令演示
  • 网络环境准备:关闭防火墙和Selinux
[root@www ~]              /etc/init.d/iptables status
iptables: Firewall is not running.
[root@www ~] getenforce 
Enforcing
[root@www ~] setenforce 0
[root@www ~] getenforce  
Permissive
  • 模拟TCP连接并传输文本内容(远程复制文件)
[root@www nc_per] nc -l 1920 > nc.txt  # 监听 1920端口
[root@www nc_per] echo whoami>kk.txt # 创建一个文件
[root@www nc_per] cat kk.txt  
whoami
[root@www nc_per] nc 192.168.1.123 1920 < kk.txt   # 往 自己 ip的固定端口发送数据
[root@www nc_per]                        cat nc.txt   # 查看 nc.txt 发现数据是自己刚才发送过去的数据
whoami
  • 模拟一个简单的web服务器效果案例
[root@www nc_per] vim web_content.txt  # 首先建立一个文本
hello everyone
i'm idys
i glad to see you
nice you
thank you
[root@www nc_per] cat web_cat.sh   # 写一个脚本将 web_content.txt 里面的文件传送到80端口里面去
#!/bin/bash

while true
do
nc -l 80 < /root/nc_per/web_content.txt
done
[root@www nc_per] bash web_cat.sh &>/dev/null  # 运行脚本
[root@master ~]   curl 192.168.1.123  # 在别的主机上 浏览该端口,收到了这条信息
hello everyone
i'm idys
i glad to see you
nice you
thank you
  • 利用nc经历端口扫描
[root@www nc_per] nc -z 192.168.1.150 20-80  # 扫描主机的 20 端口到 80端口
Connection to 192.168.1.150 22 port [tcp/ssh] succeeded!
  • 扫描端口,并且显示详细过程
[root@www nc_per] nc -z 192.168.1.150 22-25 -v  # 扫描 22-25 端口,并且显示详细过程
Connection to 192.168.1.150 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.1.150 port 23 (tcp) failed: No route to host
nc: connect to 192.168.1.150 port 24 (tcp) failed: No route to host
nc: connect to 192.168.1.150 port 25 (tcp) failed: No route to host
  • 模拟聊天通信
[root@www nc_per] nc -l 9090  # 监听9090 端口
whoami
hello
dazhuozhuang
[root@master ~]  nc 192.168.1.123 9090   # 向 192.168.1.123 的9090端口发送数据
whoami
hello
dazhuozhuang

03. 其他命令

3.1 column命令

3.1.1 功能说明
  • column命令的作用是将其输入格式化为多个列。在列之前填充行。输入可以来自文件,或默认情况下来自标准输入。除非使用-e选项,否则将忽略空行。

3.1.2 参数说明
参数含义
-s sep指定一组字符,用于分隔-t选项的列
-t确定输入包含的列数并创建表
-n禁用将多个相邻分隔符合并为单个分隔符行为
-c columns输出格式化为显示columns列宽
-x在填充行之前填充列
-e不要忽略空白行

3.1.3 命令演示
  • 指定分隔符为wh,然后将他们输出为列表的形式
[root@www ~] echo whoamikkwho | column -s 'wh' -t
oamikk  o

写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值