RabbitMQ RabbitMQ是什么? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性方面表现不俗。 RabbitMQ主要是为了解决系统之间的双向解耦而实现的,当生产者大量产生数据的时,消费者无法快速消费,那么需要一个中间层保存这个数据。 rabbitmq是一个消息代理,一个消息系统的媒介,它可以为你的应用提供一个通用的消息发送和接收平台,并保证消息在传输过程中的安全。 随着系统压力的增大和系统解耦的急迫性,各大应用之间通过消息队列互相连接起来组成一个更大的应用,并且消息系统通过将消息的发送和接收分离来实现应用程序的异步和解耦。 通过接入rabbitmq解决了数据传递,非阻塞操作和推送通知的操作,实现了发布/订阅、异步处理和工作队列的问题。 RabbitMQ的特点: ①可靠性:RabbitMQ提供了多种技术,可以让使用者在性能和可靠之间进行权衡,这些技术包括持久性机制、投递确认、发布者证实和高可用性机制。 ②灵活的路由: 消息队列到达队列前是通过交换器进行路由的,RabbitMQ为典型的路由逻辑提供了多种交换器类型,如果使用者有更复杂的路由需求,可以将这些交换器组合起来使用,甚至可以实现自己的交换器类型,并当做RabbitMQ的插件来使用。 RabbitMQ提供的内置交换器4中类型中,我们常使用到的有三种,分别是:direct exchange(直连交换器)、topic exchange(主题交换器)、fanout exchange(扇形交换器),RabbitMQ支持多种中间件协议。 ③集群:在相同的局域网中的多个RabbitMQ服务器可以聚合在一起,作为一个逻辑代理来使用。 ④高可用队列:在同一个集群中,队列可以被镜像到多个物理机器中,以确保当中某些硬件故障后消息仍然安全。 ⑤广泛的客户端:只要是能够想到的编程语言,几乎都有与其相适配的RabbitMQ客户端 ⑥可视化管理工具:RabbitMQ给我们提供了易于使用的可视化管理工具,它可以帮助使用者监控信息代理的每一个环节 Direct exchange(直连交换器)  转发消息到routingkey(路由键)指定的队列,routingkey是一个消息的原属性,由生产者加在消息头中。 XQ1 有一个routingkey,routingkey为orange XQ2 有两个routingkey,routingkey为black和green 当消息队列的routingkey(路由键)和routingkey对应时,这个消息去往对应的队列中。 topic exchange(主题交换器) 按规则(通配符)转发消息,这种交换机制下,队列和交换机的绑定会定义一种路由模式,通配符就是要在这种路由模式和路由键之间匹配后,交换器才能够进行消息的转发  XQ1 有一个路由模式*.orange.*来匹配任何A.orange.B类似的路由键的消息 XQ2 有两个路由模式*.*.rabbit和lazy.#来匹配任何A.B.rabbit和lazy.A、lazy.A.B或者lazy.A.B.C,其中“#”表示一个或多个单词 主题交换器严格区分*.*和lazy.#,在生产环境中尽量不要使用#作为routingkey(路由键) 在指定路由键的时候最好指定准确的路由键作为routingkey fanout exchange(扇形交换器) 转发消息到所有的绑定队列,如果有不同的consumer(消费者)需要对童谣的消息进行不同的处理,使用这种方式是很有用的。 这种类型的交换器,不管是路由键或者是路由模式,会把消息发送给绑定给它的全部队列。  RabbitMQ的模型 RabbitMQ使用的是AMQP协议,这是一种二进制协议,默认启用的端口为5672  P代表消息生产者,也就是网RabbitMQ发消息的程序 中间件为RabbitMQ,其中包括交换器和队列 C代表消费者,也就是从RabbitMQ拿消息的程序 RabbitMQ的集群 RabbitMQ搭建有三种模式,其中集群模式有两种 ①单一模式 单机情况不做集群,单独运行一个RabbitMQ ②普通模式 默认模式,以两个节点(node_01、node_02)为例来进行说明,对于Queue来说,消息实体只是存在于其中的一个节点(node_01或node_02),node_01和node_02有相同的元数据,即队列结构,当消息进入node_01节点的Queue后,consumer从node_02节点消费时,RabbitMQ会临时在node_01、node_02间进行消息传输,将node_01中的消息实体取出并经过node_02发送给consumer,所以consumer应当尽量连接每一个节点,从中获取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue,否则无论consumer连接node_01或者node_02,出口总在node_01,这样会产生瓶颈,当node_01节点故障,node_02节点无法获取到node_01节点中还未消费的消息实体,如果消息做了持久化,那么就得等node_01节点恢复,然后才可以消费,如果没有做持久化,就会产生消息丢失的现象。 ③镜像模式 把需要的队列做成镜像队列存在于多个节点,属于RabbitMQ的HA方案,该模式下解决了普通模式中的问题,其实和普通模式不同之处在于,消息实体会主动的在镜像节点间同步,而不是在客户端取数据的时候临时拉取,该模式带来的副作用也很明显,除了降低系统的性能外,如果奖项队列数量过多,加之大量的消息进入,集群内部的带宽将会被这种同步通讯大大消耗,所以在对可靠性要求较高的场合中适用。 RabbitMQ集群搭建的注意事项 ①所有机器上,运行的erlang和rabbitmq的版本需相同(否则RabbitMQ之间不能连接到一起) ②所有机器上erlang的cookie需要相同,将/var/lib/rabbitmq/.erlang.cookie复制到其他节点,保证一直,且权限的设置要符合标准(属主属组为rabbiymq) ~]# chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie #修改后需重启服务 两个节点的RabbitMQ集群搭建 搭建epel源,配置主机名DNS解析, ~]# yum install erlang ~]# yum -y install rabbitmq-server ~]# rabbitmq-server -detached #启动 #将/var/lib/rabbitmq/.erlang.cookie复制到其他节点,并修改属主属组 node_01操作: ~]# rabbitmqctl stop_app ~]# rabbitmqctl reset ~]# rabbitmqctl join_cluster rabbit@node_02 #加入node_02集群中 ~]# rabbitmqctl start_app node_02上查看加入集群的状态 ~]# rabbitmqctl cluster_status ~]# netstat -antp #查看rabbitmq之间建立的连接 新增用户: ~]# rabbitmqctl add_user admin 123456 #新添加用户admin,并指定密码123456 ~]# rabbitmqctl set_user_tags admin administrator ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" #给用户admin授予默认vhost"/"read/write/configure权限 开启图形化管理界面 ~]# rabbitmq-plugins enable rabbitmq_management #访问http://RabbiyMq_Server_IP:15672 #建议使用rabbitmq3.6.9以上的版本和erlang最新的版本 服务 2019-04-27 评论 2738 次浏览
ssh密钥对连接 实验之前先将防火墙和SElinux关闭 iptables –F 关闭防火墙 setenforce 0 关闭selinux ssh密钥对,远程登录服务器的验证方式 默认使用账号密码验证:/etc/passwd /etc/shadow 密钥对验证(非对称密钥对),默认开启但是没有使用 /etc/ssh/sshd_config sshd的服务配置文件,该文档中注释的信息是默认生效的 私钥保存在客户端 公钥上传到服务端的指定目录下 密钥对的生成 1.windows下生成密钥对的方式:借助第三方软件:xshell,或者其他的软件 xshell:工具--新建用户密钥生成向导--选择RSA,否则一些客户端不一定支持 *.pub(公钥) 上传到指定的位置,放在谁的家目录中就登录到哪个用户,在密钥属性中查看公钥,导出。/etc/ssh/sshd_config 中指定了公钥的存放位置,放在目标主机的哪个家目录下就以谁的身份登录。 ~/.ssh/authorized_keys 公钥的存放文件,每一个公钥文件必须为单独的一行。 开启目标主机上的私钥认证 ~]#vim /etc/ssh/sshd_config 取消以下两行的注释 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 重启ssh服务端 ~]#service sshd restart 此时可以直接使用ssh取连接目标主机 私钥:用于连接目标主机,私钥的生成过程中会询问是否加密私钥,使用shh工具进行连接。 尝试使用使用远程工具连接目标主机。 2.linux下生成密钥对 ~]#ssh-keygen -t rsa|dsa -b 2048 默认生成的密钥对保存在~/.ssh/ -t 支持rsa或者dsa类型 -b 指定密钥对长度 于linux下生成的密钥对,我们需要将公钥上传到目标服务器上,以实现密钥对验证。 ~]#ssh-copy-id IP #将生成的公钥同步到指定服务器上指定用户家目~/.ssh/authorized_keys文件中 使用远程复制的方式将公钥上传到指定服务器上的指定位置 ~]#scp id_rsa.pub lm@192.168.11.20:/home/lm/.ssh/authorized_keys 开启目标主机上的私钥认证 ~]#vim /etc/ssh/sshd_config 取消以下两行的注释 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 重启ssh服务端 ~]#service sshd restart 此时可以直接使用ssh取连接目标主机 ~]#ssh username@IP 如果在生成密钥的时候没有指定私钥密码则会直接登录到目标主机,且密钥对的连接优先级高于直接使用密码。 ~]#scp ~/.ssh/id_rsa.pub lm@192.168.11.20:/home/lm/.ssh/ 上传到目标主机后进行改名或者将密钥导入到~/.ssh/authorized_keys中,或改名。 仅允许密钥对登录,禁止密码登录 首先我们要确保SSH公钥认证开启 ~]#vim /etc/ssh/sshd_config 取消以下两行的注释,并保证参数为yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 修改完毕重启ssh服务 禁止密码安全验证: ~]#vim /etc/ssh/sshd_config 修改以下参数: PasswordAuthentication no ~]#service sshd restart 重启ssh服务,如果当前正处于连接状态,可能会重启失败,可以尝试重启操作系统。 使用一台新的主机尝试尝试连接,结果如下: xshell连接时密码选项禁用:  服务 2018-06-23 评论 2508 次浏览
DNS-域名服务器 DNS的指定使用DNS1= 数据文件使用cp -a 进行复制,否则属主属组会对DNS解析造成影响。 资源解析记录: A记录 A记录也称为主机记录,是最广的DNS记录,A记录的基本作用就是就是说明一个域名对应的IP是多少个,A记录是域名和IP的对应关系,表现的形式为www.linuxhobby.top 192.168.29.2 这就是一个A记录,A记录除了进行域名IP的对应外,还有一个高级用法,可以作为低成本的负载均衡的解决方案,比如说,www.linuxhobby.top 可以创建多个A记录,对应多台物理服务器的IP地址,可以实现基本的流量均衡,但是由于没有算法,可以理解为是一种不公平的负载,只是实现了访问的轮询,也就是说A记录是可以有多个的。 NS记录 NS记录和SOA记录是任何一个DNS区域都不可或缺的两个条件,NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS负责解析,SOA记录用于说明负责解析的DNS服务器中哪一个是主服务器。因此任何一个DNS区域都不可能缺少这两条记录。NS记录,说明了在这个区域里,有多少个服务器来承担解析的任务。 SOA记录 SOA记录又叫起始授权记录,SOA记录说明了在众多的NS记录里哪一台才是主要的服务器 MX记录 邮件交换记录,在使用邮件服务器的时候,MX记录是无可或缺的,比如A用户向B用户发送一封邮件,那么他需要向DNS查询B的邮件交换记录,DNS在定位到B的MX记录后反馈给A用户,然后A用户将邮件投递到B用户的MX记录服务器里。 CNAME记录(一定会用到) CNAME又叫别名记录,可以避免暴露真实的域名,比如在一个网站a.com发布的时候,它可以建立一个别名记录,把b.com发布出去,这样就可以达到隐藏自己的目的。别名是将一个域名指向另一个域名。 PTR记录 PTR记录也被称为指针记录,PTR记录是A记录的逆向记录,作用是把IP地址解析为域名。由于我们之前提到过,DNS的反向区域负责从IP到域名的解析,因此,如果要创建PTR记录,必须在反向区域中创建。 网络服务-域名服务器 DNS的作用: 正向解析:域名-->IP 反向解析:IP—>域名 按照IP的网段命名,网段要倒着写(192.168.29.029.168.192) DNS的查询方式: 查询方式分类: 1. 递归查询(必须返回准确的结果) 客户端向DNS服务器发起的查询为递归查询 DNS一定要返回地址,如果首选DNS不知道,首选DNS会查询其他DNS服务器 2. 迭代查询(必须返回近似的结果) 一般,DNS服务器之间的查询称为迭代查询 目标DN可以向源DNS返回一个近似的结果,可以是其他目标的DNS地址 源DNS会向下一个DNS服务器继续查询,直到得到正确的地址 从查询的内容分类: 正向查询:由域名查询IP 反向查询:由IP查询域名 DNS管理(机构) IANA 分配ip地址和域名 ICANN 互联网名称与数字地址分配机构 A. 通过/etc/hosts文件进行管理,从文件服务器下载,覆盖/etc/hosts里的内容(使用定时任务)。 B. 搭建域名服务器:DNS 降低了客户端的操作的复杂难度,加重了服务器端的维护难度。 C. 分布式DNS: 优点:减轻了单台服务器压力 缺点:时间过长;管理麻烦 解决方案:每级服务器直连下级,允许重名 域名的管理 域名的等级划分: 顶级域名:.com .cn .top 二级域名:Linuxhobby baidu 三级域名:www mail blog 工作的模式:以访问www.kernel.org为例 1. 客户机首先查看本地的hosts文件,如果有则返回,否则执行下一步。 2. 客户机查看本地缓存,是否存在本条目的缓存,如果有则直接返回,不再向外发出请求,否则进行下一步,转发用户的请求给本地DNS。 3. 将请求转发给本地DNS服务器。 4. 查看域名是否本地解析,是则本地解析返回,否则进行下一步 5. 本地DNS服务器首先在缓存中查找,有则返回,无则进行下一步。 6. 向全球13个根域服务器发起DNS请求,根域返回org域的地址列表。 7. 使用某一个org域的IP地址,发起DNS请求,org域返回kernel域服务器地址列表。 8. 使用某一个kernel域IP地址,发起DNS请求,kernel域返回www.kernel.org主机的IP地址,本地DNS收到之后返回给客户机。 DNS服务器之间的查询称为递归查询,压力主要在服务器端。 主机—>本地DNS之间的查询称为迭代查询,压力在客户端。 DNS的软件名:bind DNS服务名:named 端口: UDP 53 :数据通信(域名解析) TCP 53 :数据同步(主从同步) DNS服务的配置文件: /etc/named.conf 主配置文件 服务器的运行参数 /etc/named.rfc/1912.zones 区域文件 服务器解析的区域配置 /var/named/xx.xx 数据文件 主机名和IP地址的对应关系 主DNS服务器 关闭服务器上的防火墙和SELinux ~]#iptables –F ~]#setenforce 0 软件的安装 ~]#yum install bind #安装DNS软件 配置主配置文件:/etc/named.conf 此配置文件的格式要求较为严格 ~]#vim /etc/named.conf #编辑DNS的主配置文件 options { #本机IP,可以是多个网卡中的其中一个IP listen-on port 53 { any; }; #声明服务器监听的端口(客户机通过哪个端口连接) listen-on-v6 port 53 { ::1; }; #IPV6的本地回环地址 directory "/var/named"; #数据目录 #以下三个为数据文件 dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; #允许哪些客户端访问 recursion yes; 配置区域文件:/etc/named.rfc1912.zones 我们需要先对区域文件进行备份,因为这个文件需要删除一些东西。 ~]#vim /etc/named.rfc1912.zones 删除多余的模板,只留下一个正向和一个反向(反向修改时,网络位需要反写。) zone "linuxhobby.top" IN { #指明要增加的DNS的名称 type master; #指明增加的DNS的主要区域 file "named.localhost"; #设置实现正向域名的解析的区域配置文件名 allow-update { none; }; #该DNS不允许动态更新 }; 网络地址反写, zone "11.168.192.in-addr.arpa" IN { #指明该区域为反向查找区域 type master; #指明反向查找区域为主要区域 file "linuxhobby.fan"; #设置反向查找区域的区域配置文件名 allow-update { none; }; #设置该DNS不允许动态更新 }; 配置数据配置文件:/var/named/ A. 先复制生成正向解析和反向解析文件  ~]#cp –a named.localhost linuxhobby.zheng ~]#cp –a named.loopback linuxhobby.fan 编辑正向解析文件:(注意结尾的 . ) ~]#/var/named/linuxhobby.zheng $TTL 1D #生存周期1天 @ IN SOA linuxhobby.top. rname.invalid. ( #根域不能忘记写 @表示当前的DNS域 0 ; serial #序列号 1D ; refresh #更新时间 1H ; retry #重试时间 1W ; expire #过期时间 3H ) ; minimum #缓存时间 NS dns.linuxhobby.top. #表示该区域的授权服务器 dns A 192.168.11.10 #主机记录 www A 192.168.11.11 #主机记录 AAAA ::1 #IPV6的主机记录,可以不使用 编辑反向解析文件(注意结尾的 . ) ~]#vim /var/named/linuxhobby.fan $TTL 1D @ IN SOA linuxhobby.top. rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns.linuxhobby.top. 10 PTR dns.linuxhobby.top. 20 PTR www.linuxhobby.top. 这是通过配置文件来解析,只能解析一个域:linuxhobby.top 生产环境使用的是数据库。 实验总结:实验过程中出现了本机能够nslookup 域名,但是其他主机连接不上的情况,耗时1天,排查出错误为防火墙未关闭,导致DNS服务器不能够连接上。 DNS从服务器: 先关闭服务器上和客户机上的防火墙,SELinux 搭建从服务器的目的:减轻DNS主服务器的压力。 需要一台主服务器、一台从服务器、一台测试机 搭建主服务器: 关闭防火墙和SELinux 安装bind软件 修改主配置文件:/etc/named.conf 填写监听的本地的IP 修改区域配置文件:/etc/named.rfc1912.zones(先将此文件本分) zone "linuxhobby.top" IN { type master; file "linuxhobby.localhost"; allow-update { 从服务器地址; }; }; zone "11.168.192.in-addr.arpa" IN { type master; file "linuxhobby.loopback"; allow-update { 从服务器地址; }; }; 将allow-update参数添加从服务器地址 修改数据文件:/var/named/named.localhost 正向配置文件 /var/named/named.loopback 反向配置文件 启动named服务:~]#service named start 搭建从服务器的流程: 安装bind软件 修改主配置文件:/etc/named.conf ptions { listen-on port 53 { any; }; #此处为本地主机的IP地址 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; #允许所有人访问 修改区域配置文件:/etc/named.rfc1912.zones (先将此文件备份) zone "linuxhobby.top" IN { type slave; #类型为从服务器 masters { 192.168.11.10; }; #指定主DNS的地址 file "slaves/linuxhobby.localhost"; #目录为/var/named/slaves/ allow-update { none; }; }; zone "11.168.192.in-addr.arpa" IN { type slave; #类型为从服务器 masters { 192.168.11.10; }; #指定主DNS file "slaves/linuxhobby.loopback"; #目录为/var/named/slaces allow-update { none; }; }; 删除区域配置文件中多余的模板,只留下一个正向和一个反向(反向修改时,网络位反写) 重启服务~]#service named restart 测试从服务器是否有效。 在其他主机上指定从服务器的地址为DNS,进行测试。 ####DNS缓存服务器: 缓存DNS搭建的准备: 先关闭服务器和客户机上的防火墙和SELinux 作用:加快解析速度,提高工作效率 软件:dnsmasq 配置文件:/etc/dnsmasp.conf 找到以下条目修改 domain=域名 需要解析的域名  server=IP 主服务器的IP  cache-size=15000 声明缓存的条数  修改完成后保存配置文件,并启动dnsmasq服务 ~]#service dnsmasq start 使用测试机指定缓存DNS进行测试  实验总结:在实验过程中更改DNS数据文件名称时出现了字母写错的情况,因此要注意 ####DNS分离解析: 需要先关闭服务器和客户机上的防火墙和SELinux 实验环境: 内网主机:test1 ip: 192.168.111.10 vmnet11 网页服务器 test2 ip: 192.168.100.20 vmnet10 192.168.111.20 vmnet11 网关服务器(DNS)test3 ip: 192.168.100.30 vmnet10 ip: 192.168.111.30 vmnet11 外网客户机:test4 ip:192.168.100.40 vmnet10 按给出的列表配置各主机的网络参数,并测试是否互通 测试主机需要指定网关,DNS 网页服务器安装apache用于提供测试 ~]#yum install httpd #安装web服务器 ~]#service httpd start #启动网络服务  网关服务器安装 安装bind软件,用于支持DNS服务。 修改主配置文件:/etc/named.conf include "/etc/named.rfc1912.zones"; #此行需要注释掉 此文件的格式每一行末尾需要加上分号 view lan { match-clients { 192.168.11.0/24; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/lan"; }; view wan { match-clients { 192.168.100.0/24; }; #可以填写any,遵循匹配即停止 zone "." IN { type hint; file "name.ca"; }; include "/etc/wan"; }; 生成自定义的区域文件 ~]#cp –a named.rfc1912.zones lan zone "linuxhobby.top" IN { type master; file "lan-linuxhobby.localhost"; allow-update { none; }; }; zone "11.168.192.in-addr.arpa" IN { type master; file "wan-linuxhobby.loopback"; allow-update { none; }; }; ~]#cp –a named.rfc1912.zones wan zone "linuxhobby.top" IN { type master; file "wan-linuxhobby.localhost"; allow-update { none; }; }; zone "100.168.192.in-addr.arpa" IN { type master; file "wan-linuxhobby.loopback"; allow-update { none; }; }; cp -a named.localhost lan-linuxhobby.localhost cp -a named.loopback lan-linuxhobby.loopback cp –a named.localhost wan-linuxhobby.localhost cp –a named.loopback wan-linuxhobby.loophost 改名并修改相应的正向解析、反向解析。 注意名称的拼写 启动服务并测试。 DNS的MX邮件交叉记录实现,在正向解析中键入 MX 3 IP地址 mail A IP地址 mx记录中的数字“10”是mx记录优先级的大小。优先级高低顺序按数字从小到大排列。如果您有多条mx记录,注意合理设置优先级顺序。 服务 2018-06-22 评论 2401 次浏览
网络服务-DHCP原理 DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) 是一个局域网的网络协议,使用UDP工作,用途: 1. 给内部的网络或者网络服务供应商自动分配IP地址、子网掩码,网关以及DNS等TCP/IP信息。 2. 给用户或者内部网络管理员作为对所有计算机作中央管理的方法。 优点: 减少了管理员的工作量 避免输入错误的可能 提高了IP地址的利用率 方便客户端的配置 避免IP的冲突 缺点:当局域网中有两台DHCP服务器,从谁获取IP是不确定的。 DHCP服务器需要有固定的IP,才能给其他主机分配IP、子网、掩码、DNS XP在局域网中如果开启自动获取IP,且局域网中没有DHCP服务器的话,XP会一直进行广播。 Win7及以上,开启自动获取IP,没有DHCP服务器时,在请求一段时间之后,停止请求,随机分配一个169网段的IP地址,为了停止广播。 DHCP的请求过程: 前提:局域网中存在DHCP服务器 A:客户机进行IP的请求(DHCP DISCOVER) 当一个DHCP客户机启动时,客户机会将自己的IP地址设置成0.0.0.0,由于这并不是一个能够通信的IP,所以客户机就必须通过DHCP服务器来获取一个合法的IP地址,但是客户机不知道DHCP服务器的地址,因此DHCP客户机使用0.0.0.0作为源地址,使用UDP68端口作为源端口,使用255.255.255.255作为目标地址,使用UDP67端口作为目的端口来广播请求IP地址信息广播信息中包含了DHCP客户机的MAC地址和计算机名,以便DHCP服务器能够确定是哪个主机发送的请求。 B:服务器响应(DHCP OFFER) 当DHCP服务器接收到客户机请求IP地址的信息时,DHCP服务器就在自己的地址池中查找是否有合法的IP地址提供给客户机,如果有合法的IP,DHCP服务器就将此IP做上标记,加入到DHCPOFFER的消息中,并将DHCPOFFER信息广播: DHCP客户机的MAC地址;DHCP服务器提供的合法的IP地址;子网掩码;默认网关(路由);租约期限;DHCP服务器的IP地址。 由于DHCP客户机还没有合法的IP,因此DHCP服务器使用自己的IP作为源IP,UDP67端口作为源端口;使用255.255.255.255作为目标地址,使用UDP68端口作为目的端口来广播DHCPOFFER信息 C: 客户机选择IP(DHCPREQUEST) DHCP客户机收到的第一个DHCPOFFER消息中选择IP地址,DHCP服务器会将分配出去的IP保留,这样该地址就不会提供给其他客户机,在DHCP客户机从第一个DHCP服务器接收DHCPOFFER并选择IP后,DHCP租约的第三个过程发生。客户机广播DHCPREQUEST消息广播到所有的DHCP服务器,因为在客户机接收到DHCPOFFER包的时候已经获取到了DHCP服务器的IP地址,客户机给所有DHCP服务器发送DHCPREQUEST包,目的有两个: 1. 告诉响应客户机DHCPOFFER包最快的的DHCP服务器,接受分配的IP。 2. 告诉其他DHCP服务器,自己已经获取到了合法IP。这样其他DHCP服务器就不会将IP一直标记到发送DHCPDISCOVER消息的客户机的MAC,就会将为其保留的IP取消,用于下一个IP租约请求。 客户机在选择IP的时候,依然是没有配置IP地址的,因此客户机任然使用0.0.0.0的地址作为源地址,使用UDP68端口作为源端口,使用255.255.255.255作为目标地址,UDP67端口作为目标端口来广播DHCPREQUEST信息。 D:服务器确认租约(DHCPACK) DHCP服务器接收到DHCPREQUEST消息后,以DHCPACK的形式向客户机广播租约成功的确认,该消息包含IP地址的有效租约信息和其他可能配置的信息,虽然在这一步服务器已经确认了客户机的请求,但是客户机还没有收到,因此DHCP服务器还是以广播的形式发送DHCPACK包。 服务器使用自己的IP地址作为源地址,使用UDP67端口作为源端口,使用255.255.255.255作为目标地址,UDP68端口作为目标端口广播DHCPACK消息。如果客户机收到服务器的确认,那么客户机就能够配置IP,完成TCP/IP的初始化。 D(1):服务器确认租约(DHCPNACK|DHCPNCK) 如果DHCPREQUEST不成功,例如客户机尝试租约之前分配的IP地址,但是该IP地址不再可用,或者因为客户机移到其他子网,该IP无效时,DHCP服务器将广播否定确认消息DHCPNACK,客户机接收不到成功的确认时将会重新开始DHCP租约的过程。 客户机将DHCP服务器分配的IP进行配置,并针对获得的IP发送ARP REQUEST,进行IP冲突的检测,如果有人使用该IP,等待一段时间(一般为10s),再次尝试请求该地址,如果还是无法使用该地址,则向服务器发送DHCP RELEASE报文,放弃该IP地址。 如果在局域网内没有DHCP服务器,或者DHCP主机找不到DHCP服务器,DHCP主机将会从TCP/IP的B类网段169.254.0.0/16中随机挑选一个IP地址作为自己的IP地址,继续每间隔5分钟尝试与DHCP服务器进行通信,一旦与DHCP服务器取得联系,则客户机放弃自动配置的IP地址,使用DHCP服务器分配的的IP地址。 DHCP客户机的续租: DHCP客户机会在租约过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCP REQUEST消息包,客户机就会根据包中所提供的新的租期以及其他已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有接收到DHCP服务器的回复,则客户机继续使用现在的IP地址,直到租约的87.5%。 如果在租约已使用50%的情况下没有更新,则客户机到租约过去87.5%的时候再次向为其提供IP地址的DHCP服务器取得联系,度过依旧没有获取到更新确认,则继续使用该IP地址直到租约的100%,放弃该IP重新广播DHCPDISCOVER报文。 DHCP租约的过程:简化 客户机请求IP 客户端发送DHCP Discover DHCP客户端广播请求IP地址 源地址0.0.0.0 目标地址255.255.255.255 服务器响应 服务器向客户端响应DHCP服务 源地址:192.168.10.10 目标地址:255.255.255.255 DHCP服务器提供的IP地址:192.168.10.120 此处只是提供一个IP地址 客户机选择IP 客户机选择IP地址,尝试连接192.168.10.120,如果连接不上则占用该地址。 客户端广播 选择DHCP服务器(192.168.10.10) 源地址:0.0.0.0 目标地址:255.255.255.0 租约期限为8天(默认) 服务器确定租约 DHCP服务器确认 源地址:0.0.0.0 目标IP:255.255.255.255 DHCP动态主机配置协议 DHCP有避免和固定IP冲突的机制 当客户机重启时可能有三种可能: 1. 客户机重启后直接访问DHCP服务器是否能续约,如果能就继续续租。 2. 客户机重启后DHCP服务器挂掉了,客户机无法得到响应,则继续使用该IP地址,直到租约的50%,。 3. 当客户机在租约过半没有连接到DHCP服务器时,则使用IP至租约时间的87.5%,再次向DHCP服务器请求续租,如果还是连接不上,则继续使用IP地址直至租约结束。重新发送Discover包 服务 2018-06-22 评论 2552 次浏览
DHCP 服务的基本搭建 准备环境:两台网络连接设定为自定义的VMnet*模式 a主机:192.168.10 DHCP服务器,必须要有分配网段的固定IP b主机:自动获取 DHCP客户机 主机环境:关闭防护。 ~]#iptables –F #关闭防火墙 ~]#setenforce 0 #关闭SELinux 关闭VMware虚拟网络编辑器的DHCP功能。 UDP67端口:DHCP服务器端口,用于接收客户端的请求。 UDP68端口:DHCP客户机端口,用于向服务器发送数据包,接收来自于服务器的数据包。 a主机安装dhcp软件 ~]#yum install dhcp 安装完成后对DHCP服务端的配置文件进行编辑 /etc/dhcp/dhcpd.conf DHCP服务端配置文件 在打开该文件时告知,模板文件在/usr/share/doc/dhcp*/dhcpd.conf.sample 删除不全的subnet,只保留较全面的一个。 注意:配置文件中每一行以分号结尾。 声明要分配的的网段和子网掩码 subnet 192.168.10.0 netmask 255.255.255.0 { #声明网段中可用的地址池 range 192.168.10.100 192.168.10.200 ; #设置DNS域 option domain-name “linuxhobby.top” ; #设置DNS服务器地址 option domain-name-servers 8.8.8.8 ; #广播地址可有可无 option boradcast-address 192.168.10.255 #设置默认网关 option routers 192.168.10.1 ; #默认租约(s) default-lease-time 600 max-lease-time 7200 } 配置完成后保存 重启DHCP服务:~]#service dhcpd restart 重启客户机的网卡:~]#ifdown eth0 ; ifup eth0  开启B主机,配置网卡为自动获取(dhcp)  重启b主机网卡:~]#ifdown eth0 ; ifup eth0 开启a主机的日志,查看客户机租用IP的情况 ~]#tail –f /var/log/messages #查看DHCP服务端日志,查看客户机获取的过程  ~]#ifconfig #查看b主机的网卡信息  ~]#cat /etc/resolv.conf #查看DNS的获取情况  保留地址(固定地址分配) 就是将一个IP地址固定分配给一台主机,需要标明主机的MAC 关闭虚拟机的DHCP设置 ~]#arp –a #查看客户机的mac地址 修改配置文件:/etc/dhcp/dhcpd.conf host fantasia { #想要固定分配给客户机的IP地址 hardware enthernet 客户机的MAC地址 ; 固定分配给客户机的IP地址 ; fixed-address 地址池外的某一IP }  ~]#ifup eth0 #客户机b开启网卡 ~]#ifconfig #查看客户机的网卡信息  a主机的日志记录: ~]#tail –f /var/log/messages #b主机上监视日志  超级作用域(同一局域网) DHCP服务器上可为单个物理网络上的客户端提供多个作用域租约 超级作用域就是当前的DHCP地址池不够用时,拿出备用的地址池,超级作用域中地址池是不同的网段,因此超级作用域的实现需要单臂路由的支持,否则不同的网路之间不能够通信。 也可以使用一个B类网段作为地址池,这样就可以不借助单臂路由实现IP的分发。 实验环境的准备: 三台处于同一网络的虚拟机,一台DHCP服务器,两台DHCP客户端。 a主机:DHCP服务器,需安装dhcp包 b主机:DCHP客户机 c主机:DHCP客户机 操作: 关闭虚拟机的DHCP分配 首先修改DHCP服务器上的配置文件 ~]#/etc/dhcp/dhcpd.conf #修改a主机上的配置文件 需要将网段的声明和主机声明全部注释掉,大括号。 shared-network public { subnet 192.168.10.0 netmask 255.255.255.0 { #声明地址池,此处为了试验地址池声明1个可用IP range 192.68.10.100 192.168.10.100 ; #声明网关 option routers 192.168.10.1 ; } subnet 192.168.11.0 netmask 255.255.255.0 { 声明地址池 range 192.168.11.200 192.168.11.220 ; 声明网关 option router 192.168.11.1 ; } } ~]#service dhcpd restart #重启a主机的dhcp服务端 在a主机上配置一块子网卡,作为网关,以实现单臂路由。 ~]#ifconfig eth0:0 192.168.11.10/24  将b主机放在与a主机同一物理网络中,设置b主机获取IP的方式为dhcp ~]#ifup eth0 #开启b主机的网卡  b主机获取IP在a主机的/var/log/message下日志记录为:  开启c主机的网卡,从dhcp服务器上去获取IP: ~]#ifup eth0  c主机获取IP时在DHCP服务器上的日志为  总结:在实验过程中遇到了开启DHCP服务,但是不是从开启的DHCP服务器上获取的IP,经查找,是由于没有关闭虚拟机软件的DHCP分发导致。 此时DHCP能够正常获取IP但是b主机和c主机之间是不能够通信的,需要打开DHCP服务器上的转发功能。 ~]#vim /etc/sysctl.conf 将net.ipv4.ip_forward = 0 改为net.ipv4.ip_forward = 1 ~]#sysctl –p 同步内核的参数,通知内核将信息转发 DHCP中继 实验环境准备: 清空防火墙规则 关闭SELinux 关闭虚拟机网卡的的DHCP选项 test1 vmnet11 dhcp客户机 192.168.111.10 test2 vmnet12 dhcp客户机 192.168.122.20 test3 vmnet10 dhcp中继 192.168.100.30 vmnet11 192.168.111.30 vmnet12 192.168.122.30 test4 vmnet10 dhcp服务器 192.168.100.40 在虚拟机中建立好虚拟的网段:  DHCP服务器一台:连接内网的VMnet10 修改对应的网卡参数,配置静态IP,修改后重启 指定网关为中继服务器上eth3的地址192.168.10.11 安装dhcp包 配置dhcp:/etc/dhcp/dhcpd.conf 只留较为全面的subnet subnet 192.168.11.0 netmask 255.255.255.0 { range 192.168.11.50 192.168.11.100 ; option domain-name-servers 114.114.114.114 ; option domain-name “linuxhobby.top”; option routers 192.168.11.11 ; option broadcast-address 192.168.11.255 ; default-lease-time 600 ; max-lease-time 7200 ; } 将此段重复再相应的位置写入三遍(对应本实验) 配置好后重启DHCP服务 一台中继服务器: eth0(192.168.11.11) 连接内网的VMnet11 eth1(192.168.12.11) 连接内网的VMnet12 eth2(192.168.13.11) 连接内网的 VMnet13 eth3(192.168.10.11) 连接内网的VMnet10  作为中继的服务器需要修改网卡参数 删除UUID 修改对应的MAC地址 修改网卡名称 Tips:有几块网卡就修改几块,结合虚拟机的网卡顺序,/etc/rules.s/70-persistent-net.rules文件、以及网卡的配置文件判断网卡的顺序是否正确。 安装dhcp包 修改/etc/sysconfig/dhcrelay 第四行填入网卡名称,先写DHCP服务器的网卡 第六行填入DHCP服务器的地址  启动中继服务 ~]#service dhcrelay restart 开启主机的转发功能 ~]#vim /etc/sysctl.conf #打开内核的转发开关 将net.ipv4.ip_forward = 0 改为net.ipv4.ip_forward = 1 监测主机的DHCP日志 ~]#tail –f /var/log/messages 三台客户机以dhcp方式获取IP地址 重启第一台主机的网卡,获取的结果为  重启第二台主机的网卡,获取的结果为  重启第三台主机的网卡,获取的结果为  服务 2018-06-21 评论 2638 次浏览
ARP欺骗实验 实验规划: 同一网段的主机三台 主机1 客户机 192.168.11.10 主机2 欺骗机 192.168.11.20 主机3 网关机 192.168.11.30 安装Apache 主机1:客户端 配置IP(192.168.11.10) 指定客户机网关: ~]#route add default gw 192.168.11.30 ~]#traceroute 192.168.11.30 测试是否可以连通 在网关机上安装httpd,客户机使用命令测试连接 ~]#curl 192.168.11.30 直接获取网页代码 或者 ~]#elinks 192.168.11.30字符终端浏览器 欺骗机安装欺骗软件4个rpm包 进入软件所在目录,借助yum解决软件之间的依赖关系,安装arp欺骗所需要的软件包 ~]#yum install * dsniff-2.4-0.17.b1.el6.x86_64 libnet-1.1.6-7.el6.x86_64 libnids-1.24-1.el6.x86_64 ssldump-0.9-0.9.b3.el6.x86_64 开启欺骗机的网络转发功能 ~]#vim /etc/sysctl.conf 将net.ipv4.ip_forward = 0修改为net.ipv4.ip_forward = 1 开启IPv4的数据包转发功能 ~]#sysctl –p #更新内核的参数 在欺骗机上执行欺骗命令: arpspoof通过伪造arp回复包将局域网中主机A或者所有主机的网络包重定向到B主机 ~]#arpspoof –i eth0 –t 192.168.11.10 192.168.11.30 监听网卡eth0上192.168.11.10 到 192.168.11.30的数据 -i 指定监听的网卡 -t 指定arp攻击的目标,不指定目标没该局域网中所有机器,可以指定多个目标 执行的命令: ~]#arpspoof -i eth0 -t 来源IP地址 目标IP地址 #前台交互式不可停止的命令,不能放入后台 -i 指定监听的网卡 此命令为前台的交互式命令,不能够放入后台。 通过客户机连接192.168.11.30网关主机,此时客户机仍然可以访问网关机。 再打开一个欺骗机的远程终端,配置一条防火墙规则: ~]#iptables -A FORWARD -s 来源IP地址 -j REJECT -A 追加的方式添加防火墙规则 -I 插入式的方式添加防火墙规则 FORWARD 经过的的数据 -s 来源地址 -j 如果前面符合要求执行的动作 REJECT 拒绝,告诉发送方该数据包被拒绝 DROP 丢弃,直接丢弃,不通知发送方 表示欺骗机接收到客户机的数据需要转发时,全部拒绝。 再次使用客户机去连接网关机,此时客户机不能连接。 arp欺骗的解决办法: ~]#arp –a 我们会发现192.168.11.20和192.168.11.30拥有相同的MAC地址,这就是ARP欺骗的原理。 在客户机上执行以下命令,将网关的IP和MAC地址绑定,这样就可以正常通过网关进行数据通信。 ~]#arp –s 192.168.11.30 网关机的MAC地址 linux下字符终端的浏览网页方式 elinks 字符终端浏览器 curl 直接获取网页代码 防火墙规则的删除 ~]#iptables –D FORWARD(chain链) #(roulenum规则编号,即第几条) ~]#traceroute IP|域名 -L 使用ICMP协议进行测试,linux默认使用UDP -p 3 指定测试时发送的数据包个数(即测试的次数) -n 以IP的方式进行连接测试,避开DNS的解析,减少延时 当返回值中出现*号时,一般情况是中间节点的防火墙封掉了ICMP的返回值 当返回值从中间到结束都是*号时,一般情况为目标服务器拒绝接受UDP数据包,或者禁止了ICMP的返回包。 实验总结:在安装软件的时候yum的依赖关系解决不了,但是重新启动后解决了依赖关系,后查明是因为还原快照时挂载出现问题,重新挂载解决。 服务 2018-06-20 评论 2487 次浏览