Jump to content
Le ecureuil

Как правильно использовать netfilter в opkg

Recommended Posts

Итак, начиная с версии прошивки 2.08.A.11.0-3 мы полностью исключили использование skb->mark в ndm, поэтому вы можете его спокойно использовать (iptables match mark и target MARK).

Для полной совместимости с ядром и системой NDMS необходимо использовать следующий патч для iptables: 920-xt_ndmmark.patch и 930-xt_conndmmark.patch (в этом случае iptables-save и iptables-restore не будут ругаться). У вас будут показываться ndmmark/conndmmark match и NDMMARK/CONNDMMARK target, но трогать их не стоит - они активно используются системой.

Однако, следует понимать, что в ядре NDMS присутствуют различные ускорители, которые так или иначе меняют логику работы netfilter.

Поэтому если у вас что-то не работает в netfilter, tc, policy routing и подобных вещах, то сперва проверьте, сделали ли вы нижеследующее:

- отключить FastNAT:

> system set net.ipv4.netfilter.ip_conntrack_fastnat 0

(обратно включить можно через 

> system set net.ipv4.netfilter.ip_conntrack_fastnat 1)

- отключить ppe software:

> no ppe software

- отключить ppe hardware:

> no ppe hardware

И проверить результат работы. Если поведение ядра вас устраивает, можете сохранить настройки:

> system configuration save

 

Начиная с 2.11 стоит учитывать, что таблица raw монопольно захватывается компонентом netflow и не загружается автоматически.

Если она вам нужна - удалите компонент netflow, и загружайте руками iptable_raw.ko.

 

Важно: скрипты в netfilter.d могут вызываться очень часто и с произвольным интервалом, потому обязательно проверьте свои скрипты на работу в таких условиях + на то, что вы проверяете и версию протокола (IPv4 или IPv6), как указано здесь: https://github.com/ndmsystems/packages/wiki/Opkg-Component#ndmnetfilterd

 

Важный момент: скорость без всех ускорителей будет так себе, но вы должны понимать на что идете: или полноценная функциональность, или скорость.

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

 

  • Thanks 5

Share this post


Link to post
Share on other sites

Ура, Правильно я понимаю что теперь можно организовать полноценный MultiWan и при этом использовать IPSec из прошивки?

если использовать iptables без патча только для добавления своих записей и не пользоваться save/restore то ничего не поломается я полагаю?

Share this post


Link to post
Share on other sites

А чем определяется частое передергивание правил?

Использую collectd c плагином iptbales, который напрямую общается c netfilter для получения значений счетчиков. Для отрисовки трафика определенных клиентов через iptables создаю и маркирую правила. Соответственно, в свой скрипт /opt/etc/ndm/netfilter.d/filter.sh добавил код (правила). Например:

[ "$table" != "filter" ] && exit 0   # check the table name                                                                                                   
/opt/sbin/iptables -I OUTPUT -p ICMP -s 192.168.1.0/24 -m comment --comment "ICMP" -j ACCEPT                                                                   
/opt/bin/logger -t "iptables" "Rule for collectd added" 

Но по syslog вижу, что этот код часто выполняется. Скорее всего, это происходит, когда подключаются/отключаются клиенты wi-fi, порты роутера. При этом и обнуляются счетчики на данном правиле. Это не очень положительно сказывается на точности учета трафика (если, особенно период опроса счетчиков большой).

Можно ли этого как-то избежать?

Share this post


Link to post
Share on other sites
2 часа назад, r13 сказал:

Ура, Правильно я понимаю что теперь можно организовать полноценный MultiWan и при этом использовать IPSec из прошивки?

если использовать iptables без патча только для добавления своих записей и не пользоваться save/restore то ничего не поломается я полагаю?

Да, все так.

Share this post


Link to post
Share on other sites
2 часа назад, Александр Рыжов сказал:

@r13, IPSec был и раньше. Теперь заработали fwmarks и стал возможен условный роутинг по этим меткам, у примеру, теперь можно использовать VPN для выбранного перечня ресурсов.

Не совсем, IPsec ставил/снимал марки на своих пакетах, потому fwmarks конфликтовал с ним.

  • Thanks 1

Share this post


Link to post
Share on other sites
1 час назад, gvan сказал:

А чем определяется частое передергивание правил?

Использую collectd c плагином iptbales, который напрямую общается c netfilter для получения значений счетчиков. Для отрисовки трафика определенных клиентов через iptables создаю и маркирую правила. Соответственно, в свой скрипт /opt/etc/ndm/netfilter.d/filter.sh добавил код (правила). Например:


[ "$table" != "filter" ] && exit 0   # check the table name                                                                                                   
/opt/sbin/iptables -I OUTPUT -p ICMP -s 192.168.1.0/24 -m comment --comment "ICMP" -j ACCEPT                                                                   
/opt/bin/logger -t "iptables" "Rule for collectd added" 

Но по syslog вижу, что этот код часто выполняется. Скорее всего, это происходит, когда подключаются/отключаются клиенты wi-fi, порты роутера. При этом и обнуляются счетчики на данном правиле. Это не очень положительно сказывается на точности учета трафика (если, особенно период опроса счетчиков большой).

Можно ли этого как-то избежать?

Нет, пока прошивка сделана именно так, и переделывать ее не запланировано.

Share this post


Link to post
Share on other sites
3 часа назад, Le ecureuil сказал:

Нет, пока прошивка сделана именно так, и переделывать ее не запланировано.

Т.е. при возникновении таких сетевых событий делается flush всех правил и цепочек без исключений? Или же какие-то служебные все-таки остаются?

Если есть возможность хака в виде создания некой своей кастомной цепочки (например, с именем, начинающимся с определенных символов), то можно в ней уже учитывать трафик. Ну естественно при этом эта цепочка не должна чиститься.

Share this post


Link to post
Share on other sites
5 минут назад, gvan сказал:

Т.е. при возникновении таких сетевых событий делается flush всех правил и цепочек без исключений? Или же какие-то служебные все-таки остаются?

Если есть возможность хака в виде создания некой своей кастомной цепочки (например, с именем, начинающимся с определенных символов), то можно в ней уже учитывать трафик. Ну естественно при этом эта цепочка не должна чиститься.

Нет, перезаписывается весь netfilter целиком по каждой нужде. Пока это невозможно "быстро" исправить.

Share this post


Link to post
Share on other sites
18 минут назад, Le ecureuil сказал:

Нет, перезаписывается весь netfilter целиком по каждой нужде. Пока это невозможно "быстро" исправить.

Ясно :(

А "каждая нужда" какими примерно событиями определяется (чтобы для себя понимать насколько часто это может происходить и от чего это зависит)?

Share this post


Link to post
Share on other sites
В 30.11.2016 в 12:05, Le ecureuil сказал:

Для полной совместимости с ядром и системой NDMS необходимо использовать следующий патч для iptables: 920-xt_ndmmark.patch (в этом случае iptables-save и iptables-restore не будут ругаться). У вас будут показываться ndmmark match и NDMMARK target, но трогать их не стоит - они активно используются системой.

Это несколько нарушает универсальность репозиториев Entware-3x. Но пока можно обойтись без отдельного фида для кинетика.

Share this post


Link to post
Share on other sites

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

роутер zeexel keenetic белый. вроди б в правилах все верно, но может что и пропустил, так как незрячий полностю и пользую скринридер. может кто списаться со мной на скайп, чтоб помочь сделать ремапинг портов? или через timeviewer,  или через то что я буду транслировать экран по скайпу. просто в подключениях, там где broadband интерфейс есть несколько галок, которые никак не читаются. может и там что не то? хотя я там ничего не трогал, просто выбрал ип вручную и там его прописал. entware  поставился без проблем, а вот перенаправление портов не работает. незнаю как дать мой скайп, чтоб не давать открыто, и чтоб меня и тут опять не забанили, как в forums.zyxmon.org.

Share this post


Link to post
Share on other sites

А в скриптах /opt/etc/ndm/netfilter.d/ при использовании "встроенного" iptables он выпадает в Segmentation fault

Хотя просто из шелла работает.

Надо обязательно ставить iptables из пакетов?

Версия release: v2.08(AAUW.0)C1

Share this post


Link to post
Share on other sites
11 час назад, gaaronk сказал:

А в скриптах /opt/etc/ndm/netfilter.d/ при использовании "встроенного" iptables он выпадает в Segmentation fault

Хотя просто из шелла работает.

Надо обязательно ставить iptables из пакетов?

Версия release: v2.08(AAUW.0)C1

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

Да, обязательно ставить из пакетов.

Share this post


Link to post
Share on other sites

Поднял Openvpn сервер на Keenetic Ultra II v2.08(AAUX.0)C1. Установил Entware-3, openvpn, и все вроде работает... но постоянно в логе:

I] Mar 15 12:55:21 ndm: Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
[C] Mar 15 12:56:12 ndm: Netfilter::Table: IPT_SO_SET_REPLACE failed: resource temporarily unavailable.
[C] Mar 15 12:58:22 ndm: Core::Syslog: last message repeated 2 times.
Mar 15 12:59:02 ndm: Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
Mar 15 13:03:54 ndm: Core::Syslog: last message repeated 3 times.
[C] Mar 15 13:05:24 ndm: Netfilter::Table: IPT_SO_SET_REPLACE failed: resource temporarily unavailable.
Mar 15 13:06:55 ndm: Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
[C] Mar 15 13:07:15 ndm: Netfilter::Table: IPT_SO_SET_REPLACE failed: resource temporarily unavailable.
Mar 15 13:20:49 ndm: Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
Mar 15 13:20:59 ndm: Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
[C] Mar 15 13:21:09 ndm: Netfilter::Table: IPT_SO_SET_REPLACE failed: resource temporarily unavailable.

