Windows 平台下的域名条件转发
NRPT(Name Resolution Policy Table,名称解析策略表)是 Windows 系统(Vista及以后版本) 中的一个高级网络功能,它允许管理员为不同的域名配置不同的DNS解析策略。
Linux 平台下就丰富了,比如可以使用systemd-resolved、dnsmasq来实现。
查看当前系统的NRPT策略
CMD > netsh namespace show effectivepolicy
应用示例
内部有个vqiu.local的域名,只有内网的DNS服务器才能解析,同时又不希望全部人都能解析。
1、将vqiu.local这个域名的解析全部发送到172.20.5.153节点解析。
PS C:\Windows\system32> Add-DnsClientNrptRule -Namespace ".vqiu.local" -NameServers "172.20.5.153"
2、此时该节点就具备针对vqiu.local存储的域名记录进行解析了
CMD > ping xx.vqiu.local
3、查看已存在的NRPT规则
PS C:\Windows\system32> Get-DnsClientNrptPolicy
Namespace : .vqiu.local
<省略若干行>
DirectAccessProxyType : NoProxy
DirectAccessQueryIPsecEncryption :
DirectAccessQueryIPsecRequired : False
NameServers : 172.20.5.153
<省略若干行>
PS C:\Windows\system32> Get-DnsClientNrptRule
<省略若干行>
Namespace : {.vqiu.local}
<省略若干行>
NameServers : 172.20.5.153
<省略若干行>
CMD > netsh namespace show effectivepolicy
.vqiu.local 的设置
----------------------------------------------------------------------
通用(DNS 服务器) : 172.20.5.153
通用(VPN 触发器) : disabled
4、删除.vqiu.local域名转发规则
Remove-DnsClientNrptRule -Name ""{83E7E2E8-4D8D-4FB0-9F85-4FAC3416700A}"
或者
Get-DnsClientNrptRule | Where-Object { $_.Namespace -eq '.vqiu.local' } | Remove-DnsClientNrptRule
结合OpenVPN
前置条件
# 指定VPN提供的DNS服务器
dhcp-option DNS 172.20.5.153
# 确保没有下面这行(或前面加#注释掉)
# block-outside-dns
在ovpn文件中添加如下:
script-security 2
up 'powershell -ExecutionPolicy Bypass -File "C:\Path\To\vpn-up.ps1"'
down 'powershell -ExecutionPolicy Bypass -File "C:\Path\To\vpn-down.ps1"'
后语
阿里云的无影云默认也存在不少的NRPT策略,这样能避免用户修改DNS导致基础环境出故障。