Si vous exécutez votre propre résolveur ou souhaitez en utiliser un auprès d'un fournisseur tiers, vous pouvez constater que votre /etc/resolv.conf
fichier est écrasé par DHCP. Il existe plusieurs façons de résoudre ce problème. Étant donné que vous allez probablement vouloir redémarrer pour vous assurer que vos modifications sont respectées, et comme vous allez en premier lieu utiliser les paramètres réseau, je vous suggère fortement de le faire sur une instance de test et / ou en dehors de Peak heures.
Maintenant, voici trois méthodes, du pire au meilleur. Notez que toutes les méthodes de ce guide ont été écrites pour FreeBSD 10. Les utilisateurs Linux peuvent se référer à ce guide .
Méthode 1: utiliser les paramètres d'interface statiques
Dans mes tests limités, cela entraîne des temps de démarrage légèrement plus rapides car vous n'avez pas à attendre que DHCP attribue vos paramètres réseau. Cependant, j'ai vu dans plusieurs documents Vultr que l'utilisation des paramètres d'interface statique est mal vue et que vous devez vous en tenir à DHCP. Je suppose qu'ils ont une bonne raison à cela et j'ai donc continué à utiliser DHCP moi-même. Néanmoins, si vous décidez de suivre cette voie, suivez les étapes ci-dessous.
- Déterminez l'IP, le masque de réseau et l'IP de la passerelle de votre serveur.
- Modifiez
/etc/rc.conf
pour utiliser ces valeurs au lieu de DHCP.
- Redémarrez pour tester les paramètres.
Déterminer IP / masque de réseau / passerelle
En supposant que votre interface est vtnet0, procédez comme suit:
ifconfig vtnet0 | grep inet
Cela devrait vous fournir l'adresse IP et le masque de réseau de votre serveur:
inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255
FreeBSD aime utiliser hex pour le masque de réseau. Ce qui précède se transforme en 255.255.255.0
si vous êtes curieux. Vous pouvez trouver un tableau pratique ici , mais n'ayez crainte: vous pouvez simplement copier l'adresse hexadécimale dans vos fichiers de configuration (ou la convertir en décimal si vous préférez).
Vous pouvez trouver la passerelle de plusieurs façons. En voici un:
route get default | grep gateway
retournera quelque chose comme:
gateway: 10.10.10.1
Modifier /etc/rc.conf
avec de nouvelles valeurs
Armé de l'IP, du masque de réseau et de la passerelle, il est maintenant temps de les ajouter à la configuration du système. Je recommande fortement de sauvegarder ce fichier avant d'apporter des modifications, car il sera beaucoup plus facile de l'annuler si vous vous trompez. Maintenant, ouvrez-vous /etc/rc.conf
dans l'éditeur de votre choix et apportez les modifications suivantes:
# Comment out this line:
# ifconfig_vtnet0="dhcp"
# Add these lines:
defaultrouter="10.10.10.1"
ifconfig_vtnet0="inet 10.10.10.10 netmask 0xffffff00"
De toute évidence, vous devez vous assurer de substituer votre adresse IP, votre masque de réseau et votre passerelle réels à mes contrefaçons évidentes.
Redémarrez et testez
Redémarrez votre serveur à l'aide shutdown -r now
et assurez-vous qu'il revient correctement. Effectuez les tests que vous jugez nécessaires pour vous assurer que tout fonctionne correctement. Si le réseau est inaccessible, connectez-vous via la console et annulez vos modifications. Si tout va bien, à ce stade, vous pouvez mettre tout ce que vous voulez resolv.conf
sans craindre d'être effacé.
Si pour une raison quelconque vous ne pouvez pas redémarrer, cela devrait fonctionner, mais je ferais vraiment un redémarrage approprié si j'étais vous:
service netif restart && service routing restart
Méthode 2: rendre resolv.conf
immuable
C'est un peu un hack, mais c'est facilement la solution la plus rapide. Je ne le recommande pas car je ne peux pas garantir que cela ne causera pas de bizarreries à l'avenir lorsque vous passerez à une nouvelle version du système d'exploitation, et dhclient va probablement se plaindre. Cela dit, un simple chflags schg /etc/resolv.conf
suffit. Le fichier est maintenant complètement protégé en écriture, même depuis root. Vous pouvez vérifier comme ceci:
vultr [~]# chflags schg /etc/resolv.conf
vultr [~]# ls -ol /etc/resolv.conf
-rw-r--r-- 1 root wheel schg 50 Nov 29 06:28 /etc/resolv.conf
vultr [~]# echo "so very untouchable" >> /etc/resolv.conf
/etc/resolv.conf: Operation not permitted.
Annuler avec: chflags noschg /etc/resolv.conf
Méthode 3: dites poliment à FreeBSD de laisser vos paramètres seuls
C'est de loin le moyen le plus propre et le plus approprié pour y parvenir. Vous pouvez adopter deux approches:
Configurer dhclient
Prenons l'exemple de haut en bas et disons que tout ce que vous voulez faire est de mettre votre serveur de noms personnalisé resolv.conf
et de ne pas le perdre à chaque fois que DHCP fait son travail. Dans mon cas, je veux utiliser le résolveur de mise en cache que j'ai installé qui écoute sur localhost, donc je modifie /etc/dhclient.conf
(qui sera probablement vide à part les commentaires) et j'ajoute ce qui suit:
interface "vtnet0" {
supersede domain-name-servers 127.0.0.1;
}
Cela permettra à dhclient de faire tout ce que vous avez besoin de faire, mais lorsque le serveur DHCP lui enverra une liste de serveurs de noms à utiliser, le vôtre remplacera (comme dans, remplacera complètement) ceux qu'il propose. Si vous préférez compléter (plutôt que remplacer) ceux proposés, vous pouvez "ajouter" ou "ajouter" au lieu de "remplacer", selon le cas.
Par ailleurs, si vous avez besoin de plusieurs serveurs personnalisés, spécifiez-les comme ceci:
supersede domain-name-servers 127.0.0.1, 127.0.0.2;
Après avoir apporté vos modifications, redémarrez-les dhclient
pour qu'elles prennent effet immédiatement:
service dhclient restart vtnet0
Examinez votre /etc/resolv.conf
et vous devriez trouver qu'il contient maintenant votre ou vos serveurs de noms personnalisés.
Au moment de la rédaction de ce document, les serveurs de noms sont la seule chose que le serveur DHCP de Vultr ait jamais mis dans mon resolv.conf
, et la seule chose que j'ai eu envie de personnaliser. Cependant, si jamais vous avez besoin de remplacer d'autres paramètres, consultez l'excellent manuel pour une liste complète:
man 5 dhclient.conf
Il y a de bons exemples en bas qui devraient vous donner une idée de ce que vous pouvez faire. Du haut de ma tête, je peux imaginer que vous voudrez peut-être ajouter quelque chose comme supersede domain-name "example.com";
si vous avez normalement une ligne comme ça dans votre resolv.conf
. Encore une fois, consultez la documentation.
Configurer resolvconf
C'est la solution la plus simple si vous voulez juste que vous resolv.conf
restiez seul. Selon le manuel:
resolvconf manages resolv.conf(5) files from multiple sources, such as DHCP and VPN clients
Sa configuration réside dans /etc/resolvconf.conf
, qui n'existe probablement pas sur votre système, alors n'hésitez pas à la créer. Pour rendre votre resolv.conf
immuable, ajoutez ceci:
# prevent all updates to resolv.conf:
resolv_conf="/dev/null"
Si vous utilisez unbound
votre résolveur de mise en cache local, c'est la ligne qu'il ajoute (avec quelques-uns pour lui-même). Cela revient resolvconf
à penser que votre /etc/resolv.conf
emplacement est situé /dev/null
. Quelque chose d'un peu moins méchant, mais tout aussi efficace, serait:
# disable resolvconf from running any subscribers:
resolvconf="NO"
Si vous voulez faire quelque chose de plus sophistiqué que juste le mettre hors tension, les pages de manuel resolvconf
et resolvconf.conf
ont beaucoup d'informations.