LINUX.ORG.RU

ipset: Cannot open session to kernel.

 , ,


0

1

Здравствуйте. Нужна помощь опытных линуксоидов.

Понадобилось мне на своем роутере, с прошивочкой OpenWRT слать трафик, адресованный на определенные IP-адреса, через vpn-тунель. Список иногда меняется и нужно как-то обновлять правила маршрутизации.

Сначала я думал использовать скрипт, который будет прописывать правила через iptables для каждого адреса, но из-за того, что список большой, а роутер тормозной, это крайне не оптимально.

Немножко погуглив я узнал про замечательную утилиту ipset которая, как я понял, позволяла сделать список адресов и затем использовать его в единственном правиле iptables и это работало бы быстрее.

У OpenWRT есть пакетный менеджер opkg, через который я без каких либо проблем поставил пакеты ipset и iptables-mod-ipset.

Но тут меня ждало разочарование. На любую команду ipset ответ один, к примеру:

root@BAKA0:~# ipset list
ipset v6.11: Cannot open session to kernel.

Ну, думаю, ладно. Всякое бывает. OpenWRT сама по себе обрезанная и, наверное, просто чего-то не хватает. Решил пока забить на эту проблему и пойти поиграться с ipset в своей debian-песочнице.

Там нужного пакета тоже не стаяло, так что я его поставил. Но и тут произошло то, чего я не ожидал:

root@voaoom:~# ipset list
ipset v6.12.1: Cannot open session to kernel.
Тогда я подумал, что у меня просто кривые руки и я что-то упустил. Потратил пару часов на гугление этой ошибки. Некоторые люди сталкивались с таким, и даже здесь, но нигде конкретных решений не было. Это уже серьёзно.

В общем, я уже не знаю что делать. Может тут кто-нибудь поможет?

Ну и немного версий, если поможет. Роутер:

root@BAKA0:~# uname -a
Linux BAKA0 3.3.8 #5 Wed Jun 12 12:10:41 MSK 2013 mips GNU/Linux
root@BAKA0:~# ipset -v
ipset v6.11, protocol version: 6
root@BAKA0:~# iptables -V
iptables v1.4.10
Песочница:
root@voaoom:~# uname -a
Linux voaoom 2.6.32-042stab084.12 #1 SMP Tue Nov 26 20:18:08 MSK 2013 x86_64 GNU/Linux
root@voaoom:~# ipset -v
ipset v6.12.1, protocol version: 6
root@voaoom:~# iptables -V
iptables v1.4.14



Последнее исправление: voaoom (всего исправлений: 2)

ipset v6 работает через netlink. Убедись, что ядро поддерживает CONFIG_NETFILTER_NETLINK

Модули от ipset загружены ?

lsmod | grep ip_set

В dmesg не ругани ?

vel ★★★★★
()
Ответ на: комментарий от vel

Убедись, что ядро поддерживает CONFIG_NETFILTER_NETLINK

Как это сделать?

Модули от ipset загружены ?

Не знаю.

lsmod | grep ip_set

Выдает ничего на обеих системах.

В dmesg не ругани ?

Нету.

voaoom
() автор топика
Ответ на: комментарий от voaoom

Убедись, что ядро поддерживает CONFIG_NETFILTER_NETLINK

Как это сделать?

zgrep NETFILTER_NETLINK /proc/config.gz

если есть такой файл в /proc, иначе в .config от ядра.

для работы ipset нужно: netlink в ядре ( + libmnl), утилита ipset (+ свои либы), модули ipset в ядре, расширение для iptables.

Самое надежное - собрать из исходников (c openwrt это не так просто и быстро). Если оно не работает из коробки в каком-то дистре, то это значит, что мантейнер этого пакета раздолбай.

сам ipset не торт. Версия ядерных модулей в самом ipset сильно отличается в лучшую сторону от модулей в ванильных ядрах, но требует отдельной сборки.

vel ★★★★★
()
Ответ на: комментарий от vel

если есть такой файл в /proc

Нету.

иначе в .config от ядра.

Не понял.

для работы ipset нужно: netlink в ядре ( + libmnl), утилита ipset (+ свои либы), модули ipset в ядре, расширение для iptables.

На OpenWRT ставил libmnl, iptables-mod-ipset (IPset iptables extensions) и kmod-ipt-ipset (IPset netfilter modules). Других пакетов на эту тему вообще в репах не нашел. На Дебиане libmnl0 и libipset2 тянулись как зависимые, а о расширениях еще не думал.

Если оно не работает из коробки в каком-то дистре, то это значит, что мантейнер этого пакета раздолбай.

Но в Дебиане-то, я думаю, этот пакет популярный, но ошибки на эту тему не гуглятся, значит у других пользователей этой проблемы не возникало. Хотя, возможно, дело в том, что на хостинге Дебиан на OpenVZ, а там уже ядро как-то не так сконфигурировано.

