Вопрос или проблема
По умолчанию, когда я создаю сетевое пространство имен, я получаю:
/proc/sys/net/ipv6/conf/all/forwarding=0
Даже если это 1 в моем корневом сетевом пространстве имен или в /etc/sysctl.conf. Мне было интересно, откуда сетевые пространства имен получают конфигурацию по умолчанию и как это изменить. Я хотел бы, чтобы это было выставлено на 1, чтобы новые сетевые пространства имен получали эту конфигурацию по умолчанию.
Я думаю, что нашёл ответ. В общем, сетевые пространства имен унаследуют параметры корневого пространства имен. Это контролируется настройками devconf-inherit-init-net, как объясняется здесь:
https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html#devconf-inherit-init-net
По умолчанию все параметры ipv4 унаследованы, но не ipv6
Вы можете установить значение по умолчанию, задав ему значение 1, выполнив
# чтобы подтвердить, что вы начинаете со значения 0
cat /proc/sys/net/ipv6/conf/default/forwarding
0
# теперь установите значение 1
echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
# чтобы подтвердить ваше новое значение выполните
cat /proc/sys/net/ipv6/conf/default/forwarding
1
Ответ или решение
Чтобы установить значение /proc/sys/net/ipv6/conf/all/forwarding
на 1 по умолчанию для новых сетевых пространств имен в Linux, необходимо понимать механизм унаследования настроек между пространствами имен и как правильно их менять.
Понимание механизма унаследования параметров
Сетевые пространства имен (network namespaces) в Linux изначально наследуют параметры сетевой конфигурации из корневого пространства имен. Однако по умолчанию параметры, касающиеся IPv6, не унаследуются так же, как параметры IPv4. В частности, для параметра forwarding
, который отвечает за пересылку IPv6 пакетов, важным является понимание таких настроек, как devconf-inherit-init-net
, о которых указано в официальной документации Kernel Documentation.
Настройка параметра IPv6 forwarding
Чтобы установить значение forwarding
для новых пространств имен, следует изменить его значение в конфигурации /proc/sys/net/ipv6/conf/default/forwarding
. Настройка default
используется именно для новых сетевых пространств имен, которые будут созданы после изменения.
Шаги для установки значения
-
Проверка текущего значения
forwarding
:
Сначала стоит убедиться, что текущее значение параметра равно 0. Это можно сделать с помощью следующей команды:cat /proc/sys/net/ipv6/conf/default/forwarding
Ожидаемый вывод:
0
-
Установка значения
1
:
Для изменения параметра на 1 выполните следующую команду:echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
-
Подтверждение изменения:
Убедитесь, что значение было изменено правильно:cat /proc/sys/net/ipv6/conf/default/forwarding
Ожидаемый вывод:
1
Автоматизация изменений с помощью sysctl
Чтобы изменения сохранялись после перезагрузки, можно добавить соответствующую настройку в файл конфигурации /etc/sysctl.conf
или создать отдельный файл в /etc/sysctl.d/
. Добавьте следующую строку:
net.ipv6.conf.default.forwarding = 1
После внесения изменений выполните команду для применения новых настроек:
sysctl -p
Заключение
Теперь каждое новое сетевое пространство имен, создаваемое после этих изменений, будет автоматически получать значение forwarding
равное 1. Это обеспечит возможность пересылки IPv6 пакетов, что может быть критически важно в сценариях, где требуется межсетевое взаимодействие внутри контейнеров или виртуальных машин. Убедитесь, что ваша сеть и приложения настроены соответствующим образом для работы с данными изменениями.