如何构建内网域名系统

admin 2024年4月25日19:23:41评论6 views字数 2028阅读6分45秒阅读模式

如果内网系统访问还在使用IP来进行访问,可以试着搭建域名系统,即DNS服务。因为域名比IP更好记,并且内部域名可以随意命名,比如 it.com、hisdb.com

为了防止域名冲突,内网域名可以使用DNS服务器的域名重写功能,这样就不怕和外网域名冲突了。

DNS的配置可以随DHCP服务一起下发,配合DHCP服务器实现IP和DNS自动分配。

在正确配置了DHCP服务及DNS服务的情况下,客户端的网络配置应该全部使用自动获取。

如何构建内网域名系统

一般核心交换机都带DHCP功能,但在交换机上配置多网段DHCP功能会非常复杂。建议使用专用DHCP服务器实现静态和动态地址规划。我们使用的是雨滴科技的智能网关来实现DHCP功能。DHCP服务会将内网DNS下发到客户端。

如何构建内网域名系统

如何构建内网域名系统

DHCP服务需要支持静态IP池和动态IP池的分配,并且能够将IP固定住,不让其动态飘。动态IP策略不利于资产梳理和定位,最终要达到如下效果:使用DHCP分配,一旦分配后DHCP租约不再过期,保证MAC与IP绑定。

DNS 服务器需要支持外网域名解析转发与内网域名覆盖。当域名与内网域名冲突时,应使用内网域名覆盖外网域名。

内网DNS服务器使用的是 AdGuard 来提供DNS服务。AdGuard 是一款网络广告拦截工具,也可以当DNS服务器来使用。它有免费版和付费版,付费版提供了更多高级功能和定制选项。这里使用的是它的免费版,主要使用的它的DNS转发和重写功能:

如何构建内网域名系统

内网的服务器IP、域名可以使用Git库来维护,通过脚本将IP、域名同步到AdGuard 中。之前对如何同步域名配置做过详细介绍:


如果只是小范围使用,可以使用系统的 hosts 文件代替 DNS 服务,比如在 git-bash 下将 DNS 配置同步到系统的 hosts 文件:

$ cat DNS.txt >> /c/Windows/System32/drivers/etc/hosts

需要注意的是修改 hosts 文件需要管理员权限,在运行 git-bash 时需要使用管理员权限运行。

如何构建内网域名系统

系统会优先使用 hosts 文件解析域名,使用 ipconfig 命令可以查看 hosts 文件配置是否生效:

C:> ipconfig /flushdnsC:> ipconfig /displaydns

如何构建内网域名系统

基于 hosts 的域名配置会一直在 dns 缓存中驻留,不会因 flushdns 而清空。

日常维护可以使用 Git 库管理 IP 与域名的对照关系,允许一个 IP 有多个域名,我们使用的数据格式是:

域名  IP  备注

hosts 数据格式为:

IP  域名

AdGuard 的配置文件中使用的数据格式为:

  rewrites:  - domain: oa.com    answer: 10.1.1.8  - domain: www.oa.com    answer: 10.1.1.8

在处理各种配置文件时可以通过 awk 或 python 进行灵活处理。比如将带备注的域名数据转 hosts,可以使用 awk 选择列:

$ cat AdGuardHome.txt |       awk '{print $2"  "$1}'

备注的域名数据转AdGuard配置,可以使用正则表达式结合文件插入:

import reimport sys
# DNS.txt 数据格式# 域名 IP 备注s1 = 'DNS.txt'
# 从 AdGuard 配置目录获取配置文件模板s2 = 'AdGuardHome.yaml_template'
# 替换AdGuard配置文件中的 DNS 部分def dns2conf(f): L = []
for line in f: s = line.split()        L.append(s)
L.sort(key=lambda item: socket.inet_aton(item[1]))
for i in L: print(" - domain: %s" % i[0]); print(" answer: %s" % i[1]);

pattern0 = 'rewrites:'pattern1 = '- domain:'pattern2 = 'answer:'L = []
f = open(s2, mode='r', encoding='utf-8')
for line in f: match_rule = re.search(pattern0, line) match_name = re.search(pattern1, line) match_ip = re.search(pattern2, line) if match_rule: print(line, end='') with open(s1, mode='r', encoding='utf-8') as f1: dns2conf(f1) continue if match_name: continue elif match_ip: continue else: print(line, end='')
f.close()

全文完。

如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。


提示:下方是广告...

原文始发于微信公众号(生有可恋):如何构建内网域名系统

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月25日19:23:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何构建内网域名系统https://cn-sec.com/archives/2688897.html

发表评论

匿名网友 填写信息