Comment désactiver complètement et dynamiquement la pile IPv4 de Linux?

17

Comment désactiver la pile IPv4 sous Linux? Je veux le faire dynamiquement , c'est-à-dire que parfois je veux qu'il soit activé et parfois je veux seulement la pile IPv6 . Existe-t-il un moyen portable de le faire? Si vous savez comment faire cela dans n'importe quelle distribution, cela m'aidera également beaucoup.

Aldebaran
la source
2
@kasperd Rien n'a changé depuis 2011.
Michael Hampton

Réponses:

21

Bien après une petite discussion sur l'IRC, l'opinion générale est que le noyau Linux partage du code entre ipv4 et ipv6, et cela peut rendre la désactivation complète d'ipv4 totalement impossible. Vous pouvez essayer de compiler le noyau sans les parties ipv4 mais ipv6 peut ne pas compiler dans ce cas (mais rien ne vous empêche d'essayer!).

Vous pouvez supprimer les adresses ipv4 des interfaces, AFAIK, mais je ne pense pas qu'il soit possible pour le moment de désactiver complètement ipv4.

EDIT: Après une vérification rapide make menuconfigdu noyau 2.6.36, je n'ai pas pu trouver un moyen de désactiver ipv4 sans désactiver l'intégralité de la pile TCP / IP (et donc ipv6).

coredump
la source
4

Si c'est pour les développeurs, alors "interposition de bibliothèque" pourrait être utilisée, avec LD_PRELOAD une bibliothèque falsifiée avec des fonctions de stub qui renvoient simplement des erreurs (ou qui appellent les vraies en fonction du jour de la semaine ou d'un autre critère externe).

ramruma
la source
2

Je ne pense pas qu'il soit possible de désactiver complètement IPv4, mais selon votre objectif, supprimer tout le trafic IPv4 en utilisant iptables pourrait être suffisant, non?

Quelque chose comme ça devrait fonctionner. Je ne l'ai testé sur aucune machine, car j'y accède via IPv4.

sudo iptables -I INPUT -j DROP
sudo iptables -O OUTPUT -j DROP
Antoine Albertelli
la source
1
Cela bloquera le trafic, ce qui peut parfois être utile. mais cela n'empêchera pas les programmes de lier une socket IPv4. Cela est nécessaire pour désactiver complètement IPv4.
Michael Hampton
Ce que j'ai fait sur une machine où j'avais besoin d'exécuter IPv6 uniquement, c'était de désactiver le client DHCP dans /etc/network/interfaces.d. Ce n'est pas tout à fait la même chose que de désactiver IPv4 car il systemd-resolvedest toujours à l'écoute 127.0.0.53:53. Mais c'était suffisant pour répondre à mes besoins immédiats et je préférais de loin jouer avec iptables.
kasperd
1

Surtout, vous devez recompiler votre noyau sans modules ipv4. feutre

Vous ne pouvez pas le désactiver complètement car le système utilise l'interface de bouclage 127.0.0.1.
Mais vous pouvez désactiver certaines fonctions ipv4 avec la commande if-cfg.

MealstroM
la source