我的第200篇博客:Linux下手把手搭建DHCPDNSHTTPFTP服务器及遇到问题的解决过程

Posted Zeker62

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第200篇博客:Linux下手把手搭建DHCPDNSHTTPFTP服务器及遇到问题的解决过程相关的知识,希望对你有一定的参考价值。

这是我的第200篇博客,所以我打算写一个质量还算高的文章。

今天耗时11个小时,在CentOS 上搭建一个功能相对完整的服务器,用来检验我这几天的学习成果。(不一定非要CentOS,Ubuntu也很香)

搭好一个服务一定要记得保存快照!

建议学习者手动搭建一个服务器,不建议一开始就使用phpstudy等集成环境。

在搭建服务器之前,要有基本的Linux操作知识,基本计算机网络知识,还有,英语知识~

好了,下面开始记录我的搭建过程

安装Linux虚拟机

  • 使用VMware 安装centos虚拟机(Ubuntu也可,Redhat也可……甚至kali也可),建议使用阿里云镜像,比清华的要快很多
  • https://developer.aliyun.com/mirror/
  • 下载好后一步到位操作,这里要注意网卡的选择,由于我们是在内网搭建的,所以我们要新建一个内网的网卡,并取消DHCP服务(因为Linux待会要作为DHCP服务器出现)。打开编辑——虚拟网络编辑器
  • 打开CentOS,不用手动规划盘符,除非你的目的是运维要练习盘符划分,而我的目的是为了搭建一个渗透测试环境。图我就不截了,相信自己,就一直下一步即可。
  • 接下来就是静静等待安装完成。
  • 如果你安装了PHPstudy或者其他集成环境,建议还是重新装一个虚拟机吧,端口号的冲突是比较麻烦的事情,我不是做运维的,所以搭建服务器我是用的是最简单的方式——从0开始
  • VMwareTools建议安装上(可以自动安装,安装不了就插入VMware目录下一个Linux.iso的光盘进行安装,还不成功就是镜像没有下载正确,不兼容),这个工具非常方便,可以拖拽物理机文件或者剪贴板到虚拟机。

安装阿里云镜像源

备份镜像源文件 /etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

如果出现找不到文件的错误,我们到目录下查看一下:

噢,原来名字不一样,改一下名字就可以了

mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo   /etc/yum.repos.d/CentOS-Base.repo.backup

wget抓取内容并写入镜像源

wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-8.repo

打开看一下CentOS-Linux-BaseOS.repo 的内容,发现它的前身就是CentOS-Base.repo

检验一下谁否真的有用,更新一下缓存

yum makecache


success!

搭建DHCP服务器

配置静态IP地址

DHCP服务器是用来分配IP地址的,但是呢我们目前还没有IP地址,所以要手动配置。

这里有图形界面,所以不建议使用命令行(容易打错字),待会回到配置文件中检验,这里我使用了两块网卡,因为要从互联网安装各种服务插件呀,一个对内,一个对外


由于待会我们也要做DNS服务器,所以这个DNS服务器就是自己,也一并设置了吧

检验一下:ifconfig

或者去文件里检验一下,

vim /etc/sysconfig/network-scripts/ifcfg-设置的网络名称

下载DHCP服务插件

yum install dhcp* -y
# -y 的意思是会自动选择yes

会下载两个软件:

打开 dhcp配置文件

vim /etc/dhcp/dhcpd.conf

空空如也?,他要我们打开一个文件,看起来像个范例,走起

看到了一个样例,英文我就不解读了,说的很详细。

我们把这个文件复制过去,直接改这个样例文件即可。

cp -r /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/

修改内容

打开样例文件修改

  • 修改域名: 改为自己的域名
  • 修改域名服务,即dns服务器,因为待会自己要作为dns服务器,写自己的就行。

    将DHCP地址配置这块如图修改,当然你也可以选择其他的example。
    其他的example就要注释掉了。

暂时不适用IP地址绑定吧,依据喜好,各种解释如下图

