V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  uncat  ›  全部回复第 4 页 / 共 22 页
回复总数  428
1  2  3  4  5  6  7  8  9  10 ... 22  
上面的代码格式化有点问题,可以看 Gist: https://gist.github.com/jinmiaoluo/6a8eb9176bac7f06eaf6fa8ba6866a37

思路:

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


```
在财务小姐姐的电脑上,PowerShell 管理员权限,执行添加一条 NRPT 规则的命令就行了(规则长期生效的)。

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

参考这张截图中的命令: https://x.com/jinmiaoluo/status/1723948812224360585?s=20
如果只是自己的 Windows 设备需要 DNS 分流,通过 PowerShell 添加 NRPT 规则即可。如果是内部团队的需求,则可以考虑采用第二种方案。
然后在 DHCP 服务器上,将默认的 DNS 地址从网关,改为这台 Linux 的内网 IP 即可。
Windows 原生支持 DNS 分流,叫做 NRPT Rules 参考: https://x.com/jinmiaoluo/status/1723948812224360585?s=20

Linux 也是原生支持 DNS 分流的,你可以在内网,随便一台 Linux ,通过 systemd 内置的 systemd-resolved 配置好分流规则后,作为一台内网 DNS proxy 。啥都不用安装。
@ho121 哈哈哈,都可以,习惯就好。
开启本地的远程管理 -> 开启被控制端的远程管理功能
1. 开启本地的远程管理
2. 被控制的 Mac 通过 SSH 将本地 5900 绑定到远程服务器的 5900
3. 发起控制的 Mac 通过 SSH 将服务器的 5900 绑定到本地 5900
4. 本地通过自带的远程访问客户端,以 127.0.0.1:5900 的方式访问即可
@cherryas 那就两张 3090 呗 🤣
164 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
@Donaldo JB 的 remote 可用性不好,我很期待 JB 的 remote 能有 vscode 的 remote 级别的可用性,但至今依旧无法适应它。vscode 的 remote 方案倒是用了有 2 年了。
165 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
165 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
如果真的想原生 Goland ,可以试试 WSL 的 GUI ,将 Goland 直接作为一个 Linux GUI 跑在 WSL 内,就会有类似原生 Linux 的性能了。
165 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
165 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
IO 性能问题还是存在的,即使是在当前最新 WSL 2.0.4 ,这个最好得打引号。
187 天前
回复了 pigcandance 创建的主题 Windows Windows 如何实现网络转发?
如果你想实现只对特定域名启用代理,可以下载 Proxifier ,原理是 Proxifier 捕获所有系统的流量,基于程序的名字( Chrome/QQ/Wechat/Edge )或者基于访问对象的地址(域名/IP )等规则,决定是直接访问还是发给本地的 socks5 监听。

你只要按需添加自己的规则即可。
187 天前
回复了 pigcandance 创建的主题 Windows Windows 如何实现网络转发?
原生无污染版本

需要一台有公网 IP 的 Linux 服务器
内建了 SSH 服务端和客户端的 Windows 版本( 10 和 11 )

操作:

启用 B 内建的 SSH 服务端,允许其他设备通过 SSH 登录 B 。
在 B 上的 PowerShell 内通过 SSH 命令行客户端,将 B 的 22 端口绑定到 Linux 上。
在 A 上的 PowerShell 内通过 SSH 命令行客户端,将 Linux 作为 ProxyJump 来访问绑定在其 Linux localhost 的 B 的端口,基于 SSH Dynamic Forward 功能,在本地建立一个 socks5 的监听

打开 Windows 的系统设置,在网络 -> 代理一栏,配置系统代理为 socks5 监听的端口即可
188 天前
回复了 dtekol 创建的主题 服务器 阿里云 e 系列服务器最低价购买(无 aff)
@ymy3232
5 年 574 元 VS 1 年 306 元?
188 天前
回复了 charlieethan 创建的主题 小米 小米 14 / 骁龙 8Gen3 发布了
去店里看了,摄像头模块外面多了一圈,感觉没有 13 的那么好看,外观上退步了。
192 天前
回复了 silvernoo 创建的主题 NAS 主板功耗 20 瓦+,真让人头疼
我平时是:200 Wh * 24 Hour * 30 Day / 1000 * 0.7 元 = 100 元,调整一下心态,享受工具和消费本身带来的效率提升就好。
1  2  3  4  5  6  7  8  9  10 ... 22  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2278 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 08:30 · PVG 16:30 · LAX 01:30 · JFK 04:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.