请教下有没有这样一种 DNS 解析工具,可能定义地址池的,根据地址池的不同,使用不同的公共 DNS 来解析?

178 天前
 echoo00
背景:外企,有两条互联网线路,一条出口在国内,一条出口在日本;流量默认从日本走,DNS 默认是域控的地址,上游默认查询 8.8.8.8

遇到的问题:因为所有的 DNS 查询默读都是从日本出去的,返回的 IP 地址也绝大多数是国外的 IP ,这样访问国内一些政府网站,或者比较大的有 CDN 的网站时,默认就是日本绕回来访问,一些网站的样式无法正常显示;财务和 HR 同事日常使用这类系统/网站比较多,有较多的抱怨,临时方案是拉了条 ADSL 线他们用,要上国内网站就连这条 ADSL 放出来的 SSID ;

需求:有没有一个 wiin 系统下的软件,可以自定义一个域名池,这个池子里的域名固定去 223.5.5.5 解析,其他默认的该怎么走怎么走
网络上有负载均衡设备可以实现上述功能,但目前公司不太愿意投资,我只是想方便我自己使用,来找这么一个软件测试下,谢谢!
4433 次点击
所在节点    DNS
49 条回复
uncat
178 天前
然后在 DHCP 服务器上,将默认的 DNS 地址从网关,改为这台 Linux 的内网 IP 即可。
uncat
178 天前
如果只是自己的 Windows 设备需要 DNS 分流,通过 PowerShell 添加 NRPT 规则即可。如果是内部团队的需求,则可以考虑采用第二种方案。
xenme
178 天前
mosdns ,全部可以自定义,之前软路由一直用的这个
nkloveni
178 天前
听起来有个非常简单的办法,就是你直接在财务的电脑手工设置一下 DNS ,指向你那个 223.5.5.5 就行了,不用折腾别的
yyysuo
178 天前
当然是 Adguard Home 了,可以根据客户端指定 dns ,这个需求简单,不需要搞 mosdns 或者 smartdns 那么麻烦。
Tumblr
178 天前
对于 multi-site 的公司,如果你们的 DNS 没做 anycast ,首先建议的是对于不同 site 的设备,在 DHCP 上直接指派不同的 DNS 服务器,然后 DNS 服务器在本地出局,这个是最简单也是最易行,也是最常用的方式。
如果以上方案在你们公司难以落地,建议参照 @uncat #20 的提议,在域控上下发个策略,给到相应的电脑,通过 NRPT 实现。
echoo00
178 天前
@nkloveni 完全不可行,手动指向外部,内网所有资源,还有被 GFW 墙的资源就访问不了;另外财务没有权限去改系统的设置
echoo00
178 天前
@Tumblr 企业级的解决方案很多,我自己也实施过不少,但是不能落地啊,总部不支持,也不信任中国区域
uncat
178 天前
在财务小姐姐的电脑上,PowerShell 管理员权限,执行添加一条 NRPT 规则的命令就行了(规则长期生效的)。

规则指定的域名(也就是你说的域名池)将会使用规则 IP 指定的 DNS 服务器来解析域名,否则采用默认的 DNS 服务器解析。(注意,截图中域名前的 . 不可省略)

参考这张截图中的命令: https://x.com/jinmiaoluo/status/1723948812224360585?s=20
echoo00
178 天前
@uncat 这个看到了,但域名列表有一大堆,他能指定文件吗?比如我建和 txt 文档,这个 txt 文档里的域名全从 223.5.5.5 去查
rrfeng
178 天前
dnsproxy 就可以。
adguardhome 的内核也是 dnsproxy 。
pagxir
178 天前
最简单的还是用 PAC 吧
mantouboji
178 天前
Windows 下不知道,但是我用的 ChinaDNS-NG 效果非常好。你可以用一个单独的小盒子或者虚拟机去跑。