option domain-name #域名搜索列表,类似于/etc/resolv.conf中的search

option domain-name-servers #域名服务器地址,多个的话用逗号隔开

option routers #网关

option broadcasst-address #广播地址

option subnet-mask #子网掩码

default-lease-time #默认租约期限,一般这项生效(以秒为单位)

max-lease-time #最大租约期限(以秒为单位)

log-facility #日志存储文件
subnet NETWORK netmask MASK {…} #局部配置,为指定的网段提供服务

host hostname {…} #为指定客户机绑定IP地址(这项通常写在subnet 中) host 中的参数:

hardware ethernet #mac地址 fixed-address #为其绑定的ip地址

检查一遍没有错误就退出来吧。
把原来的文件删除,把这个样例文件重命名。

测试DHCP服务。

使用命令:

/bin/systemctl start dhcpd  

启动DHCP服务。

转到我们同样连接了虚拟网卡的物理机上:

ipconfig/all

和我们设置的一样,完美!!

遇到的问题

  • service dhcpd……的方法出错了很多次,建议使用systemctl的方法启动。
  • 配置DHCP服务的时候一定要注意IP地址的正确性
  • 多百度。
  • 租约不要过长也不要过短

搭建DNS服务器

安装DNS服务器插件

  • bind:DNS服务的主程序
  • bind-utils :工具,包含dig,nslookup等网络诊断工具。
  • bind-chroot :为BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹作力的根目录),以提高安全性。
  • bind-libs: 提供了bind.bind-utils 需要使用的库函数。

我打算快速搭建,所以后面两个程序我并没有安装(安装了也没用,因为本文不讲攻击)

yum install bind -y
yum install bind-utils -y

配置DNS服务文件知识

查看bind 、bind-utils生成哪些文件(仅列出部分文件)

rpm -ql bind   

/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #事先定义好的区域文件
/etc/named.root.key# 实现事物签名的秘钥文件
/var/named # 默认DNS解析记录的数据文件
/var/named/slaves #从DNS的配置文件目录

rpm -ql bind-utils

/usr/bin/dig # 域信息搜索器

/usr/bin/host #host文件

/usr/bin/nslookup

说明:dig(DNS lookup utility)域信息搜索器命令。

dig的常用命令格式:

dig –t 资源记录类型名称@server-ip

dig –x IP @DNS_IP 反向解析

dig –t axfr zone 验证完全区域传送

dig –t ixfr zone 验证增量区域传输(通常需要指定序列号)

named-checkconf工具

格式:named-checkconf [主配置文件]

例如:named-checkconf /var/named/named.conf

named-checkzone工具

格式:named-checkzone <域名> <区域数据文件>

例如:named-checkzone /var/named/stude

摘自:https://cloud.tencent.com/developer/article/1508115

配置文件

打开主配置文件,看英文

vim /etc/name.conf

打开文件后,把静态配置注释掉
修改自己的IP地址,以及适用的网络地址:

在根的下面设置正向查询,反向查询(这个一定要懂)


新建配置的文件,改变文件所属和权限为644

我们在zeker62.com这个区域里面添加一些可以解析的域名

$TTL 1D ;定义TTL为1天

; 必须首先定义一个SOA记录,@代表相应的区域,每个区域数据文件只能有一个SOA。SOA后面跟的是这个区域的授权主机名称,和管理者的邮箱。

@ IN SOA demo.com. Admin.demo.com. ( # 注意区域地址、管理员邮箱地址 的 点号不能忘掉

           20150914027  ; 序列号,该序号不更新的话,任何所做的更改都不会同步到其他DNS服务器上【不超过10位】

            1M  ; 定义辅助DNS每隔多久检查一次主DNS服务器的版本号

           5M  ; 同步失败后,再次重试需要的间隔时间

           1H  ; 过期时间(超过该时间主DNS还没有响应,辅助DNS也停止工作)

          1D) ; 否定答案的缓存时长

说明: M分钟、H小时、D天、W周。默认是秒

配置反向查询

反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。

PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后几行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如100对应的是192.168.1.100