клиентов подключенных порядка 3-5
в логе постоянно валятся сообщения от iptables: Resource temporarily unavailable., но вроде как работе это не мешает (я так понимаю, это от запуска iptables в момент, когда еще старый не отработал. Судя по логам скрипт постоянно запускается (каждые 10 секунд на одного абонента) и иногда они накладываются друг на друга.
 

с этим что-то можно сделать?

через некоторое время (1-2 дня), сервис openvpn сам останавливается... при перезапуске его руками все опять работает 1-2 дня и отваливается снова...

Share this post


Link to post
Share on other sites

отвалился:

Mar 17 09:08:50ndm Opkg::Manager: /opt/etc/ndm/netfilter.d/052-openvpn-filter.sh: iptables: Resource temporarily unavailable.
Mar 17 09:08:50ndm Core::Syslog: last message repeated 20 times.
Mar 17 09:09:09ipsec12[KNL] interface tun0 deactivated
Mar 17 09:09:09ipsec13[KNL] 10.23.100.1 disappeared from tun0
Mar 17 09:09:09ipsec15[KNL] interface tun0 deleted

Share this post


Link to post
Share on other sites
Скрытый текст

Для полной совместимости с ядром и системой NDMS необходимо использовать следующий патч для iptables: 920-xt_ndmmark.patch (в этом случае iptables-save и iptables-restore не будут ругаться). У вас будут показываться ndmmark match и NDMMARK target, но трогать их не стоит - они активно используются системой.

Не подскажите новичку как накатить патчик?

Edited by naileddeath

Share this post


Link to post
Share on other sites

@Le ecureuil А можно узнать что влияет на наиболее частое дерганье iptables, чтобы можно было подумать надо оно мне или можно выключить, а то как то уж совсем часто:

Скрытый текст

[2018.12.31_01:52:05]hook type: ip6tables table: filter
[2018.12.31_01:52:05]hook type: ip6tables table: mangle
[2018.12.31_01:52:05]hook type: iptables table: filter
[2018.12.31_01:52:05]hook type: iptables table: mangle
[2018.12.31_01:52:06]hook type: iptables table: nat
[2018.12.31_01:52:06]hook type: ip6tables table: filter
[2018.12.31_01:52:06]hook type: ip6tables table: mangle
[2018.12.31_01:52:06]hook type: iptables table: filter
[2018.12.31_01:52:06]hook type: iptables table: mangle
[2018.12.31_01:52:06]hook type: iptables table: nat
[2018.12.31_01:52:06]hook type: ip6tables table: filter
[2018.12.31_01:52:06]hook type: ip6tables table: mangle
[2018.12.31_01:52:06]hook type: iptables table: filter
[2018.12.31_01:52:06]hook type: iptables table: mangle
[2018.12.31_01:52:07]hook type: iptables table: nat
[2018.12.31_01:52:07]hook type: ip6tables table: filter
[2018.12.31_01:52:07]hook type: ip6tables table: mangle
[2018.12.31_01:52:07]hook type: iptables table: filter
[2018.12.31_01:52:07]hook type: iptables table: mangle
[2018.12.31_01:52:07]hook type: iptables table: nat
[2018.12.31_01:52:07]hook type: ip6tables table: filter
[2018.12.31_01:52:07]hook type: ip6tables table: mangle
[2018.12.31_01:52:07]hook type: iptables table: filter
[2018.12.31_01:52:08]hook type: iptables table: mangle
[2018.12.31_01:52:08]hook type: iptables table: nat
[2018.12.31_01:52:08]hook type: ip6tables table: filter
[2018.12.31_01:52:08]hook type: ip6tables table: mangle
[2018.12.31_01:52:08]hook type: iptables table: filter
[2018.12.31_01:52:08]hook type: iptables table: mangle
[2018.12.31_01:52:08]hook type: iptables table: nat
[2018.12.31_01:52:09]hook type: ip6tables table: filter
[2018.12.31_01:52:09]hook type: ip6tables table: mangle
[2018.12.31_01:52:09]hook type: iptables table: filter
[2018.12.31_01:52:09]hook type: iptables table: mangle
[2018.12.31_01:52:09]hook type: iptables table: nat
[2018.12.31_01:52:09]hook type: ip6tables table: filter
[2018.12.31_01:52:09]hook type: ip6tables table: mangle
[2018.12.31_01:52:09]hook type: iptables table: filter
[2018.12.31_01:52:10]hook type: iptables table: mangle
[2018.12.31_01:52:10]hook type: iptables table: nat
[2018.12.31_01:52:10]hook type: ip6tables table: filter
[2018.12.31_01:52:10]hook type: ip6tables table: mangle
[2018.12.31_01:52:10]hook type: iptables table: filter
[2018.12.31_01:52:11]hook type: iptables table: mangle
[2018.12.31_01:52:11]hook type: iptables table: nat
[2018.12.31_01:52:11]hook type: ip6tables table: filter
[2018.12.31_01:52:11]hook type: ip6tables table: mangle
[2018.12.31_01:52:11]hook type: iptables table: filter
[2018.12.31_01:52:11]hook type: iptables table: mangle
[2018.12.31_01:52:11]hook type: iptables table: nat
[2018.12.31_01:52:11]hook type: ip6tables table: filter
[2018.12.31_01:52:12]hook type: ip6tables table: mangle
[2018.12.31_01:52:12]hook type: iptables table: filter
[2018.12.31_01:52:12]hook type: iptables table: mangle
[2018.12.31_01:52:12]hook type: iptables table: nat
[2018.12.31_01:52:12]hook type: ip6tables table: filter
[2018.12.31_01:52:12]hook type: ip6tables table: mangle
[2018.12.31_01:52:12]hook type: iptables table: filter
[2018.12.31_01:52:12]hook type: iptables table: mangle

И в таком ритме постоянно.

Share this post


Link to post
Share on other sites
В 31.12.2018 в 02:04, r13 сказал:

@Le ecureuil А можно узнать что влияет на наиболее частое дерганье iptables, чтобы можно было подумать надо оно мне или можно выключить, а то как то уж совсем часто:

  Показать содержимое

И в таком ритме постоянно.

У вас много настроек с политиками, скорее всего из-за этого.

Постфактум узнать невозможно.

Share this post


Link to post
Share on other sites
10 часов назад, Le ecureuil сказал:

У вас много настроек с политиками, скорее всего из-за этого.

Постфактум узнать невозможно.

Грохнул все политики, не помогает :)

