课程目标
理解路由表的作用
能够读懂路由表信息
能够使用图形抓包工具
wireshark
进行数据包的抓取
,如(
TCP/IP
的三次握手四次断开)
一、路由表
思考:
什么是交换,什么是路由,什么是路由表?
1. 交换是指同网络访问(两台机器连在同一个交换机上,配置同网段的不同ip就可以直接迅)
2. 路由就是跨网络访问(路径选择)
3. 路由表是记录路由信息的表,在Linux中⾸先是⼀张可见的,可更改的表,
它的作⽤就是当数据包发到Linux的时候 ,系统(或者说内核)就根据这张表中定义好的信息
来决定这个数据包接下来该怎么⾛
1. 查看路由表信息
route 命令用来查看和设置路由表信息[root @server ~ ] # route -n //查看路由表信息Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth110.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth00.0.0.0 10.1.1.254 0.0.0.0 UG 0 0 0 eth0目标网络 网关 子网掩码 路由标志 网卡Up : 启动状态UG : 该网关为路由器113.28.10.34
2. 读懂路由信息
讨论 1 :按上面的路由表来看,如果我 ping 一个公网 IP (如 ping 14.200.151.38 ) ,应该怎么走 ?1 ) 先看目标 ip 是否为本地 ip ,如果是,则直接访问本地 ; 如果不是,则找路由表里是否有你访问的网段 .2 ) 如果路由表有则从这个路由条目后面指定的网卡出去;如果路由表里没有你访问的网段,则会找默认路由(也就是网关)。3 ) 如果网关也没有的话,则会报错网络不可达。connect : Network is unreachable讨论 2 :按上面的路由表来看,如果我 ping 一个局域网 IP 为 10.1.1.10 ,会怎么走 ?ping 10.1.1.10 不会走网关,而是走本地路由从 eth0 网卡出去(因为路由表里有 10.1.1.0 / 24 的路由)。讨论 3 :如何加网关和删除网关,加网关有什么要求 ?route add default gw x.x.x.x 临时加网关,马上生效route del default gw x.x.x.x 临时删网关,马上生效永久增加网关:vim / etc / sysconfig / network-scripts / ifcfg-eth0GATEWAY = x.x.x.x或者vim / etc / rc.local 操作系统开机最后读取的一个文件..route add default gw xxxxx注意事项:1. 加网关只能加你已经有的路由网段里的一个 IP 才行(此 IP 不一定存在)2. 加网关可以不用指定子网掩码(因为是已有的一个网段的 ip ,所以掩码已经确认了 )讨论 4 :一个 linux 服务器上能有几个有效网关 ?准确来说:一个路由表上可以加多个网关,但只有一个生效。讨论 5 :我一台 linux 上如果有双物理网卡,请问可不可以两个网卡配置同网段的不同 IP 呢 ?eth0 10.1.1.1 / 24eth1 10.1.1.2 / 24如果两个网卡同网段,则会有下面两条路由10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth010.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1结果:它会实现从两张网卡进来的包,却从一张网卡出去,问题就产生了。假设 eth0 网卡有问题时,路由表里匹配到第一条后,依 然会走 eth0 网卡,而不会走 eth1 。也有解决方法(比如多路由表或者双网卡绑定),这里不涉及。
二、路由选择实验
1. route命令介绍
route - n 查看路由 , 显示 ip, 不解析route del default gw 10.1.1.254 删除默认路由route add default gw 192.168.1.110 添加一个默认网关,把所有不知道的网络交给网关来转发route add - net 192.168.2.0 / 24 dev eth0 对一个网络添加一个新的路由(另一个网段)route del - net 192.168.2.0 /
2. 实验要求
前提条件:三台虚拟主机的网络模式都是仅主机模式!环境准备:node1 : 10.1.1.1 / 24作为网关服务器,开启路由转发功能 / proc / sys / net / ipv4 / ip_forwardnode2 : 192.168.0.254 / 24node3 : 172.16.0.254 / 24要求:实现不同网络 ( 172.16.0.0 / 24 和 192.168.0.0 / 24 ) 之间的互通,使用第三方主机 node1 作为路由进行转发
3. 具体步骤
思路:
1. 中间人node1,必须开启路由转发功能;
2. 中间人node1即要有到达A网络,又能到达C网络的路
3. node2主机(A网络)必须设置中间人node1作为自己的网关
4. node3主机(C网络)必须设置中间人node1作为自己的网关
步骤:1. node1 服务器(中间人)完成以下任务1 )开启路由转发功能临时开启:[root @server ~ ] # cat /proc/sys/net/ipv4/ip_forward0[root @server ~ ] # echo 1 > /proc/sys/net/ipv4/ip_forward[root @server ~ ] # cat /proc/sys/net/ipv4/ip_forward1永久开启:[root @server ~ ] # vim /etc/sysctl.conf# Controls IP packet forwardingnet.ipv4.ip_forward = 12 )分别添加到 node2 和 node3 两台主机所在的网络[root @node1 ~ ] # route add -net 192.168.0.0/24 dev eth0[root @node1 ~ ] # route add -net 172.16.0.0/24 dev eth0[root @node1 ~ ] # route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth02. 分别配置 node2 和 node3 的 IP 和网关[root @node2 ~ ] # route add -net 10.1.1.0/24 dev eth0[root @node2 ~ ] # route add default gw 10.1.1.1[root @node3 ~ ] # route add -net 10.1.1.0/24 dev eth0[root @node3 ~ ] # route add default gw 10.1.1.13. 测试验证1 )中间主机分别 ping node2 和 node32 ) node2 和 node3 相互 ping
4. 实战组建局域网
思科模拟器交换机配置相关命令:
进入到使能模式Switch > ?Switch > enable进入配置终端Switch #?Switch #configure terminal创建 vlanSwitch (config) #vlan 10删除 vlanSwitch (config) #no vlan 10进入指定的配置接口Switch (config) #interface FastEthernet0/1或者Switch (config) #int fa0/1将 fa0 / 1 接口加入到 vlan 中Switch (config-if) #switchport access vlan 10从 vlan 中删除接口Switch (config-if) #no switchport access vlan 10
4.1 交换机vlan划分
4.2 路由器连接多个网络
三、抓包工具
1. wireshark工具
安装 wireshark 工具# yum -y install wireshark*
抓
telnet
登录包:
telnet:
远程管理服务
tcp/23
server
:
10.1.1.5 telnet-server
client
:
10.1.1.1 telnet
使用:
telnet 10.1.1.1
Centos6 .5 系统:1. 安装软件包yum - y install telnet-server telnet2. 启动 telnet 服务vim / etc / xinetd.d / telnetservice telnet{disable = yes 将 yes 变为 noflags = REUSEsocket_type = streamwait = nouser = rootserver = / usr / sbin / in .telnetdlog_on_failure += USERID}启动服务:service xinetd start检查 telnet 服务是否启动:[root @node1 Desktop] # netstat -nltp|grep 23tcp 0 0 ::: 23 :::* LISTEN5546 / xinetdCentos7 .5 系统:1. 安装软件包yum - y install telnet-server2. 启动服务[root @centos7 ~ ] # systemctl start telnet.socket[root @centos7 ~ ] # netstat -nltp|grep :23tcp6 0 0 ::: 23 :::* LISTEN 1 / systemd3. 测试验证
2. tcpdump工具
查看 arp 缓存 (同一网段主机的 MAC 地址)[root @node1 Desktop] # arp -nAddress HWtype HWaddress Flags Mask Iface10.1.1.254 ether 00 : 50 : 56 : c0 : 00 : 01 C eth0删除目标主机的 MAC 缓存[root @node1 Desktop] # arp -d 10.1.1.254[root @node1 Desktop] # arp -nAddress HWtype HWaddress Flags Mask Iface10.1.1.254 (incomplete) eth0查看主机 10.1.1.1 收到的和发送的数据包[root @node1 Desktop] # tcpdump -i eth0 -nn host 10.1.1.1tcpdump : verbose output suppressed, use - v or - vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes22 : 33 : 25.148389 ARP, Request who-has 10.1.1.254 tell 10.1.1.1 , length 2822 : 33 : 25.148896 ARP, Reply 10.1.1.254 is-at 00 : 50 : 56 : c0 : 00 : 01 , length 4622 : 33 : 30.714605 IP 10.1.1.254 > 10.1.1.1 : ICMP echo request, id 1 , seq 237 , length 4022 : 33 : 30.714619 IP 10.1.1.1 > 10.1.1.254 : ICMP echo reply, id 1 , seq 237 , length 40- i 指定网络接口,对于多个网络接口有用- n 显示 IP 地址,不查主机名。当 DNS 不起作用时常用到这个参数- nn 不显示协议和端口名。即显示 IP 地址和端口- w 将抓的包保存到指定的文件里方便后续分析其他用法:man tcpdumpTCP PacketsThe general format of a tcp protocol line is :src > dst : flags data-seqno ack window urgent optionsSrc and dst are the source and destination IP addresses and ports. Flags are some combination of S(SYN), F (FIN), P (PUSH), R (RST), W (ECN CWR) or E (ECN-Echo), or a single ‘ . ’ (no flags).1. 获取主机 10.1.1.1 接收或发出的 telnet 包#tcpdump tcp port 23 and host 10.1.1.12. 对本机的 udp 协议的 123 端口进行监听( 123 是 ntp 服务端口)# tcpdump udp port 1233. 只对 hostname 的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以查看主机 hostname 发送的所有数据:#tcpdump -i eth0 src host hostname#tcpdump -i eth0 src host 10.1.1.2544. 下面的命令可以查看所有送到主机 hostname 的数据包:#tcpdump -i eth0 dst host hostname#tcpdump -i eth0 dst host 10.1.1.15. 监视通过指定网关的数据包:#tcpdump -i eth0 gateway Gatewayname#tcpdump -i eth0 gateway 10.1.1.2546. 其他只需要列出送到 80 端口的数据包,用 dst port ;#tcpdump –i eth0 host hostname and dst port 80 // 目的端口是 80只需要看到返回 80 端口的数据包,用 src port#tcpdump –i eth0 host hostname and src port 80 // 源端口是 80, 一般是提供 http 的服务的主机如果条件很多的话要在条件之前加 and 或 or 或 not#tcpdump -i eth0 host ! 210.161.223.70 and ! 210.161.223.71 and dst port 80