检查

启动服务

systemctl start named

正向解析:

反向解析:

物理机测试:

遇到问题

这次是遇到一个大问题了,导致我重装了虚拟机

  • 不要使用 yum -y remove bind* 否则前功尽弃,包括DHCP服务
  • 如果物理机不通,试试 systemctl stop firewalld 关闭防火墙
  • 尽量在DHCP的时候不要设置域名
  • 最好设置成大家都能解析的dns服务器
  • 如果出现非权威应答,那必然是另一个网卡进行了dns转发

搭建HTTP服务器

安装Apache服务:httpd

yum install -y httpd

开启服务

systemctl start httpd

把http服务加入到开机启动项

systemctl enable httpd

开启火狐浏览器:输入127.0.0.1看是否有界面

部署静态网站

 echo "Welcome To my Web page" > /var/www/html/index.html

写一段话到这个初始页面里面去

个人用户主页功能

开通个人主页功能

vim /etc/httpd/conf.d/userdir.conf 

把disable注释掉
把userdir解除注释

登录个人账户、写入网站、更改用户访问权限,重启服务

su zeker62
echo "this is zeker's website " >public_html/index.html
chmod -Rf 755 /home/zeker62
systemctl restart httpd

这种情况说明selinux在防护

使用此命令关闭限制

setsebool -P httpd_enable_homedirs=on

成功

给网站访问加入密码

设置密码

htpasswd -c /etc/httpd/passwd zeker62
New password: ***
Re-type new password: ***
Adding password for user zeker62

配置个人文件

 vim /etc/httpd/conf.d/userdir.conf

转到第32行

重启服务

systemctl restart httpd

搭建FTP服务

这个非常简单,我们就快速一点(困了),关掉防火墙

yum install vsftpd
systemctl stop firewalld

vsftpd 服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)内容总长度达到 123 行,但其中大多数参数在开头都添加了井号(#),从而成为注释信息,大家没有必要在注释信息上花费太多的时间。我们可以在 grep 命令后面添加-v 参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中:

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak 
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf 
 cat /etc/vsftpd/vsftpd.conf 

安装\\配置ftp客户端

yum install ftp

我们使用匿名开放模式,还有其他模式是企业级要求,暂不讨论:配置如下

vim /etc/vsftpd/vsftpd.conf

测试连接

开启,并设置成开机启动

密码随便输,连接成功,但是不允许访问和创建目录,还有重定位

发现pub文件夹是管理员才能访问的

改权限

chown -Rf ftp /var/ftp/pub


继续连接

还是不行,那就是SElinux搞鬼

setsebool -P ftpd_full_access=on

再来

成功

测试


连接成功

传输文件


成功!

从早上八点半到晚上八点,终于把这个文章写完了。中间遇到了很多问题,一言难尽,难以表述,好事多磨。

路漫漫其修远兮,祝愿各位学业有成!

感谢:

https://cloud.tencent.com/developer/article/1508115
https://www.huaweicloud.com/articles/9252dd8a564679c9b209244d5c169d2a.html
https://blog.51cto.com/u_15015155/2555883
https://www.cnblogs.com/lhdz_bj/p/9936379.html
https://blog.csdn.net/weixin_34291004/article/details/91738532
https://blog.csdn.net/weixin_35720393/article/details/116744495
https://www.cnblogs.com/gered/p/11118834.html
《鸟哥的Linux私房菜,伺服器篇》
《Linux就该这么学,刘遄》
https://developer.aliyun.com/mirror/
有些忘记记录了

以上是关于我的第200篇博客:Linux下手把手搭建DHCPDNSHTTPFTP服务器及遇到问题的解决过程的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统下手把手完成无人值守安装服务

Linux系统下手把手完成无人值守安装服务

我的第一篇博客

2021 => 手把手搭建dhcp服务(详细)

手把手教如何搭建Linux环境(搭建云服务器) (Linux基础篇p1)

毕业设计无从下手?四个步骤手把手带你搭建一个后台微服务架构