使用 puppet 修改 ip 路由和 sysctl

使用 puppet 修改 ip 路由和 sysctl

ip route我对&做了两处更改sysctl,以禁用 tcp 慢启动。以下是我这样做的方法

ip route show

记下以 default 开头的行。

从默认行中获取 IP 并运行

sudo ip route change default via $ip_address dev eth0 initcwnd 12 
sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0

我怎样才能用这个创建一个 Puppet 脚本?可以部署到同一类型的多台机器上的脚本 – CentOS 6

编辑: 增加悬赏以获得工作示例

sudo ip route change default via $ip_address dev eth0 initcwnd 12 

答案1

根据 larsks 的回答,如果你有静态 IP 地址,请将其放在 /sbin/ifup-local 中

#!/bin/sh

GATEWAY=`ip route| awk '/^def/{print $3}'`
DEFGWDEV=`ip route| awk '/^def/{print $5}'`

if [ "$1" = $DEFGWDEV ]; then
  ip route change default via $GATEWAY dev $DEFGWDEV initcwnd 12
fi

答案2

如果您使用 DHCP 获取互联网地址(您的问题建议这样做),那么您可以在配置接口/etc/dhcp/dhclient-exit-hooks后使用它来运行 shell 命令dhclient。您将可以访问 dhclient 提供的许多变量,包括$router。您可以使用它来运行:

ip route change default via $router dev $interface initcwnd 12 

您可以使用常规 Puppetfile资源安装此脚本:

file { '/etc/dhcp/dhclient-exit-hooks':
owner => root,
group => root,
mode => 0755,
source => 'puppet:///.../dhclient-exit-hooks',
}

文件内容可能如下所示:

#!/bin/sh

if [ "$interface" = eth0 ]; then
  ip route change default via ${new_routers%% *} dev $interface initcwnd 12 
fi

如果你是不是使用 DHCP,您可以做类似的事情。配置接口后,常规ifup脚本会运行,您可以使用它来运行命令。在这种情况下,您只需在 中的接口配置中获取默认网关的地址(并且您的 Puppet资源将安装)。/sbin/ifup-localip/etc/sysconfig/network-scripts/ifcfg-eth0file/sbin/ifup-local

答案3

sysctl这篇文章中介绍了这一方面:使用 Puppet 设置 sysctl.conf 参数

木偶的网络示例还利用奥杰阿斯

编辑:您使用的是 CentOS,因此请记住您需要使这些路由持久化...更安全的方法是在文件中进行更改、验证,然后重新启动网络接口吗?/etc/sysconfig/network-scripts/route-ethX由于您使用的是via语法,因此这假定使用。该ip route命令似乎是您的目标,因为您想要更改初始拥塞窗口 (initcwnd)。我会认真地将其分为另一个选项,因为设置默认网关本身应该由 OS 网络脚本/kickstart/build 过程处理。


现在有一个完全不同的解决方案:

我喜欢 Puppet 的某些东西。网络配置和 sysctl 值不在其中。使用 EL6 系统,您可以使用tuned-adm 框架以简单一致的方式即时进行这些系统更改。我管理的服务器有时需要 30 多个sysctl更改sysfs才能投入生产。我过去手动管理,然后使用 Puppet……但使用 EL6,我创建了一个调整轮廓使用所有必要的调整和脚本,使用 Puppet 管理配置文件及其分发,并tuned使用 Puppet 控制守护进程。

鉴于此,只需将ip脚本和sysctl值移到自定义配置文件中并从那里开始即可。更干净。

相关内容