Может тогда пойти другим путём? Есть ли альтернативы ipset?

voaoom
() автор топика
Ответ на: комментарий от voaoom

.config - файл конфигурации ядра при сборке, дистрибутивозависимый. Где его взять в openwrt - не знаю.

а в openwrt kmod-nfnetlink есть и модуль загружен ? А модули не пробовал загружать ? Ведь если есть kmod-ipt-ipset, а «lsmod |grep ip_set» пусто, то это значит, что модули не загружены.

 lsmod | grep ip_set
ip_set_hash_ip         14915  3 
ip_set_bitmap_port      5059  2 
ip_set_hash_net        18375  1 
ip_set                 21340  4 ip_set_hash_ip,ip_set_bitmap_port,ip_set_hash_net,xt_set
nfnetlink               2957  3 ip_set,nfnetlink_log,nf_conntrack_netlink

openVZ - это отдельная тема. Там с ipset вообще не просто.

vel ★★★★★
()
Ответ на: комментарий от voaoom

Не понял.

grep -i netlink /boot/config-$(uname -r)

Но в Дебиане-то, я думаю, этот пакет популярный, но ошибки на эту тему не гуглятся, значит у других пользователей этой проблемы не возникало.

Поддерживаю мысль что просто нужные модули ядра не загружены, хотя присутствуют.

Может тогда пойти другим путём?

Рано :)

Есть ли альтернативы ipset?

/me не в курсе, наверное нет.

qux
()
Ответ на: комментарий от vel

сам ipset не торт. Версия ядерных модулей в самом ipset сильно отличается в лучшую сторону от модулей в ванильных ядрах, но требует отдельной сборки.

А как там с мержем всего этого в ваниль, если в курсе? Давно уже говорили...

qux
()
Ответ на: комментарий от qux

ipset сейчас опять меняет свою функциональность. С такой частотой изменений в ванильное ядро им трудно попасть. IMHO в 3.13 вместе с nft попадет, а пока не использовать ванильный ipset и собирать отдельно все из ipset.

vel ★★★★★
()
Ответ на: комментарий от vel

Кстати да, rc1 уже ж есть, и по теме там что-то вливалось:

$ git l --grep='\bipset\b' -i --oneline v3.12..v3.13-rc1 
72c39a0 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
1e56555 netfilter: ipset: remove duplicate define
dc476e7 netfilter:ipset: Fix memory allocation for bitmap:port
1a86920 netfilter: ipset: The unnamed union initialization may lead to compilation error
9330288 netfilter: ipset: Use netlink callback dump args only
da33edc Merge branch 'net-next' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nftables
d639fea Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
7c3ad05 netfilter: ipset: Add hash:net,port,net module to kernel.
1785e8f netfiler: ipset: Add net namespace for ipset
3fd986b netfilter: ipset: Use a common function at listing the extensions
8ec81f9 netfilter: ipset: For set:list types, replaced elements must be zeroed out
80571a9 netfilter: ipset: Fix hash resizing with comments
fda75c6 netfilter: ipset: Support comments in hash-type ipsets.
81b10bb netfilter: ipset: Support comments in the list-type ipset.
b90cb8b netfilter: ipset: Support comments in bitmap-type ipsets.
68b63f0 netfilter: ipset: Support comments for ipset entries in the core.
ea53ac5 netfilter: ipset: Add hash:net,net module to kernel.
d9628bb netfilter: ipset: Kconfig: ipset needs NETFILTER_NETLINK
b91b396 netfilter: ipset: list:set: make sure all elements are checked by the gc
40cd63b netfilter: ipset: Support extensions which need a per data destroy function
03c8b23 netfilter: ipset: Generalize extensions support
ca134ce netfilter: ipset: Move extension data to set structure
f925f70 netfilter: ipset: Rename extension offset ids to extension ids
a04d8b6 netfilter: ipset: Prepare ipset to support multiple networks for hash types
5e04c0c netfilter: ipset: Introduce new operation to get both setname and family
bd3129f netfilter: ipset: order matches and targets separatedly in xt_set.c
60b0fe3 netfilter: ipset: Support package fragments for IPv4 protos without ports
b8cd978 netfilter: ipset: Use fix sized type for timeout in the extension part
20b2fab netfilter: ipset: Fix "may be used uninitialized" warnings
35b8dcf netfilter: ipset: Rename simple macro names to avoid namespace issues.
a0f28dc netfilter: ipset: Fix sparse warnings due to missing rcu annotations
b3aabd1 netfilter: ipset: Sparse warning about shadowed variable fixed
122ebbf netfilter: ipset: Don't call ip_nest_end needlessly in the error path
qux
()
Ответ на: комментарий от qux
1785e8f netfiler: ipset: Add net namespace for ipset

Хм, и полгода не прошло после засылки патча. Без него ipset был один на все lxc, что делало его непригодным для эксплуатации.

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.