Почему перезагрузка / proc / sys не является глобальной или не сохраняется в пространстве имен в сети внутри LXC

У меня есть хост RHEL-7.2. Внутри работает LXC. Внутри LXC создаются сетевые пространства имен. Внутри пространства имен изменение переменных sysctl не выполнялось (как root):

 $ ip netns add testns $ ip netns exec testns bash $ sysctl net.ipv6.conf.all.disable_ipv6=1 sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system 

Если я перемонтирую /proc/sys для RW в оболочке, а затем sysctl -w внутри той же оболочки, то она действительно работает.

 $ ip netns exec testns bash $ mount -o remount,rw /proc/sys $ sysctl net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.all.disable_ipv6 = 1 

Затем я запускаю вторую оболочку и вводим netns, и /proc/sys появляется Read-ONLY для этой оболочки, но остается доступной для записи в оболочке 1sh. Это меня озадачивает. Аффект изменения значений первой оболочкой видится во второй оболочке.

Я пытался добавить повторную настройку в сценарий подготовки, но эта проблема мешает.

 $ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=1 sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system $ ip netns exec testns sh -c \ > 'mount -o remount,rw /proc/sys && sysctl net.ipv6.conf.all.disable_ipv6=1' net.ipv6.conf.all.disable_ipv6 = 1 $ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=0 sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system 

Обратите внимание, что я могу сделать это изменение sysctl на хосте и в пространстве имен по умолчанию LXC без каких-либо проблем. Если я создаю пространство имен на хосте напрямую, у меня нет этой проблемы. Я только запускаю /proc/sys только для чтения внутри пространства имен внутри LXC.

Мои вопросы здесь:

Q1 . Я хотел бы, чтобы /proc/sys внутри пространства имен внутри LXC оставался постоянно установленным с RW, поэтому я могу установить sysctl vars в любое время.

Q2 . Я хотел бы понять, почему он ведет себя так, как он. Кажется, /proc/sys mount – это как-то для процесса или для системного вызова setns ? man ip-netns рассказывает о монтировании привязки для /etc/netns/<name>/file но я ничего не вижу о /proc . Я пропустил что-то очевидное?

Обновить

Я нашел то, что, скорее всего, будет ответом на мой Q2 . Сначала экспериментально, а затем в man ip-netns :

ip netns exec автоматизирует обработку этой конфигурации, соглашение о файлах для пространства имен неизвестных приложений, создавая пространство имен монтирования и привязывая монтирование всех сетевых пространств имен имен в их традиционное расположение в /etc

Поэтому каждый раз, когда ip netns exec создает новое пространство имен монтирования, но /proc/sys становится жертвой любых параметров монтирования, которые он получил, откуда они их получали. Мое лучшее предположение: мне нужно найти, что вызывает ip netns exec для монтирования bind /proc/sys в режиме только для чтения в LXC, что, вероятно, ответит на мой вопрос Q1.

One Solution collect form web for “Почему перезагрузка / proc / sys не является глобальной или не сохраняется в пространстве имен в сети внутри LXC”

Я нашел то, что работает для меня. Это решение может быть плохой идеей для тех, кто заботится о безопасности, например, предотвращает вмешательство контейнера в хост. Я не совсем понимаю последствия моего решения. Я запускаю только свой код внутри LXC с помощью тестов Jenkins, поэтому для меня это не проблема.

Я нашел здесь: https://libvirt.org/drvlxc.html#fsmounts :

Следующие специальные крепления настраиваются на libvirt

 /proc/sys the host "/proc/sys" bind-mounted read-only 

Я все еще не понимаю, почему внутри пространства имен по умолчанию внутри LXC я могу установить sysctl но внутри других пространств имен я не могу.

Я добавил явное /proc/sys mount в config контейнера XML:

 <devices> ... <filesystem type='mount' accessmode='passthrough'> <source dir='/proc/sys/'/> <target dir='/proc/sys/'/> </filesystem> 

Это позволило мне установить sysctl как внутри контейнера по умолчанию LXC, так и в дополнительных пространствах имен. Я боялся, что настройка внутри LXC также повлияет на хост, но это не так. Теперь все пространственные пространства имен (host, LXC default, LXC custom) имеют свои независимые переменные sysctl доступные для записи (через root), без необходимости пересоединения каждый раз. Или, по крайней мере, то, что сообщает sysctl запрос.

  • настройка flashcache
  • Почему редактирование core_pattern ограничено?
  • Есть ли альтернатива для net.ipv6.ip_nonlocal_bind на FreeBSD?
  • Модуль ядра для net.bridge.bridge-nf-call-iptables
  • Определение значений параметров ядра, связанных с sysctl.conf и sysctl.d
  • В чем разница между всеми параметрами и значением по умолчанию в настройках ядра?
  • Как включить в ядро ​​user_namespaces? (Для непривилегированных `unshare`.)
  • Заставить локальный IP-трафик проходить через LAN без изменений IP-адреса
  • Пределы дескриптора файла в / etc / system vs /etc/sysctl.conf vs /etc/security/limits.conf в Solaris
  • /etc/sysctl.conf Fedora {17-20}?
  • отключить прозрачные огромные страницы
  • Interesting Posts

    Посещение сайтов darknet / Tor с помощью Firefox

    Проблема с экраном ноутбука при открытии крышки

    Скрыть и отобразить курсор с помощью tput

    Создать ссылку между двумя существующими файлами

    Как предотвратить /var/log/mail.log от раздувания?

    Изображение dd слишком велико для восстановления

    Как изменить каталог из сценария без вызова сценария. ./script или выйти из сценария при вызове. ./script.sh

    Моя команда `which` может быть неправильной (иногда)?

    Самый простой способ для песочницы пользователя

    Система слишком медленная

    Где бы я начал искать документацию в графическом режиме консоли Linux?

    FreeBSD 9.0 установить НЕ настраивать порты

    Может ли bash распознавать объявление переменной как строку, если вы не ставите кавычки?

    Выполнение команд последовательно на основе вывода журнала

    Как использовать grep и вырезать скрипт для получения URL-адресов веб-сайтов из файла HTML

    Linux и Unix - лучшая ОС в мире.