文章目录
这里是一段防爬虫文本,请读者忽略。
本文原创首发于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 路由表产生的情况
- 依据网络接口产生
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
地址后)而出现的路由
- 手动或者默认路由(
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.0
和192.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 ens35
,Flags
的G
非常重要,因为那个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
- 实验
A
去ping
别C
的192.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
通了
- 动态路由
-
除了上面这两种可以直接使用命令的方法来增加路由规则之外,还有一种可以通过路由器与路由器之间的协商以实现动态路由的环境。不过这需要i额外的软件支持:
zebra
或者Quagga
-
事实上,
Linux
的路由规则都是通过内核来实现的,所以这些路由表的规则都是在内核功能中,也就是运行在内存中。
0.3 IP alias
,虚拟网卡,实现一个网卡绑多个IP
-
一个网卡模拟出一个虚拟接口,使同一个网卡具有多个
IP
,具有多个IP
的功能就被称之为IP Alias
。 -
虚拟网卡接口
eth:0
的设备可以通过ifconfig
或ip
这两个命令来实现,下面我们来看看ifconfig
和ip
这两个命令的介绍
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
下为eth0
,eth1
,lo
等,分别对应于第一块网卡,第二块网卡,回环接口- 如果只键入
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 addr
:IPV6
地址- 第四行:
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 |
第一块网卡的别名IP | eth0: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 协议地址标签管理neighbour arp 或ndisc 缓存表route 路由表rule 策略路由表maddress 多播地址mroute 多播路由缓存表tunnel IP 隧道xfrm IPsec 协议框架这里有一个有趣的用法,比如 ip address 可以简写为ip addr 或者最简化ip a ,他们的效果是一样的,其他对象也是如此 |
help | ip help 查看ip 命令的帮助ip [object] help 查看指定网络对象的帮助 |
操作命令 | 对指定的网络对象完成的具体操作,通常,每一个具体操作的命令后面又有一组相关的命令选项 不同的操作对象所支持的操作命令也不同,下面按照操作的网络对象给出所支持的常见操作命令 link 对象支持的操作命令:set (修改设备属性)、show (显示设备属性);address 对象支持的操作命令:add (添加协议地址),del (删除协议地址)、flush (清除协议地址)、show (查看协议地址);addrlabel 对象支持的操作命令:add 、del 、list 、flush ;neighbour 对象支持的操作命令:add 、delete 、flush 、show 、change 、replace ;route 对象支持的操作命令:add 、delete 、show 、flush 、change 、replace 、get maddress 对象支持的操作命令:show 、add 、delete mroute 对象支持的操作命令:show tunnel 对象支持的操作命令:add 、change 、delete 、prl 、show xfrm 对象支持的操作命令:state 、policy 、monitor 说明: show 命令用于显示指定设备的信息,如果后面不接设备名,则会显示所有设备的信息。例如ip a 和ip 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
命令创建的别名ip
,ip
命令能够查询到;但是使用ip
命令创建的辅助ip
,ifconfig
命令则无法知道。查询不了。除非使用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 的作用
- 测试用
- 不修改既有的网络环境下,访问
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
- 在一个实体网络中含有多个
IP
网络
- 如果在网络环境不允许修改主机的网络配置的情况下,仍希望大家互通所有的计算机信息时,就可以让每个同学都通过
IP Alias
来设置同一网络的IP
,这样大家就可以在同一网段内进行各项网络服务的测试了
- 既有设备无法提供更多实体网卡
- 如果某台主机需要连接多个网络,但该设备却无法提供安装更多的网卡时,你就只能使用
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
这个实体网卡的配置文件中,ONBOOT
为yes
时,开机就会将全部的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. 路由器配置
- 路由功能的实现方式
- 硬件功能:如
Cisco
、TP-Link
、D-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 路由器规划路由的方式
-
静态路由:直接以类似
route
这个命令来设置路由表到内核功能当中,设置值只要与网段环境相符合即可。不过,当你的网段有变化时,路由器就要重新设置了 -
动态路由:通过类似于
Quagga
或zebra
软件的功能,这些软件可以安装在Linux
路由器上,而这些软件可以动态检测网络的变化。并且直接修改Linux
内核的路由表信息,无需手动以Route
来修改路由表信息
NAT(Network Address Translation)
网络地址转换器与路由器的区别- 一般来说路由器最少应该有两个接口,通过路由器本身的
IP
转发功能让两个网段可以互相沟通网络数据包,那如果两个接口一边是公共IP
(Public IP
),但另一边是私有IP
(Private IP)会怎么样呢?由于私有IP
和公有IP
不能直接沟通。此时就需要额外的IP
转换功能 linux
的NAT
服务器可以通过修改数据包的IP
包头数据的来源或目标IP
,来让私有IP
的数据包可以转成NAT
服务器的公有IP
,直接连上Internet
- 当路由器两端的网络分别是
Public IP
和Private 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
可以通过arp
与route
的功能,让路由器两端都处于同一网段内
02. 网络命令和Zebra
2.1 Zebra
2.1.1 zebra
文件
-
要实现动态路由的机制,那么便可以使用
quagga
,quagga
是zebra
计划的延伸- 常用的动态路由协议有
RIPV1
、RIPV2
、OSPF
、BGP
- 常用的动态路由协议有
-
那么我们先安装
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
:表示子网掩码地址,也就是netmask
。Destnation
和Genmask
将组合成一个完成的网络Flags
:路由标记信息,通常会有下面几种不同的标记U
:route is up
,表示此路由当前状态为启动状态H
:target is a host
,目标路由是一个主机(IP)而非网络R
:reinstate 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 | 显示路由表信息,该功能类似于前面学过的route 和ip 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
- 对于第一行的每一列进行说明
名称 | 含义 |
---|---|
Proto | socket 使用的协议(TCP ,UDP ,RAW ) |
Recv-Q | 接收到但是还未处理的字节数 |
Send-Q | 已经发送但是未被远程主机确认收到的字节数 |
Local Address | 本地主机地址和端口 |
Foreign Address | 远程主机地址和端口 |
State | socket 的状态,通常仅仅有TCP 的状态,状态值可能有ESTABLISHED 、SYN_SENT 、SYN_RECV 、FIN_WAIT1 、FIN_WAII2 、TIME_WAIT 等 |
- 对于
state
的状态进行详解
状态 | 含义 |
---|---|
ESTABLISHED | socket 已经建立连接,表示处于连接的状态,一般认为有一个ESTABLISHED 是一个服务的并发连接。该连接状态需要重点关注 |
SYN_SENT | socket 正在积极尝试建立一个连接,即处于发送后连接前的一个等待但未匹配进入连接的状态 |
SYN_RECV | 已经从网络上收到一个连接请求 |
FIN_WAIT1 | sock 已关闭,连接正在或正要关闭 |
FIN_WAIT2 | 连接已经关闭,并且socket 正在等待远端结束 |
TIME_WAIT | socket 正在等待关闭处理仍在网络上的数据包,这个连接状态在生产环境中很重要,需要重点关注 |
CLOSED | socket 不再被占用 |
CLOSE_WAIT | 远端已经结束,等待socket 关闭 |
LAST_ACK | 远端已经结束,并且socket 也已关闭,等待acknowledgement |
LISTEN | socket 正在监听连接请求 |
CLOSING | socket 关闭,但是我们仍旧没有发送数据 |
UNKNOWN | socket 状态未知 |
- 显示所有
TCP
和UDP
正在监听的连接信息
[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-ERR
、RX-DRP/TX-DRP
和RX-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
的工具,它能用来查看网络状态信息,包括TCP
、UDP
连接,端口等,它的优点是能够显示更多更加详细的有关网络连接状态的信息,而且比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 | 仅显示IPV4 的socket |
-6 | 仅显示ipv6 的socket |
-0 | 仅显示PACKET 的socket |
-t | 仅显示tcp 的socket |
-u | 仅显示udp 的socket |
-d | 仅显示dccp 的socket |
-w | 仅显示RAW 的socket |
-x | 仅显示unix 的socket |
- 显示所有的
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 [::]:*
- 显示所有正在监听的
TCP
和UDP
连接
[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
数据包,监听任意的TCP
和UDP
端口,进行端口扫描,处理IPV4
和IPV6
数据包
- 语法格式
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基础 | 云计算 - 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!