Скрытый текст

[2019.01.10_21:39:10]hook type: iptables table: mangle
[2019.01.10_21:39:10]hook type: ip6tables table: filter
[2019.01.10_21:39:10]hook type: ip6tables table: mangle
[2019.01.10_21:39:10]hook type: iptables table: filter
[2019.01.10_21:39:10]hook type: iptables table: mangle
[2019.01.10_21:39:10]hook type: ip6tables table: filter
[2019.01.10_21:39:10]hook type: ip6tables table: mangle
[2019.01.10_21:39:10]hook type: iptables table: filter
[2019.01.10_21:39:10]hook type: iptables table: mangle
[2019.01.10_21:39:10]hook type: ip6tables table: filter
[2019.01.10_21:39:11]hook type: ip6tables table: mangle
[2019.01.10_21:39:11]hook type: iptables table: filter
[2019.01.10_21:39:11]hook type: iptables table: mangle
[2019.01.10_21:39:11]hook type: ip6tables table: filter
[2019.01.10_21:39:11]hook type: ip6tables table: mangle
[2019.01.10_21:39:11]hook type: iptables table: filter
[2019.01.10_21:39:11]hook type: iptables table: mangle
[2019.01.10_21:39:11]hook type: ip6tables table: filter
[2019.01.10_21:39:11]hook type: ip6tables table: mangle
[2019.01.10_21:39:11]hook type: iptables table: filter
[2019.01.10_21:39:11]hook type: iptables table: mangle
[2019.01.10_21:39:12]hook type: ip6tables table: filter
[2019.01.10_21:39:12]hook type: ip6tables table: mangle
[2019.01.10_21:39:12]hook type: iptables table: filter
[2019.01.10_21:39:12]hook type: iptables table: mangle
[2019.01.10_21:39:12]hook type: ip6tables table: filter
[2019.01.10_21:39:12]hook type: ip6tables table: mangle
[2019.01.10_21:39:12]hook type: iptables table: filter
[2019.01.10_21:39:12]hook type: iptables table: mangle
[2019.01.10_21:39:12]hook type: ip6tables table: filter
[2019.01.10_21:39:12]hook type: ip6tables table: mangle
[2019.01.10_21:39:13]hook type: iptables table: filter
[2019.01.10_21:39:13]hook type: iptables table: mangle
[2019.01.10_21:39:13]hook type: ip6tables table: filter
[2019.01.10_21:39:13]hook type: ip6tables table: mangle
[2019.01.10_21:39:13]hook type: iptables table: filter
[2019.01.10_21:39:13]hook type: iptables table: mangle
[2019.01.10_21:39:13]hook type: ip6tables table: filter
[2019.01.10_21:39:13]hook type: ip6tables table: mangle
[2019.01.10_21:39:13]hook type: iptables table: filter
[2019.01.10_21:39:13]hook type: iptables table: mangle
[2019.01.10_21:39:14]hook type: ip6tables table: filter
[2019.01.10_21:39:14]hook type: ip6tables table: mangle
[2019.01.10_21:39:14]hook type: iptables table: filter
[2019.01.10_21:39:14]hook type: iptables table: mangle
[2019.01.10_21:39:14]hook type: ip6tables table: filter
[2019.01.10_21:39:14]hook type: ip6tables table: mangle
[2019.01.10_21:39:14]hook type: iptables table: filter
[2019.01.10_21:39:14]hook type: iptables table: mangle
[2019.01.10_21:39:14]hook type: ip6tables table: filter
[2019.01.10_21:39:14]hook type: ip6tables table: mangle

 

