防火墙规则笔记整理 防火墙机制: 一种机制是阻拦传输流通行:白名单(比如ssh端口) 一种机制是允许传输流的通行:黑名单(比如http) 一些防火墙偏重阻拦传输流的通行,一些防火墙偏重允许传输流的通行 防火墙实现的功能: 1. 可以保护易受攻击的服务 2. 控制内外网络之间网络系统访问 3. 集中管理内网的安全性,降低管理成本 4. 提高网络的保密性和安全性 5. 记录网络的使用状态,为安全规划和网络维护提供依据 netfilter:内核态模块和用户态工具,位于linux内核中包过滤体系 iptables:/sbin/iptables是用户空间工具,管理员通过iptables给netfilter变更规则 iptables规则表顺序 ``` raw表-->mangle表-->nat表-->filter表 raw表:确定是否对该数据进行状态跟踪 mangle表:为数据包设置标记,可用于办公网络的路由选择,选择备用线路办公 nat表:修改数据包中的源、目标的IP地址和端口(常用) filter表:确定是否放行该数据包(过滤)--常用 规则链的作用:对数据包进行过滤或者处理 链的作用:容纳各种防火墙规则 链分类的依据:处理数据包的不通时机 ``` 规则链: ``` INPUT 处理入站数据包 OUTPUT 处理出站数据包 FORWARD 处理转发数据包 POSTROUTING 进行路由选择后处理数据包 PREROUTING 在进行路由选择前处理数据包 ``` 规则链之间的顺序: ``` 入站 PREROUTING-->INPUT 出站 OUTPUT-->POSTROUTING 转发 PREROUTING-->FORWARD-->POSTROUTING ``` iptables语法格式 ``` iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] 选项: -A 在链的末尾追加 -I 在链的开头插入 -D 删除指定序号的规则 -F 清空所有的规则 控制类型: ACCEPT 允许通过 DROP 直接丢弃 REJECT 拒绝,对方会接收到提示 LOG 记录日志然后继续匹配下一条规则 iptables -L 列表默认显示filter表的规则条目 iptables -n 以数字的形式显示规则信息(端口、协议等) iptables -v 以更详细的方式显示规则信息 iptables --line-numbers 查看防火墙的规则时显示序号,删除时可指定该序号 ``` 调优文档 2018-07-02 1 条评论 7837 次浏览
数据库调优及基础命令整理 ``` 1. 垂直扩展:提高硬件的性能,加内存,因为数据库对内存的消耗很大 2. 线程的重用,将已完成任务的线程中断,用于新用户的响应 3. 使用缓存机制:redis等非关系型数据库,但是需要在php页面中指明先访问redis数据库 4. 对数据库进行主从复制,可以使用Amoeba实现读取压力分流 5. 分库、分表,使用连接将不同的库、表或索引放到不同的硬盘上,从I/O层面提升读写的效率 6. 使用固态SSD硬盘存取数据,从物理层面提升获取更高的效率 7. 给磁盘做RAID,提升读写的效率 8. 重新挂载文件系统,不记录文件访问时间,减少I/O的占用 9. 如果没有配置主从同步,可以关闭log-bin日志,减少磁盘I/O的占用 10. my.cnf中添加skip-name-resolve,这样可以避免由于解析主机名造成的延迟 11. 调整buffer、cache 12. 根据具体的使用场景,选择合适的存储引擎,常用的事务性存储引擎Innodb 13. 降低磁盘的写入操作,使用较大的写入缓存,inodb_log_file_size,推荐设置为0.25*innodb_buffer_pool_size 14. 单条查询后添加LIMIT1,停止全表扫描,减少磁盘的压力 15. 对常用来搜索的字段建立索引,提升查询的效率 16. 避免select * 操作,从数据库中读出的数据越多,查询就会变得越慢,如果数据库服务器和web服务器是两个独立的数据库的话,还会增加网络传输负载。 17. 应当为每张表设置一个ID作为主键,并设为AUTO_INCREMENT标志 18. 使用IP而不是域名作为数据库的路径,避免DNS解析,如果是多库,使用amoeba等中间件实现对库的调用 ``` 数据库的初始化: mysql_install_db 需要在安装路径下执行,有些命令是以相对路径执行的 修改密码: > set password=password('123456'); 创建登录的用户: > create user UserName@'%' identfied '123456'; root找回自己的密码并进行修改,跳过授权表,user表是授权表 ``` ~]# service mysqld stop ~]# echo "skip-grant-tables" >>/etc/my.conf #在配置文件末尾追加跳过授权表信息 ~]# service mysqld start ~]# mysql -uroot -p #以空密码登录数据库 > update mysql.user set password=password('123456') where user='root'; ``` mysql语句: > show databases; #显示授权给当前用户的数据库 > show tables; #显示当前数据库中有哪些表 > use DataBase_Name; #选择要操作的数据库 > create database DataBase_Name; #创建数据库 > drop database DataBase_Name; #删除数据库 > create table Table_Name(field1 Field_Type1,field2 Field_Type2...); #创建表 > drop table Table_Name; #删除当前或指定的表 > describe Table_Name; #显示当前数据库中指定表的结构(字段)信息 > alter table Old_Table_Name rename New_Table_Name; #修改数据表名称 > alter table Table_Name modify Field Field_Type; #修改字段类型 > alter table Table_Name change Old_Table_Name New_Table_Name Field_Type; #修改字段名、字段类型 > alter table Table_Name add Field Field_Type [first|after]; #增加字段,add以默认以追加的方式增加 > alter table Table_Name drop Field; #删除字段,删除一列,很危险的操作 > insert into Table_Name(Field1,Field2...) values('Values1','Values2'...); #向数据表中插入数据 > update Table_Name set Field=New_Values where 条件表达式;修改、更新数据表中的记录 > select Field1,Field2... from Table_Name where 条件表达式; #在数据库中查找符合条件的记录 between....and... #指定范围 > delete from Table_Name; #清空数据表,慎用 调优文档 2018-07-01 评论 2466 次浏览
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连接时密码选项禁用: ![](http://linuxhobby.top/usr/uploads/2018/10/2274710904.png) 服务 2018-06-23 评论 2376 次浏览
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. 先复制生成正向解析和反向解析文件 ![](http://linuxhobby.top/usr/uploads/2018/10/2248798563.png) ~]#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=域名 需要解析的域名 ![](http://linuxhobby.top/usr/uploads/2018/10/1686812453.png) server=IP 主服务器的IP ![](http://linuxhobby.top/usr/uploads/2018/10/1099066427.png) cache-size=15000 声明缓存的条数 ![](http://linuxhobby.top/usr/uploads/2018/10/3048744571.png) 修改完成后保存配置文件,并启动dnsmasq服务 ~]#service dnsmasq start 使用测试机指定缓存DNS进行测试 ![](http://linuxhobby.top/usr/uploads/2018/10/2603814936.png) 实验总结:在实验过程中更改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 #启动网络服务 ![](http://linuxhobby.top/usr/uploads/2018/10/3417397696.png) 网关服务器安装 安装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 评论 2327 次浏览
网络服务-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 评论 2478 次浏览
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 ![](http://linuxhobby.top/usr/uploads/2018/10/2643225846.png) 开启B主机,配置网卡为自动获取(dhcp) ![](http://linuxhobby.top/usr/uploads/2018/10/3378925931.png) 重启b主机网卡:~]#ifdown eth0 ; ifup eth0 开启a主机的日志,查看客户机租用IP的情况 ~]#tail –f /var/log/messages #查看DHCP服务端日志,查看客户机获取的过程 ![](http://linuxhobby.top/usr/uploads/2018/10/2602620978.png) ~]#ifconfig #查看b主机的网卡信息 ![](http://linuxhobby.top/usr/uploads/2018/10/980026270.png) ~]#cat /etc/resolv.conf #查看DNS的获取情况 ![](http://linuxhobby.top/usr/uploads/2018/10/3894974905.png) 保留地址(固定地址分配) 就是将一个IP地址固定分配给一台主机,需要标明主机的MAC 关闭虚拟机的DHCP设置 ~]#arp –a #查看客户机的mac地址 修改配置文件:/etc/dhcp/dhcpd.conf host fantasia { #想要固定分配给客户机的IP地址 hardware enthernet 客户机的MAC地址 ; 固定分配给客户机的IP地址 ; fixed-address 地址池外的某一IP } ![](http://linuxhobby.top/usr/uploads/2018/10/2037251845.png) ~]#ifup eth0 #客户机b开启网卡 ~]#ifconfig #查看客户机的网卡信息 ![](http://linuxhobby.top/usr/uploads/2018/10/3482022243.png) a主机的日志记录: ~]#tail –f /var/log/messages #b主机上监视日志 ![](http://linuxhobby.top/usr/uploads/2018/10/977606614.png) 超级作用域(同一局域网) 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 ![](http://linuxhobby.top/usr/uploads/2018/10/1137714020.png) 将b主机放在与a主机同一物理网络中,设置b主机获取IP的方式为dhcp ~]#ifup eth0 #开启b主机的网卡 ![](http://linuxhobby.top/usr/uploads/2018/10/2964374942.png) b主机获取IP在a主机的/var/log/message下日志记录为: ![](http://linuxhobby.top/usr/uploads/2018/10/1677525909.png) 开启c主机的网卡,从dhcp服务器上去获取IP: ~]#ifup eth0 ![](http://linuxhobby.top/usr/uploads/2018/10/3014683200.png) c主机获取IP时在DHCP服务器上的日志为 ![](http://linuxhobby.top/usr/uploads/2018/10/2947497925.png) 总结:在实验过程中遇到了开启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 在虚拟机中建立好虚拟的网段: ![](http://linuxhobby.top/usr/uploads/2018/10/3461434451.png) 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 ![](http://linuxhobby.top/usr/uploads/2018/10/1211130746.png) 作为中继的服务器需要修改网卡参数 删除UUID 修改对应的MAC地址 修改网卡名称 Tips:有几块网卡就修改几块,结合虚拟机的网卡顺序,/etc/rules.s/70-persistent-net.rules文件、以及网卡的配置文件判断网卡的顺序是否正确。 安装dhcp包 修改/etc/sysconfig/dhcrelay 第四行填入网卡名称,先写DHCP服务器的网卡 第六行填入DHCP服务器的地址 ![](http://linuxhobby.top/usr/uploads/2018/10/235369077.png) 启动中继服务 ~]#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地址 重启第一台主机的网卡,获取的结果为 ![](http://linuxhobby.top/usr/uploads/2018/10/3233857192.png) 重启第二台主机的网卡,获取的结果为 ![](http://linuxhobby.top/usr/uploads/2018/10/522825203.png) 重启第三台主机的网卡,获取的结果为 ![](http://linuxhobby.top/usr/uploads/2018/10/229761391.png) 服务 2018-06-21 评论 2502 次浏览