使用 Puppet 在 Windows Server 2008 R2 上禁用 IPv6

Disable IPv6 on Windows Server 2008 R2 using Puppet

我正在使用 Puppet 模块 windows_disable_ipv6 但它似乎并没有真正起作用。

# cat /etc/puppetlabs/code/environments/production/manifests/site.pp
node my_instance.net {
        include windows_disable_ipv6
}

# cat /etc/puppetlabs/code/environments/production/hieradata/common.yaml
---
windows_disable_ipv6::ipv6_disable: true
windows_disable_ipv6::ipv6_reboot: true

# cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - common

:yaml:
Windows
  :datadir:

我检查了模块的清单。如果必须禁用 IPv6,它将注册表设置更改为 '0xFFFFFFFF'

当我在代理上 运行 puppet agent -t 时,我确实看到密钥更改为以上值并且系统重新启动但是当我再次登录时 post-重新启动,我看到IPv6 的复选框仍处于启用状态。

This link 建议使用 '0xff' 而不是 '0xFFFFFFFF'。我尝试更改值,然后也重新启动服务器,但问题仍然存在。

有什么指点吗?

tl;dr - 我想知道您是否 运行 进入 https://tickets.puppetlabs.com/browse/MODULES-3195,尽管我认为您会看到错误而不是成功。也许其他东西正在强制设置,比如 SCCM/GPO.

详情

查看 https://github.com/martezr/puppet-windows_disable_ipv6/blob/master/manifests/init.pp#L45-L49 处的模块:

# Modify the IPv6 registry key
registry::value { 'ipv6':
  key   => 'HKLM\System\CurrentControlSet\Services\Tcpip6\Parameters',
  value => 'DisabledComponents',
  type  => 'dword',
  data  => $ipv6_setting,
}

这大部分看起来不错。

让我们尝试一些调试步骤

所以你说这应用成功,当你检查时,它已经应用了更改。但是重启后,设置又恢复原样了。

这表明您有其他东西,例如 GPO(组策略)强制执行其自身的冲突设置。让我们先把 Puppet 从照片中拿出来一分钟:

  • 关闭 Puppet 并将启动类型设为手动(Windows + R,键入 services.msc,按回车键,找到 Puppet 代理服务并右键单击属性)
  • 转到网络连接并进行更改以手动禁用 IPv6。关闭它。
  • 再次打开适配器属性并检查以确保它仍然处于禁用状态。
  • 重启系统。
  • 检查更改是否仍然存在或者是否已经改回。
  • 确保再次将 Puppet 服务启动类型设置为自动(并重新打开)。

如果更改不会持续重启,则表明其他内容正在强制执行该设置。如果更改持续重启,则表明 Puppet 尝试应用更改的方式可能有问题。

这意味着要进行更多调试以确保模块尝试更改正确的位置并且它适用于您尝试更改的 Windows 服务器。可能需要更多的研究来确定如何以编程方式在 Windows 2008 R2 上禁用 IPv6,看看您是否需要调整或替换应该这样做的模块。

puppet 模块在系统上禁用 IPv6,这是通过系统上的 ipconfig /all 验证的。该复选框仅处理与接口的绑定,实际上并没有在系统上禁用 IPv6。