lxc/lxd Ошибки правила владельца вывода iptables с "Неверный аргумент".
Если я попытаюсь выполнить следующую команду в моем контейнере lxc/lxd Ubuntu 14.04 amd64:
iptables -A OUTPUT -p tcp -m owner --uid-owner 0 -m tcp --dport 80 -j ACCEPT
Я получаю следующее сообщение об ошибке:
iptables: Invalid argument. Run `dmesg' for more information.
...но /var/log/dmesg
не получает никакого дополнительного вывода.
Я уверен, что правило iptables действует, потому что оно работает на хосте lxc / lxd и на других машинах. Часть, которая, кажется, виновата, является частью владельца, то есть, если я запускаю это:
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
... это работает отлично.
Мне это кажется ошибкой в lxc, но есть ли способ, которым я могу исследовать это дальше?
Редактировать 1
Я собрал iptables из источника с флагами отладки, а затем проследил выполнение. Это привело меня к iptables-standalone.c
файл, в котором находится:
int iptc_commit(struct xtc_handle *handle);
... функция возвращает EINVAL
код ошибки. Проблема в том, что я не могу отследить источник для этой функции. Кажется, находится в libip4tc.so
общая библиотека, но я не могу отследить источник этой библиотеки.
Если кто-то знает, где источник, я был бы признателен, если бы вы могли дать мне знать.
Редактировать 2
Обратитесь к этой проблеме LXC GitHub, которую я создал, которая рисует больше картины. Я собираюсь сдаться, только потому, что работа слишком обширна для меня, чтобы я мог ее взять, когда я могу просто обойти проблему, избегая "соответствующих" правил iptables в контейнерах.
1 ответ
Все, что вам нужно сделать, это установить конфигурацию "security.privileged" контейнера в "true", так как по умолчанию это "false".
Т.е. обращайтесь к этому и ищите эту конфигурацию "security.privileged".
Я не совсем уверен, что делает изменение этого конфига, так что будьте осторожны и исследуйте себя, но я думаю, что он просто предоставляет контейнеру больше привилегий в отношении управления общим ядром (общим для хоста и контейнера).