https://github.com/zfl9/chinadns-ng
Mrealy
178 天前
@yyzh #18 用你上面的 DNS 确实可以做到分游,以后 DNS 分流有问题可以用这个应急了。
life90
178 天前
其实你可以劫持 DNS ,放过 AD 域名即可。反一下思维方向。
lululau
178 天前
这个不是系统自带的功能吗

man 5 resolver
K8dcnPEZ6V8b8Z6
178 天前
考虑到配置难度,易用性,我感觉 adguard home 是最好的选择
fxxkgw
178 天前
实际上是使用了 bind 服务的 ecs 功能
Tumblr
178 天前
@echoo00 #28 这是沟通问题,不是技术问题。如果是这样的话,即使你通过技术手段实现了 DNS 分流,还是会被总部以合规问题来 challenge ,出力不讨好。
我认为,正确的处理渠道是,引导遇到这些问题的 end user 集中找 IT 报障,然后由你们的 IT 去找总部沟通。
uncat
178 天前
@echoo00 思路:

通过 PowerShell 实现一个函数来维护操作的逻辑。

1. 读取特定路径的 domain.txt 来管理规则
2. 实现 Add 操作的逻辑,NRPT 规则不存在则添加
3. 实现 Add 操作的逻辑,NRPT 规则存在则更新
4. 实现 Add 操作的逻辑,NRPT 规则多余则删除
5. 实现 Clean 操作的逻辑,清理本机所有 NRPT 规则,恢复初始状态。

代码如下:

```powershell

param (
[string]$Action = "Add", # 可以是 Add 或 Clean
[string]$FilePath = ".\domains.txt", # 包含域名的文件路径
[string]$NameServer = "192.168.188.2" # 默认的 DNS 服务器地址
)

function Manage-NrptRuleFromFile {
param (
[string]$Action,
[string]$FilePath,
[string]$NameServer
)

# 读取文件中的域名,添加前缀 '.'
$fileNamespaces = Get-Content $FilePath | ForEach-Object { "." + $_ }

switch ($Action) {
"Get" {
$rules = Get-DnsClientNrptRule
if ($rules) {
Write-Host "Current NRPT rules:"
$rules | Format-Table -Property Namespace, NameServers
} else {
Write-Host "No NRPT rules found"
}
}
"Add" {
# 获取当前所有的 NRPT 规则
$currentRules = Get-DnsClientNrptRule

# 添加或更新规则
foreach ($ns in $fileNamespaces) {
$rule = $currentRules | Where-Object { $_.Namespace -eq $ns }
if ($rule) {
if ($rule.NameServers -ne $NameServer) {
Set-DnsClientNrptRule -Name $rule.Name -NameServers $NameServer
Write-Host "Updated NRPT rule for $ns $NameServer"
}
} else {
Add-DnsClientNrptRule -Namespace $ns -NameServers $NameServer
Write-Host "Added NRPT rule for $ns"
}
}

# 清除不在文件中的规则
$currentRules | Where-Object { $fileNamespaces -notcontains $_.Namespace } | ForEach-Object {
Remove-DnsClientNrptRule -Name $_.Name
Write-Host "Removed NRPT rule for $($_.Namespace)"
}
}
"Clean" {
Get-DnsClientNrptRule | Remove-DnsClientNrptRule -Force
Write-Host "Cleaned all NRPT rules"
}
default {
Write-Host "Invalid action: $Action"
}
}
}

# 调用 Manage-NrptRuleFromFile 函数
Manage-NrptRuleFromFile -Action $Action -FilePath $FilePath -NameServer $NameServer

# 示例用法
# 将内容保存为 nrpt.ps1 文件,在 CWD 内添加一份 domains.txt ,每个域名一行,比如:
# example-01.com
# example-02.com
# example-03.com
#
# 指定 NameServer 地址
# .\nrpt.ps1 -NameServer "10.0.0.2"
#
# 指定文件地址
# .\nrpt.ps1 -FilePath ".\another-domains.txt"
#
# 清除所有规则
# .\nrpt.ps1 -Action Clean


```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/995812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX