2 min read

Windows 平台下的域名条件转发

Windows 平台下的域名条件转发

NRPT(Name Resolution Policy Table,名称解析策略表)是 Windows 系统(Vista及以后版本) 中的一个高级网络功能,它允许管理员为不同的域名配置不同的DNS解析策略

Linux 平台下就丰富了,比如可以使用systemd-resolveddnsmasq来实现。

查看当前系统的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导致基础环境出故障。