文章目录
1.概要
无论是为了解决安装vCenter Server各种问题,或者考虑自建DNS服务器给企业内网使用,DNS你都值得拥有。
其它内容传送门地址:
2.整体架构流程
- 准备一个终端工具(mobaxterm、xshell、windterm)。
- 准备Debian12系统镜像ISO。
- ESXI主机安装Debian12,开启SSH配置。
- 终端工具连接SSH,完成BIND9配置。
3.技术细节
3.1准备一个终端工具。
mobaxterm、xshell、windterm各有千秋,都好用。windterm全免费,但是各种密码输入界面BUG,但不影响使用。
- mobaxterm网址:https://mobaxterm.mobatek.net/,下载Free版就够用了,英文界面。
- xshell网址:https://www.xshell.com/zh/xshell/,xshell自称最强,付费以后的确是的。
- windterm网址:https://github.com/kingToolbox/WindTerm,中文开源免费,各种指令补全快捷执行。
3.2准备Debian12系统镜像ISO。
Debian的官网:https://www.debian.org/。
怎么读Debian,你可以开玩笑的喊它Dabian,当然基于Debian系列的Linux发行版可是很猛的噢。
点击下载,跳转页面,注意看图标注文字。
在获取Debian页面的左边下面,找到完整安装映像。
点击“64位PCxxxxx”跳转到一个全英文介绍界面别慌,这些英文是教你如何安装的,直接鼠标滚动到最下面。找到最新版torrent种子文件。
这里我建议大家用迅雷来完成下载,国内种子P2P下载迅雷还是会快点。不过这才短短两个月,Debian12的版本都出到12.1了,我之前还是12.0呢,不过没影响,除非是大版本更新,不然子版本都没啥根本区别。下载完就可以进行下一步了。
3.3ESXI主机安装Debian12,开启SSH配置。
通过浏览器登录你的ESXI主机,进入主界面,找到左侧的==“存储”==
找到你的存储设备,点数据存储浏览器
点击上载,把下载好的Debian12的ISO传输到你的ESXI主机中
上传完成后,点击左侧列表虚拟机,进入虚拟机界面,选择创建/注册虚拟机
图太多了,要命不一步一步的写了,创建虚拟机这里,正常起名字,选择各种参数就行了,唯独在第四步“自定义设置”要把咱们上传的ISO镜像给放到CD/DVD介质里,最后点击创建即可。
内心OS:我得写精简点,这个不是保姆教程啊!!!这是随笔!
创建完虚拟机后,在虚拟机列表找到你的新虚拟机,右键——控制台——启动远程控制台,会打开提示:问你是否通过VMware workstation来管理,点击打开,你就跳转到你电脑本机安装的VMware workstation里了。什么?你电脑没有VMware workstation!装一个,别在ESXI的网页界面里折磨自己。
跳转到VMware workstation后,你发现ESXI其实是帮你在VMware workstation连接了一个远程服务器,接下来所有步骤就像正常的虚拟机哪有操作就行,安装Debian12过程中的重点地方,我会在下面截图中说明。
最后等待安装就行,Debian12的安装真没啥说的,动手强的兄弟批量装机,这玩意可能就三分钟内点完安装了。安装完成后,你的ssh服务是默认打开的。
给提个知识,可以自行思考一下,与域名有关。Debian安装时要求你先输入主机名,之后又输入域名,比如.COM,.NET这些,那么比如我选.com的情况下,现在给出主机名,大家看那个更合理:
主机名 | 域名 | FQDN |
---|---|---|
baidu | .com | baidu.com |
dns | .com | dns.com |
dns.baidu | .com | dns.baidu.com |
dns.你自己瞎编的域名 | .com | dns.你自己瞎编的域名.com |
dns.公司内网规划的域名 | .com | dns.公司内网规划的域名.com |
其实答案很简单,最后两个是合理的,但最后两个其实是又加一层域了,因为二级域其实很大了,例如我自己瞎编一个域名:dns.erdaye.com.那么最左的dns就是主机名,从左往右第二个erdaye是上一级域,从左往右第三个com是再上一级域,最后是根域.,有了域名,再假如我分配的IP地址是172.31.100.100,那么这个域名以后经过DNS服务器解析
dns.erdaye.com=172.31.100.100
我再用一种格式描述主机名和多级域,例如:
小王.王村.王镇.王家区.王家市.王家省.中国.全地球.
你别看这一段长,其实最左边小王就是主机名,之后逐级往上越来越大,地球后面的那个点,就是末尾的根域了,咱们的网络域名就是这种逻辑,你问我为什么不是汉语言语系从大到小的逻辑?巧了,因为互联网它爹不是中国啊。那么现实中有这么长的域名吗?有的:0.cn.pool.ntp.org,这是国际校时中国的一个校时服务器的域名。
那为什么你在内网没见到那么多域名?原因很简单,比如你现在开了一家公司叫二大爷科技,你属于公共组织com,公司老板二话不说花重金买下了erdaye.com这个域名旗下所有域名使用权,接着你们公司有三个对外提供访问服务器,那么你的域名表就是:
- 0.erdaye.com
- 1.erdaye.com
- 2.erdaye.com
接着老板说,他要在0.erdaye.com下面再整三个对外的服务器,于是你的域名表进化成:
- 0.0.erdaye.com
- 1.0.erdaye.com
- 2.0.erdaye.com
- 1.erdaye.com
- 2.erdaye.com
额外一句,有写JAVA的,对package名的定义是不是很眼熟,如果把dns.erdaye.com倒过来改名,不就是com.erdaye.doo咯,这里的com不是网络的com,而是commom公共包的意思,言下之意我的erdaye这个包来自于最大的commom包,然后又是doo来自于erdaye这个包,这里其实可以用继承这个词更贴切。不说了,扯远了。
说明:
我不喜欢在这里给大家去粘贴一堆各种知识手册,本来这个博文就是我的口水话,能用土话能帮你最基本入门理解这玩意,之后大家再去学域名就会事半功倍。
3.4终端工具连接SSH,完成BIND9配置。
一般开始都是DHCP获得的IP,正常情况DNS服务器IP地址是需要固定的,无论你用网络高级选项配置还是nmtui,你固定IP就行配置完成后,正常保存退出,注意在你主DNS没搭建起来前,你的dns要填写为网关地址,否则你无法访问外网。
接着在Debian12里面打开终端,之后通过“ip a”命令检查IP地址是否正确,通过ping www.baidu.com检查是否与外网通讯正常。
ip a
ping www.baidu.com
su提权到root身份
su
接着修改SSH配置文件,调整为默认允许root身份登录
nano /etc/ssh/sshd_config
把PermitRootLogin前面的#号去掉,后面改为yes,然后按ctrl+x再加Y确认修改(ctrl+u撤销上一步),接着重启ssh服务
systemctl restart sshd
以windtrem为例,右键新建会话,如下配置,root是你登录的用户名,正常连接即可。
ip a
ping www.baidu.com
开局都是0配置,你的内网是即插即用的,这一步应该没毛病,有问题ping不通就去检查你的路由器。
接着去修改Debian软件仓库源,我喜欢同时指定为国内的阿里和清华源,流程如下
nano /etc/apt/sources.list
把里面的所有内容清空,把下面的内容粘贴进去,这里就提醒终端软件的好处了,wind支持你直接你在CSDN复制,然后在终端里面右键直接粘贴
deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
编辑好如下,按ctrl+x再加Y确认修改(ctrl+u撤销上一步)
接着apt-get update更新源
apt-get update
接下来安装BIND9(我的天!,写这么多才到安装!)
安装BIND9之前,得先说点前置内容,linux发行版有基于Redhat和基于Debian两条线,Debian的各类服务施工介绍都很少,Debian12又是最新版本,各种教程更少,不过因为ubuntu是基于debian的,Ubuntu的教程和Debian通用,大家之后发现Debian找不到教程,可以思路开阔一点。
这里关于BIND9的配置,我推荐一个Wiki给大家。
言归正传,安装BIND9的第一步,当然是执行下面安装语句,这里会发现BIND9有很多个包,这些我推荐你都安装,占不了几个M,避免过程中,一会缺一个,一会缺那个的。
apt-get install bind9* //我们直接使用*通配符代替所有后续包名
这时候你会遇到Debian12因为版本太过于新,而提示的包版本报错,如下:
The following packages have unmet dependencies:
bind9 : Depends: bind9-libs (= 1:9.16.42-1~deb11u1) but 1:9.18.16-1~deb12u1~bpo11+1 is to be installed
bind9-dev : Depends: bind9-libs (= 1:9.16.42-1~deb11u1) but 1:9.18.16-1~deb12u1~bpo11+1 is to be installed
说人话就是,apt包管理工具发现,安装bind9需要bind9-libs 1:9.16.42这个版本,但是这个包呢在Debian12里面预装了bind9-libs 1:9.18.16,很明显版本新了,并不向下兼容,怎么修复呢,很简单,指定版本手动安装一下bind9-libs
apt-get install bind9-libs=1:9.16.42-1~deb11u1 //注意后面的版本要和报错的一致
执行第一个bind9-libs的修复,接着再次执行,看还有什么包有问题。
apt-get install bind9* //我们直接使用*通配符代替所有后续包名
这次就没什么问题了,正常执行安装过程。安装完成后,默认BIND9就在运行状态了,查看它的工作状态看看。
systemctl status bind9.service
默认安装完的BIND9的0配置,无法正常工作的,BIND9的配置实操部分其实不多,但是域名的原理和DNS工作的原理咱们得先铺垫一些浅显的,其它深入的知识在一些教程或者学习课程里面是可以花几个小时细说的。
没有知识铺垫,也能照抄配置,但无论配置的再多,也无法究其精髓,无法做到一法通百法通。
首先来看bind的安装完成后的配置文件目录
cd /etc/bind/ && ls -l //这里我通过&&拼接命令了
先简单介绍,rndc.key和bind.key
bind:大白话就是你安装的域名解析软件名字,它就代表你安装的域名解析服务服务器。
bind.key:你的域名服务器的主密钥,使用cat命令,你可以通过阅读介绍,发现它是在第一次连接时就要被调用的密钥文件。
rndc:全称Remote Name Domain Controllerr,这玩意拿来干嘛?拿来远程DNS服务器,管理bind的;为什么要远程?你租个云服务器,不可能隔几千公里拿电脑去配置;为什么我们需要rndc,ssh不也可以远程吗?因为rndc支持DNS服务器在工作状态下,进行热更新配置!。咱们搭的这些dns服务器断就断了,那些根服务器断了几秒,全网都要热闹起来。
rndc.key:是rndc远程服务连接的密钥,远程连接服务不是给个需求就随便连接的,是需要密钥交换的。
接着看其它文件,主要分为两部分,named和db
先看db,包含5个文件【我写的很浅】
前缀 | xx域 | 解释 |
---|---|---|
db | 0 | BIND广播域的反向解析数据文件 |
db | 127 | BIND本地环回接口的反向解析数据文件 |
db | 255 | BIND广播域的反向解析数据文件 |
db | empty | 不要动这个文件,这个文件用于多域 |
db | local | BIND本地环回接口的正向解析数据文件 |
在这里用口水话解释一下,db这个大家熟吧,在数据库见的最多,是的这就是数据库的意思,现在的DNS服务器你别看安装包才几十M,其实它同时还运行了一个数据库来维护IP和域名的关系表。
那么数据库是必须的吗?当然不是,以前是用txt呢,是的txt。
历史背景:
在电脑还是稀罕货,全世界Internet也就那百十来台主机组网的时候,大家给每台电脑一个IP,当然这么多IP难记死了,就像你记50个同学身份证号码可能要命,但是记他们名字就不那么复杂了。
.
所以当时给每个主机一个英文昵称,比如zhangsan、lisi、maike…,然后又因为当时的计算机是有钱人玩的玩意,而有钱人嘛都住在一个社区,老美很喜欢社区文化,所以大家要求取名要有个规范,不能乱来,规定每个人的名字后面得加你的社区名字,比如在哈佛的三台主机就属于哈佛社区,取名nb,那么zhangsan就变成zhangsan.nb,同样的lisi.nb和maike.nb。这样一来主机名+社区名的组合,变成今天的域名。
.
至于当时形成的IP和昵称对应表怎么保存和维护的问题,你还别说,当时真就用txt文本保存!而这个文本至今你的电脑里也有,叫Host文件;那个年代怎么维护这个txt文件呢,easy!没啥高科技,发个邮件,打个电话,或者直接到你家门口,一脚开门查水表,老哥给我加个IP和域名对应!
.
这种方式用今天的眼光一看,肯定就觉得不合适,随随便便给出几条缺点。所以当时的人也想到了,南加州大学信息科学所的大佬们,在1984年,发布了第一版域名解析服务的规范文件,规定出如何去建立、管理、维护域名。有了规范,再加上当时恐怖的程序猿,啪的一下,合成出了域名建立、管理、维护管理软件DNS。
.
所以以后要注意,DNS是域名解析服务,而BIND9是域名解析服务的经典软件,不过时至今日语义上早就合并了,说啥都可以,但历史是啥大家看看就好。
看完历史,现在你能理解这个db代表的含义了吧,表面它就是一份保存域名信息的数据库文件,只是我们喜欢写db,你要是能接受,你可以写任何名字,反正它本质还是数据库文件,那后面的0、127或者local啥意思呢,这就涉及到域名解析服务的两种服务类型:
- 正向解析服务=域名—>IP
- 反向解析服务=IP—>域名
db.local就是:保存域名解析成127.0.0.0段的信息文件(正向);
db.127就是:保存127.0.0.0段IP解析成域名的信息文件(反向);
一般正向用的频率远远大于反向,你甚至可以没有反向解析服务,照样正常上网看网页。
再看named部分,包含4个文件【我写的很浅】
这四个文件其实是套娃,先打开named.conf看看
nano named.conf
红框一看,绝了,include直接把其它三份named文件包含了,也就说这份named.conf是主配置文件,它包含三个子配置文件。
蓝框的话告诉我们,如果你仅仅只是要加域,直接编辑named.conf.local就行,不过不慌,我们一个一个看看。
nano named.conf.options
第一部分告诉你,如果你的域名服务器和你的主机之间有防火墙呢,你要在防火墙上允许多个端口通讯。
第二部分告诉你,如果你的ISP运营商有多个域名服务器,如果你想使用他们,那你需要设置一下第三部分的转发函数。
欸,这英文一读,你就知道了这个文件是干嘛的了,咱们的Debian12没装防火墙,不用考虑通信问题,其次域名服务咱肯定是要把99.99%的请求转发到ISP的,咱们自建的DNS只是优先解析内网自己特殊主机的域名,其它内容给ISP,运营商一般都有DNS。
不过运营商的DNS其实不如全球的免费dns,我一般用一个谷歌的用一个国内的阿里。这里我们把第三部分改一下,并保存退出。
先别重启BIND9服务,咱们可以通过bind9的小工具检查咱的配置是否有误
named-checkconf
如果没有报错就说明你的配置正确,接着咱们起一个powershell,输入nslookup看看指定搭建的dns服务器没生效转发前能不能解析。
nslookup.exe www.baidu.com 172.31.200.201
很明显是超时的,接着我们重启bind9服务,再试试。
systemctl restart bind9
欸,可以看到,DNS开始工作了,你能解析出来百度的IP了,粗俗一点的话,你的DNS服务器对外网服务已经搭建成功。
好不容易这里浅显的看完了named.conf.option,接下来查看named.conf.local
nano named.conf.local
你会发现都是注释,但提到了一个叫zones.rfc1918的文件,这是啥?咱们查看一下它
nano zones.rfc1918
一进来就看到了一堆的zone,仔细观察发现这些10、16.172反过来读,发现都是一些私有IP地址范围,这里就先解释RFC 1918(全称:Address Allocation for Privat),意思是私有网络地址分配。
再看这些连IP都是反着写的东西,它们其实是反向区域解析,加上RFC 1918,主要是为了把解析内网这些保留IP地址段的请求,给定向接管,接管给谁呢,接管给本地local的DNS服务器。这样做的好处显而易见,你的内网一定是IPv4的保留地址,那么给这些给内网的保留IP到公网去解析它的域名,显然是去错了地方。
所以为了避免这种浪费带宽,增加网络负载的事情,bind9提前给你准备了zones.rfc1918反向区域解析数据文件,你只需要在named.conf.local文件中,把注释去掉就会激活这个功能,不过这里我不去折腾这个东西,毕竟这是随笔,而不是wiki,有兴趣的看官老爷可以去玩一下,并无多大影响。
看到这里,我们的主要工作显然还没开始呢,我要如何配置才能解析内网的域名呢。
看最后一份文件之前,还记得named.conf文件告诉我们,如果要加域,去配置named.conf.default-zones就行这句话吗。比如现在内网有台vCenter server的安装再等着你解析它的域名呢,如何去添加我们内网的域名条目呢。
有兴趣的诸君,可以先去深入学习了解DNS的工作方式,查询方式
要去添加我们内网的域名条目,第一步,你的内网你想取啥域名。
比如我想取一个cluster的域名,那么内网的dns服务器就叫dns.cluster吧;vCenter server就叫vcenter.cluster吧,那么域名和IP表关系规划如下:
域名 | IP |
---|---|
dns.cluster | 172.31.200.201 |
vcenter.cluster | 172.31.200.202 |
第二步那就去看看named.conf.default-zones
nano named.conf.default-zones
打开以后不要慌,一个部分一个部分的看
通过这个结果很明显看出,一个标注的zone域是需要包含正向解析和反向解析的,我以本地域为例做一个肤浅的分析,然后我们在仿写我们自己的域。先是正向解析域。
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
把各种空格换行去掉,优化一下:
zone "localhost" { type master; file "/etc/bind/db.local";};
//域标识符 “你的域名” {类型字段 master/slave/hint 类型字段 “你的zone区域数据文件路径”;};
我们来仿写一下正向解析域
zone "cluster" { type master; file "/etc/bind/db.cluster";};
//域标识符 “你的域名” {类型字段 master/slave/hint 类型字段 “你的zone区域数据文件路径”;};
接着来看反向解析域
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
把各种空格换行去掉,优化一下:
zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127";};
//域标识符 “你的IP地址段的反写” {类型字段 master/slave/hint 类型字段 “你的zone区域数据文件路径”;};
来仿写一下反向解析域
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.31.172";};
//域标识符 “你的IP地址段的反写” {类型字段 master/slave/hint 类型字段 “你的zone区域数据文件路径”;};
在nano named.conf.default-zones里面把我们仿写的给编辑上,windtrem支持你框选就复制,所以保留各种,直接替换字符就行了,也保证整个文件一致性。
现在我们创建了自定义的cluster域的正向解析和反向解析,虽然在file字段指定了cluster域的db文件路径,但很明显我们还需要实际创建这两份文件,怎么创建?复制模板就行咯。还记得db.empty里面的抬头那段话吧,你可以复制这个文件做模板。
使用cp命令
cp -p db.empty ./db.cluster //创建正向解析数据文件
cp -p db.127 ./db.31.172 //创建反向解析数据文件
//-p属性是要求保留源文件的各种属性,包括权限这些
通过ls -l命令确认我们创建出来的两份文件
开始修改正向解析数据文件
开始前,还是希望大家去B站啊,或者CSDN或者各种博客深入了解DNS数据文件的各个字段内容及其含义,我这篇随笔如果加上那些内容,那就要起飞了,所以事无巨细,还要诸君自勉。
nano db.cluster
- 第一部分,localhost代表我们自定义的域名,需要修改为cluster
- 第二部分,其实是写域的邮箱,在dns的数据文件中@符号是通配符的意思,但邮箱也要用@这个,所以要用.来替代,这个邮箱我没特殊需要,一般就改localhost为cluster。
- 第三部分,Serial号其实代表你的这份db数据文件的版本,因为dns是需要不断维护的,每次维护后你需要更新版本号,这样在以后做主从备份的时候,从机才能通过比较版本号大小来触发同步,你可以用1、2、3来标准,但很多人包括我也推荐用年月日时来标注,这里我就把1改为2023082917.
- 第四部分,就是正式写你的域名和IP对应关系的条目了,还记得咱们的域名和IP规划表吧。记得是写A记录噢
域名 | IP |
---|---|
dns.cluster | 172.31.200.201 |
vcenter.cluster | 172.31.200.202 |
咱们直接看效果,然后就能仿写了,写完以后按ctrl+s保存也行,按ctrl+x退出时提示保存也行
接着就是反向区域文件,同样的我会标注出需要修改的地方。反向区域和正向区别只是下面的记录写法不一样。
咱们直接看下图效果,然后就能仿写了,注意反向解析文件,IP地址也要反着写,写完以后按ctrl+s保存也行,按ctrl+x退出时提示保存也行
两份文件写完以后,我们先不要重启bind9服务,先来测试一下配置未生效前,能不能解析进行正向和反向解析,起一个powershell
nslookup dns.cluster 172.31.200.201 //指定通过我们搭建的DNS服务器进行正向解析
nslookup 172.31.200.201 172.31.200.201 //指定通过我们搭建的DNS服务器进行反向解析,很奇怪的语句啊,自己解析自己
很明显配置未生效前,咱们解析不出来任何东西,现在重启一下bind9服务
systemctl restart bind9.service
现在再来试一下咱们的解析,命令就不重复了,直接看效果
好了,至此我们的内网dns服务器已经是能正常工作了,这篇随笔的博客也算写完了,搭建完DNS后,重新安装vCenter时,vCenter server就能在安装时解析我们的域名和IP对应关系了,数据包也不会乱跑了。
传送门:
0x01 在空闲物理主机上部署vSphere【base:空闲物理设备+ESXI 8.0+vCenter Server 】
0x03 在Debian12.0中部署LNMP实现web环境【base: Debian12+Nginx+MySQL+PHP+ESXI】
小结
花有重开日,人无再少年啊!
施工完毕,把传送门加上了,我在思考要不要同步到知乎去,确实写不起了,还好没拿mac写,不然要累死。
新的坑开了一个0x03,后面慢慢写,还有很多搭建完成的服务等着写呢。