Как полностью, динамически отключить стек IPv4 из Linux?

17

Как я могу отключить стек IPv4 из Linux? Я хочу сделать это динамически , то есть иногда я хочу, чтобы он был включен, а иногда я хочу только стек IPv6 . Есть ли портативный способ сделать это? Если вы знаете, как это сделать в любом дистрибутиве, мне это тоже очень поможет.

Альдебаран
источник
2
@kasperd Ничего не изменилось с 2011 года.
Майкл Хэмптон

Ответы:

21

После небольшого разговора на IRC общее мнение таково: ядро ​​linux разделяет некоторый код между ipv4 и ipv6, и это может сделать полное отключение ipv4 совершенно невозможным. Вы можете попытаться скомпилировать ядро ​​без частей ipv4, но ipv6 может не скомпилироваться в этом случае (но ничто не мешает вам попробовать!).

Вы можете удалить адреса ipv4 из интерфейсов, AFAIK, но я не думаю, что в настоящее время возможно полностью отключить ipv4.

РЕДАКТИРОВАТЬ: После быстрой проверки на make menuconfigядре 2.6.36 я не мог найти способ отключения ipv4 без отключения всего стека TCP / IP (и так, ipv6).

CoreDump
источник
4

Если это для разработчиков, то можно использовать «библиотечную вставку», с LD_PRELOAD некоторая доктрированная библиотека с функциями-заглушками, которые просто возвращают ошибки (или которые вызывают реальные, в зависимости от дня недели или какого-либо другого внешнего критерия).

ramruma
источник
2

Я не думаю, что можно полностью отключить IPv4, но в зависимости от вашей цели iptablesможет быть достаточно отбросить весь трафик IPv4 , не так ли?

Нечто подобное должно работать. Я не тестировал его ни на одной машине, так как я получаю к ним доступ через IPv4.

sudo iptables -I INPUT -j DROP
sudo iptables -O OUTPUT -j DROP
Антуан Альбертелли
источник
1
Это заблокирует трафик, который иногда может быть полезным. но это не остановит программы от привязки сокета IPv4. Это необходимо для полного отключения IPv4.
Майкл Хэмптон
На компьютере, где мне нужно было использовать только IPv6, я должен был отключить DHCP-клиента /etc/network/interfaces.d. Это не совсем то же самое, что отключение IPv4, поскольку systemd-resolvedон все еще прослушивается 127.0.0.53:53. Но этого было достаточно, чтобы удовлетворить мои насущные потребности, и я предпочел возиться с ними iptables.
Касперд
1

В основном вам следует перекомпилировать ваше ядро ​​без модулей ipv4. мягкая фетровая шляпа

Вы не можете отключить его полностью, потому что система использует интерфейс обратной связи 127.0.0.1.
Но вы можете отключить некоторые функции ipv4 с помощью команды if-cfg.

MealstroM
источник