Share this post


Link to post
Share on other sites

Добрый день!

подскажите пожалуйста: правильно я понимаю что netfilter-ров можно QoS нормальный сделать?

 

Share this post


Link to post
Share on other sites

QoS реализуется посредством tc, но не iptables. Iptables кстати устаревает, имеет смысл учить NFTables который с ним обратно совместим.

Share this post


Link to post
Share on other sites

Столкнулся примерно с той же проблемой, что и r13. В моём случае правила рефрешатся стабильно каждые 30 секунд, т.е. по сути каждые 30 секунд имею потерю пакетов из-за слетающих правил.

Начал копать, включил self-test и по нему увидел, что каждые 30 секунд происходит какая-то история с IPv6. Выглядит это так:

[I] May  6 19:32:52 ndm: Network::NeighbourTable: -> IPv6 (1): [fe80::cdd:967f:4ac4:32c7] - expired (LastSeen: 3).
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 16, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 8, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 9, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 11, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 19, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Network::NeighbourTable: neighbour event: ID: 12, address: ipv6, action: new.
[I] May  6 19:32:52 ndm: Netfilter::Util::Conntrack: flushed 3 unreplied IPv4 connections.
[I] May  6 19:32:52 root: Updating mark step 1 result: 0
...
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 16, address: ipv6, action: new.
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 8, address: ipv6, action: new.
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 9, address: ipv6, action: new.
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 11, address: ipv6, action: new.
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 19, address: ipv6, action: new.
[I] May  6 19:33:22 ndm: Network::NeighbourTable: neighbour event: ID: 12, address: ipv6, action: new.
[I] May  6 19:33:23 ndm: Netfilter::Util::Conntrack: flushed 4 unreplied IPv4 connections.
[I] May  6 19:33:23 ipsec: 13[CFG] statistics was written 
[I] May  6 19:33:23 root: Updating mark step 1 result: 0

Последняя строка - лог из моего скрипта, лежащего в netfilter.d.

Отключил IPv6 на уровне компонентов (провайдер всё-равно пока не поддерживает), всё стало тихо и спокойно.

Товарищи разработчики, исправьте, пожалуйста, это поведение. Хочется иметь включённый IPv6 без постоянного 30 секундного сброса правил в iptables.

Edited by dippnsk
  • Upvote 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...