Почему перезагрузка / 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 запрос.

  • измените TCP_TIMEWAIT_LEN во время выполнения
  • Узнать значения sysctl по умолчанию? (без перезагрузки)
  • / proc / sys vs / sys / modules / mod / parameter
  • Восстановить часть пакета, который был случайно удален
  • dmesg: очистить буфер ядра не удалось: разрешение отклонено
  • Пределы дескриптора файла в / etc / system vs /etc/sysctl.conf vs /etc/security/limits.conf в Solaris
  • Изменение параметров sysctl для всех интерфейсов
  • Определение значений параметров ядра, связанных с sysctl.conf и sysctl.d
  • Переполнение буфера UDP и очистка старой датаграммы
  • отключить прозрачные огромные страницы
  • Изменение параметра Sysctl после каждой перезагрузки
  • Interesting Posts

    Винные места для установки cdrom на Linux Mint 10 (Ubuntu 10.10) – проблемы после установки / переключения дисков

    Почему «человекочитаемый» необходим, а не дефолт?

    Как сделать любой файл и поместить содержимое в этот скрипт

    Настройка разрешений с помощью FTP

    Расширение Wash с Bash с помощью командной строки

    Канонические пути: зачем они нужны?

    Только grep для строк, содержащих только алфавитные символы

    Использование grep с символической ссылкой

    добавьте пробел 5 раз в начале каждой строки в текстовом файле

    Как настроить мой сервер, чтобы избежать утечки информации из заголовка SERVER его ответа HTTP

    Как измерить диск и сеть IO чаще, чем секунду?

    Можем ли мы использовать ssh для подключения к веб-серверу, а затем отправить HTTP-запрос и получить ответ HTTP?

    Могу ли я перейти на новую версию Python на старой версии Ubuntu?

    SSH: как подключиться с паролем, зная только фразу?

    Как отправить системные сообщения в irssi?

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