LINUX.ORG.RU
ФорумAdmin

ip rule flush не удаляет все


0

1

Такая проблема. Создаю таблицу, кидаю в не порядка 1500 правил. Потом делаю ip rule flush, но половина, а иногда и больше правил остается. Приходиться 2-3 раза запускать команду, чтоб удалить все. WTF?

user@server:~# ip rule | wc -l
1753
user@server:~# ip rule flush  &&  ip rule add from all lookup main pref 32766
user@server:~# ip rule | wc -l
1155
user@server:~# ip rule flush  &&  ip rule add from all lookup main pref 32766
user@server:~# ip rule | wc -l
526

★★

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

я скриптом чищу со времен 2.2

ip rule | egrep -v '^(0|32766|32767):' |\
 sed -e 's/^.*:/ip rule del /' -e 's/lookup/table/' -e 's/iif/dev/' -e 's/from all//' | sh -

1500 разных правил ? Гм, а может есть смысл использовать что-то дргое. А пример нескольких таких правил можно увидеть ?

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

Очень просто. Достал роскомнадзор. Достал конкретно. Уже раз 20-30 натыкался на их зааглушку, при попытке зайти в чей то блог или иной технический ресурс. Каждый раз играться и искать ip адреса не хотелось, и своячил скрипт.

dmp=/tmp/dump.csv 
tmp=/tmp/black_ip.tmp
file=/etc/openvpn/black_ip.list
gw=tun1


wget -q https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw -O $dmp

cat $dmp  | sed -e 's/|/\n/g' | awk -F ";" {'print$1'} | grep -vE '(http|Updated)' |sort -u | sed 's/^[ \t]*//'  > $tmp
ip route add default dev $gw table 10 > /dev/null 2>&1
grep -Fvf $file $tmp >> $file
awk {'print$1'}  $file | while read i;  
 do  
ip rule add to $i/32 table 10 > /dev/null 2>&1
done  

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

Наткнулся еще вот на это http://mailman.ds9a.nl/pipermail/lartc/2004q4/014491.html

Но и это не решает проблемы, так как 20-30 правил все время остается. Поэтому тут 2 варианта: 1. делаем циклы while, который будет делать flush, пока не сотрет все 2. обратно while, но уже для скрипта из ссылки. Но все это костыли. Хочется «правильного» решения.

Кстати, если есть в скрипте, что стоит переделать, буду рад услышать. На элегантность кода не претендую.

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

Кстати Ваш вариант тоже не все чистить. После Вашего скрипта

user@server:~# ip rule | wc -l
28

Пока решил делать так:


while [ -n "`ip rule show | grep -Ev '^(0|32766|32767):'`" ]; do
   ip rule flush
done

ip rule add from all lookup main pref 32766
ip rule add from all lookup default pref 32767

Других вариантов не вижу.

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

а один раз через ipset отметить пакеты и одним правилом загнать куда надо ?

ipset create rkz hash:ip
ipset add rkz ....

iptables -t mangle -A PREROUTING -m set --match-set rkz dst -j MARK --set-mark 1

ip ru add pref 64 fwmark 1 lookup 10

набор можно обновлять через ipset swap

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от as_lan

Какое удаление правил ?

Это с правилами машрутизации много телодвижений, а через ipset 3 действия:

  • очистили временный набор
  • добавили в него спискок ip
  • обменяли с действующим набором
vel ★★★★★
()
Ответ на: комментарий от vel

Делаю

ipset create rkz hash:ip
ipset add rkz 8.8.8.8
iptables -t mangle -A PREROUTING -m set --match-set rkz dst -j MARK --set-mark 1

 ip route add default dev tun1  table 10
 ip rule add fwmark 1 table 10

И транзитные пакеты перестают идти. А с самой машины продолжают идти через дефолтный шлюз

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

весь список правил покажи.

Загнать пакеты в тунель - это только половина дела, нужно чтоб ответ уходил в нужную сторону.

tcpdump-ом посмотри куда попадает пакет и куда уходит ответ на него.

Для локальных пакетов нужно такое же правило в mangle/OUTPUT

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

все таки решил с помощью ip.

ip rule add pref 10   from all lookup 10

ip route flush table 10

awk {'print$1'}  $file | while read i;  
 do  
ip route add to $i/32 dev tun1 table 10 > /dev/null 2>&1
done  

ip route flush table нормально отрабатывает. Правила не остаются.

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