7 votes

Utiliser Puppet pour faire des changements à ip route et sysctl

J'ai deux modifications à apporter ip route & sysctl qui désactive le démarrage lent de tcp. Voici comment je procède

ip route show

Notez la ligne qui commence par "default".

Prenez l'IP de la ligne par défaut et exécutez

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

Comment puis-je créer un script de Puppet à partir de cela ? Un qui peut être déployé sur de nombreuses machines du même type - CentOS 6

Editar: Ajout d'une prime pour l'obtention d'un exemple fonctionnel de

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

6voto

ewwhite Points 193555

El sysctl côté a été couvert dans ce post : Définir les paramètres de sysctl.conf avec Puppet .

La marionnette exemple pour la mise en réseau s'appuie également sur Augeas .

Éditer : Vous êtes sous CentOS, alors rappelez-vous que vous devez rendre ces routes persistantes... L'approche la plus sûre consiste-t-elle à effectuer la modification dans un fichier, à la vérifier, puis à redémarrer l'interface réseau ? Cela suppose /etc/sysconfig/network-scripts/route-ethX puisque vous utilisez via syntaxe. Le site ip route semble être votre objectif puisque vous souhaitez modifier la fenêtre initiale de congestion (initcwnd). Je séparerais sérieusement cela dans une autre option parce que la définition de la passerelle par défaut par elle-même devrait être gérée par le réseau OS scripts/kickstart/build process.


Maintenant, une solution totalement différente :

J'aime Puppet pour certaines choses. Les configurations réseau et les valeurs sysctl n'en font pas partie. Avec les systèmes EL6, vous avez la possibilité d'utiliser la fonction cadre de travail tuned-adm pour effectuer ces changements de système à la volée, de manière simple et cohérente. Les serveurs que je gère ont parfois besoin de plus de 30 sysctl et sysfs les changements avant de passer en production. J'avais l'habitude de gérer cela manuellement, puis avec Puppet... mais avec EL6, je crée une accordé profil avec tous les ajustements et scripts nécessaires, gérer les profils et leur distribution avec Puppet, et contrôler le système de gestion de l'information. tuned daemon avec Puppet.

Compte tenu de cela, il suffit de déplacer votre ip script et sysctl dans un profil personnalisé et partez de là. Beaucoup plus propre.

0 votes

J'ai du mal à comprendre l'aspect réseau. J'ai même exploré github.com/AbbyEdwards/Puppet-iproute2facts Pouvez-vous m'aider avec la route ip ?

0 votes

Vous êtes sous CentOS, alors rappelez-vous que vous devez rendre ces routes persistantes, n'est-ce pas ? L'approche la plus sûre consiste-t-elle à effectuer la modification dans un fichier, à la vérifier, puis à redémarrer l'interface réseau ? Cela suppose que /etc/sysconfig/network-scripts/route-ethX utiliser.

6voto

Eric Noob Points 531

Si vous obtenez votre adresse internet en utilisant DHCP (ce qui est suggéré par votre question), alors vous pouvez utiliser /etc/dhcp/dhclient-exit-hooks pour exécuter les commandes Shell après dhclient configure votre interface. Vous aurez accès à un certain nombre de variables fournies par dhclient, notamment $router . Vous pouvez l'utiliser pour exécuter :

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

Vous installerez ce script avec un Puppet normal. file ressource :

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

Et le contenu du fichier ressemblerait probablement à quelque chose comme :

#!/bin/sh

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

Si vous êtes no en utilisant DHCP, vous pouvez faire quelque chose de similaire. La méthode normale ifup script s'exécute /sbin/ifup-local après avoir configuré l'interface, et vous pourriez l'utiliser pour exécuter la commande ip commande. Dans ce cas, vous pourriez obtenir l'adresse de la passerelle par défaut en recherchant simplement dans la configuration de l'interface en /etc/sysconfig/network-scripts/ifcfg-eth0 (et votre marionnette file La ressource installerait /sbin/ifup-local ).

6voto

Tarun Reddy Points 76

En partant de la réponse de Larsks, si vous avez des adresses IP statiques, placez ceci dans /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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X