Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

keenetic-pbr does not create ipset on startup #1

Open
zibot opened this issue Jan 26, 2025 · 4 comments
Open

keenetic-pbr does not create ipset on startup #1

zibot opened this issue Jan 26, 2025 · 4 comments

Comments

@zibot
Copy link

zibot commented Jan 26, 2025

Привет!

Если интерфейс VPN создать не штатно в web-админке, а, например, с помощью gost.run, то из-за изоляции PBR работать не будет.
Нужно сделать no private-isolate или, что предподчтительней, добавить в iptables в таблицу filter правило типа такого:

CLIENT_SUBNET=192.168.1.0/24 # Клиентская подсеть, обычно на br0
VPN_IFACE=tun0 # VPN интефейс
iptables -w -A _NDM_SL_FORWARD -s $CLIENT_SUBNET -o $VPN_IFACE -j _NDM_SL_PRIVATE

Такое правило можно добавить в секцию [[ipset.iptables_rule]], но после этого перестает автоматически добавляться правило, которое маркирует трафик на/от хосты в ipset'е, поэтому маркирующее правило тоже надо добавлять в keenetic-pbr.conf.

И вот, собственно, проблема.
При старте маркирующее правило из keenetic-pbr.conf не добавляется, потому что, видимо, на этот момент не создан ipset.
Можно сделать в консоли /opt/etc/init.d/S80keenetic-pbr restart и заработает до перезагрузки.
Перезагрузку починил костылем, добавил в S80keenetic-bpr в начале функции apply_lists_and_routing()
ipset -q create bypass hash:ip

@maksimkurb
Copy link
Owner

maksimkurb commented Jan 26, 2025

В конфиге keenetic-pbr можно создать несколько iptables-правил, например:

  [[ipset.iptables_rule]]
    chain = "PREROUTING"
    table = "mangle"
    rule = ["-m", "set", "--match-set", "{{ipset_name}}", "dst,src", "-j", "MARK", "--set-mark", "{{fwmark}}"]

  [[ipset.iptables_rule]]
    chain = "_NDM_SL_FORWARD"
    table = "filter"
    rule = ["-s", "192.168.1.0/24", "-o", "tun0", "-j", "_NDM_SL_PRIVATE"]

Вы пробовали такую конфигурацию?

keenetic-pbr должен создавать ipset'ы до того, как применять iptables-правила

@zibot
Copy link
Author

zibot commented Jan 26, 2025

В конфиге keenetic-pbr можно создать несколько iptables-правил, например:

  [[ipset.iptables_rule]]
    chain = "PREROUTING"
    table = "mangle"
    rule = ["-m", "set", "--match-set", "{{ipset_name}}", "dst,src", "-j", "MARK", "--set-mark", "{{fwmark}}"]

  [[ipset.iptables_rule]]
    chain = "_NDM_SL_FORWARD"
    table = "filter"
    rule = ["-s", "192.168.1.0/24", "-o", "tun0", "-j", "_NDM_SL_PRIVATE"]

Вы пробовали такую конфигурацию?

keenetic-pbr должен создавать ipset'ы до того, как применять iptables-правила

Так и сделал, без ipset -q create bypass hash:ip в apply_lists_and_routing после перезагрузки не работает.
Titan KN-1810, KeeneticOS 4.2.5.

@zibot
Copy link
Author

zibot commented Jan 27, 2025

Возникло подозрение, что правило

iptables -w -A _NDM_SL_FORWARD -s $CLIENT_SUBNET -o $VPN_IFACE -j _NDM_SL_PRIVATE

стирает keenetic, когда срабатывает какое то событие, в результате которого перезатирается таблица filter.

@zibot
Copy link
Author

zibot commented Jan 28, 2025

Кажется, решил проблему.
В файле /opt/etc/ndm/netfilter.d/50-keenetic-pbr-fwmarks.sh сделал так

#/opt/etc/init.d/S80keenetic-pbr apply-routing
/opt/etc/init.d/S80keenetic-pbr restart

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants