LINUX.ORG.RU
ФорумAdmin

Iproute2 + iptables - как сделать?


0

0

Я сделал на сервере релэй 10.0.0.1 с помощью iproute2 заворот трафика с подсети 10.100.2.0/24 на релэй1 10.0.0.254. но оказалось, что трафик не проходит через iptables релэя!! это так и надо? как можно заставить проходить трафик через iptables? (там счетчики для биллинга стоят)


а счетчики стоят в цепочке FORWARD таблицы filter. может в этом проблема?

Vetal80
() автор топика

Насколько я понимаю, все таки в вашем случае слово "релей" не совсем подходит, ИМХО, было лучше просто "сервер". Напишите подробно, что именно в делали (либо команды, либо вывод "ip rule", "ip route", "iptables -L -n".

Почему вы решили, что пакеты рубятся в iptables, в таблице nat, в цепочке FORWARD?

>как можно заставить проходить трафик через iptables?

Написать правила, пропускающие нужные пакеты?

mky ★★★★★
()

(там счетчики для биллинга стоят) Вот это ты гониш...... Есть более простые способы считать трафик.

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

Пользуясь телепатией предположу, что у тебя что то не так, но проблема не в iptables. ip route show и iptables -t nat -L -v и iptables -t filter -L -v -> в студию.

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

Вот как дела обстоят (не могу предоставить выводы айпитэйблес так как там тысячи правил). В таблице форвард стоят цепочки и с них через каждые несколько минут снимаются значения и обнуляются. все классно работает, но увеличилась нагрузка и сервак больше 28 мбит из инета не может пропустить (100% жрет ksoftirqd). Вот решил вынести нат на другой сервак. Для этого делаю:
cat 200 user >> /etc/iproute2/rt_table
ip route add table user default via 10.0.0.254
ip rule add from 10.100.2.0/24 iif eth1 table user prio 220

Результат:
ip rule ls

0: from all lookup local
220: from 10.100.2.0/24 table user
32766: from all lookup main
32767: from all lookup default

Итого - трафик из этой подсети перенапрвляется на релэй1, где отлично натится и возвращается через релэй назад. но при этом по счетчикам в форварде ничего - такое впечатление, что ничего там не проходит.

примерный дамп айпитэйблес для одного хоста - чтобы можно было разобрать в чем дело:
Chain INPUT (policy ACCEPT)
cm_in_a all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
cm_fw_a all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
Chain cm_fw_a (1 references)
cm_fw_am all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_fw_ac (1 references)
RETURN all -- 10.100.2.228 0.0.0.0/0
RETURN all -- 10.100.2.1 0.0.0.0/0
cm_fw_dc all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_fw_am (1 references)
RETURN all -- 10.100.1.228 0.0.0.0/0
RETURN all -- 10.100.1.1 0.0.0.0/0
cm_fw_ac all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_fw_d (1 references)

Chain cm_fw_dc (1 references)
cm_fw_d all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_in_a (1 references)
cm_in_am all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_in_ac (1 references)
RETURN all -- 10.100.2.228 0.0.0.0/0
RETURN all -- 10.100.2.1 0.0.0.0/0
cm_in_dc all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_in_am (1 references)
RETURN all -- 10.100.1.228 0.0.0.0/0
RETURN all -- 10.100.1.1 0.0.0.0/0
cm_in_ac all -- 0.0.0.0/0 0.0.0.0/0

Chain cm_in_d (1 references)

Chain cm_in_dc (1 references)
cm_in_d all -- 0.0.0.0/0 0.0.0.0/0

Chain mrk17 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk18 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk2 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk3 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk4 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk5 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk6 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk7 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk8 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrkc (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228


Vetal80
() автор топика

я просто хочу уточнить - должны они проходить через форвард если айпироутом их футболить на другой сервер? насколько понял из мануала по айпитэйблес - то должны. а на практке - нет.

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

Тю, да даже методом тыка...

iptables -t filter -P FORWARD DROP iptables -t filter FORWARD -F

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

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

прикол влт в чем - в форварде есть правила для раздачи меток пакетам - так вот через эти правила пакеты не проходят. почему так? может в ядре подкрутить что-то надо?

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

что бы в не понаписали в ip rule / ip forward пекеты идут через iptables. Поэтому сидите и разбирайтесь, где и чего вы намутили с правилами iptables, где раньше времени стоит ACCEPT или какой src/dst адрес у пакетов.

>прикол влт в чем - в форварде есть правила для раздачи меток пакетам - так вот через эти правила пакеты не проходят.

Так про какую таблицу идет речь? Про filter или mangle? Вроде маркировать пакеты можно было только в mangle.

Попробудте в каждую встроенную цепочку в начало добавить правило

"-s 10.100.2.x -p icmp -j LOG --log-prefix Prefix"

Prefix чтото типа "filterFORWARD" и т.д. попинговать с машины 10.100.2.x и посмотреть логи.

P.S. Ваш дамп iptables для одного хоста не понял... Хотя бы указали для какого хоста (ip-адреса) этот дамп. И откуда идут ссылки на mrk17, mrk18 и т.д.?

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

это для хоста 10.100.2.228, который на модеме 10.100.1.228. в айпитэйблах контроль и за трафиком с модема. вот полная версия таблицы filter: Chain INPUT (policy ACCEPT) cm_in_a all -- 0.0.0.0/0 0.0.0.0/0 mrk3 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x3 mrk6 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x6 mrk7 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x7 mrk17 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x17 Chain FORWARD (policy ACCEPT) ACCEPT all -- 0.0.0.0/0 10.100.2.228 ACCEPT all -- 10.100.2.228 0.0.0.0/0 cm_fw_a all -- 0.0.0.0/0 0.0.0.0/0 mrk2 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x2 mrkc all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0xc Chain OUTPUT (policy ACCEPT) mrk4 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x4 mrk5 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x5 mrk8 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x8 mrk18 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x18 Chain cm_fw_a (1 references) cm_fw_am all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_fw_ac (1 references) RETURN all -- 10.100.2.228 0.0.0.0/0 RETURN all -- 10.100.2.1 0.0.0.0/0 cm_fw_dc all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_fw_am (1 references) RETURN all -- 10.100.1.228 0.0.0.0/0 RETURN all -- 10.100.1.1 0.0.0.0/0 cm_fw_ac all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_fw_d (1 references) Chain cm_fw_dc (1 references) cm_fw_d all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_in_a (1 references) cm_in_am all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_in_ac (1 references) RETURN all -- 10.100.2.228 0.0.0.0/0 RETURN all -- 10.100.2.1 0.0.0.0/0 cm_in_dc all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_in_am (1 references) RETURN all -- 10.100.1.228 0.0.0.0/0 RETURN all -- 10.100.1.1 0.0.0.0/0 cm_in_ac all -- 0.0.0.0/0 0.0.0.0/0 Chain cm_in_d (1 references) Chain cm_in_dc (1 references) cm_in_d all -- 0.0.0.0/0 0.0.0.0/0 Chain mrk17 (1 references) RETURN all -- 10.100.2.1 0.0.0.0/0 RETURN all -- 10.100.2.228 0.0.0.0/0 Chain mrk18 (1 references) RETURN all -- 0.0.0.0/0 10.100.2.1 RETURN all -- 0.0.0.0/0 10.100.2.228 Chain mrk2 (1 references) RETURN all -- 10.100.2.1 0.0.0.0/0 RETURN all -- 10.100.2.228 0.0.0.0/0 Chain mrk3 (1 references) RETURN all -- 10.100.2.1 0.0.0.0/0 RETURN all -- 10.100.2.228 0.0.0.0/0 Chain mrk4 (1 references) RETURN all -- 0.0.0.0/0 10.100.2.1 RETURN all -- 0.0.0.0/0 10.100.2.228 Chain mrk5 (1 references) RETURN all -- 0.0.0.0/0 10.100.2.1 RETURN all -- 0.0.0.0/0 10.100.2.228 Chain mrk6 (1 references) RETURN all -- 10.100.2.1 0.0.0.0/0 RETURN all -- 10.100.2.228 0.0.0.0/0 Chain mrk7 (1 references) RETURN all -- 10.100.2.1 0.0.0.0/0 RETURN all -- 10.100.2.228 0.0.0.0/0 Chain mrk8 (1 references) RETURN all -- 0.0.0.0/0 10.100.2.1 RETURN all -- 0.0.0.0/0 10.100.2.228 Chain mrkc (1 references) RETURN all -- 0.0.0.0/0 10.100.2.1 RETURN all -- 0.0.0.0/0 10.100.2.228

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

это для хоста 10.100.2.228, который на модеме 10.100.1.228. в айпитэйблах контроль и за трафиком с модема. вот полная версия таблицы filter:
Chain INPUT (policy ACCEPT)
cm_in_a all -- 0.0.0.0/0 0.0.0.0/0
mrk3 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x3
mrk6 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x6
mrk7 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x7
mrk17 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x17
Chain FORWARD (policy ACCEPT)
ACCEPT all -- 0.0.0.0/0 10.100.2.228
ACCEPT all -- 10.100.2.228 0.0.0.0/0
cm_fw_a all -- 0.0.0.0/0 0.0.0.0/0
mrk2 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x2
mrkc all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0xc
Chain OUTPUT (policy ACCEPT)
mrk4 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x4
mrk5 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x5
mrk8 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x8
mrk18 all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x18
Chain cm_fw_a (1 references)
cm_fw_am all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_fw_ac (1 references)
RETURN all -- 10.100.2.228 0.0.0.0/0
RETURN all -- 10.100.2.1 0.0.0.0/0
cm_fw_dc all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_fw_am (1 references)
RETURN all -- 10.100.1.228 0.0.0.0/0
RETURN all -- 10.100.1.1 0.0.0.0/0
cm_fw_ac all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_fw_d (1 references)
Chain cm_fw_dc (1 references)
cm_fw_d all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_in_a (1 references)
cm_in_am all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_in_ac (1 references)
RETURN all -- 10.100.2.228 0.0.0.0/0
RETURN all -- 10.100.2.1 0.0.0.0/0
cm_in_dc all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_in_am (1 references)
RETURN all -- 10.100.1.228 0.0.0.0/0
RETURN all -- 10.100.1.1 0.0.0.0/0
cm_in_ac all -- 0.0.0.0/0 0.0.0.0/0
Chain cm_in_d (1 references)
Chain cm_in_dc (1 references)
cm_in_d all -- 0.0.0.0/0 0.0.0.0/0
Chain mrk17 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk18 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk2 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk3 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk4 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk5 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrk6 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk7 (1 references)
RETURN all -- 10.100.2.1 0.0.0.0/0
RETURN all -- 10.100.2.228 0.0.0.0/0
Chain mrk8 (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228
Chain mrkc (1 references)
RETURN all -- 0.0.0.0/0 10.100.2.1
RETURN all -- 0.0.0.0/0 10.100.2.228

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

а вот и таблица мангл:

iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination
cm_in all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
cm_fw all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
cm_out all -- anywhere anywhere

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination

Chain cm_fw (1 references)
target prot opt source destination
MARK all -- anywhere anywhere MARK set 0xc
RETURN all -- anywhere anywhere MARK match 0xc
MARK all -- anywhere anywhere MARK set 0x2
RETURN all -- anywhere anywhere MARK match 0x2

Chain cm_in (1 references)
target prot opt source destination
MARK tcp -- anywhere anywhere tcp dpt:squid MARK set 0x7
RETURN all -- anywhere anywhere MARK match 0x7
MARK tcp -- anywhere anywhere tcp dpt:smtp MARK set 0x3
RETURN all -- anywhere anywhere MARK match 0x3
MARK udp -- anywhere anywhere udp dpt:domain MARK set 0x6
RETURN all -- anywhere anywhere MARK match 0x6
MARK all -- anywhere anywhere MARK set 0x17
RETURN all -- anywhere anywhere MARK match 0x17

Chain cm_out (1 references)
target prot opt source destination
MARK udp -- anywhere anywhere udp spt:domain MARK set 0x5
RETURN all -- anywhere anywhere MARK match 0x5
MARK tcp -- anywhere anywhere tcp spt:pop3 MARK set 0x4
RETURN all -- anywhere anywhere MARK match 0x4
MARK tcp -- anywhere anywhere tcp spt:squid MARK set 0x8
RETURN all -- anywhere anywhere MARK match 0x8
MARK all -- anywhere anywhere MARK set 0x18
RETURN all -- anywhere anywhere MARK match 0x18

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

Получается, что эти пакеты не метятся в мангле/форвард и соответственно не обрабатываются в фильтр/форвард по метке, хотя и проходят через фильтр/форвард. возникает вопрос - почему они не метятся в мангле/форвард? а вот если трафик пустить через нат релэя - то метятся и счетчики их считают. почему так?

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

>Получается, что эти пакеты не метятся в мангле/форвард

Возмножно неправильно указаны интерфейсы, я не могу сказать, так как представлен вывод iptbales -L -t mangle, а желательно iptables -L -n -v -t mangle. Сейчас эти правила выглядят одинаково:

MARK all -- anywhere anywhere MARK set 0xc
RETURN all -- anywhere anywhere MARK match 0xc
MARK all -- anywhere anywhere MARK set 0x2
RETURN all -- anywhere anywhere MARK match 0x2

>это для хоста 10.100.2.228, который на модеме 10.100.1.228.

Если в начале цепочки FORWARD стоит:
ACCEPT all -- 0.0.0.0/0 10.100.2.228
ACCEPT all -- 10.100.2.228 0.0.0.0/0
То есе остальные правила (-j RETURN) выглядять странно (или здесь опять все связано с интерфейсами?).

Какие параметры пакета (интерфейсы, mark) если их писать в log (-j LOG). Кстати, а 10.0.0.254 знает, что трафик для 10.100.2.0/24 нужно пускать через 10.0.0.1?

P.S. Почему все счетчики с -j RETURN, а не с -j ACCEPT? Ведь в случае с -j RETURN пакет немного больше будет ходить по этим таблицам.

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

>Возмножно неправильно указаны интерфейсы, я не могу сказать, так как >представлен вывод iptbales -L -t mangle, а желательно iptables -L -n -v >-t mangle. Сейчас эти правила выглядят одинаково:

Эврика!Вы правы!!! Я не увидел привязки к интерфейсу етз0!!! то есть метятся только те, что пришли с етз0, а надо с етз1. Вот где собака зарыта!!

>Если в начале цепочки FORWARD стоит:
>ACCEPT all -- 0.0.0.0/0 10.100.2.228
>ACCEPT all -- 10.100.2.228 0.0.0.0/0
>То есе остальные правила (-j RETURN) выглядять странно (или здесь опять >все связано с интерфейсами?).

Не обращайте внимания - это для проверки хождения пакетов.

насчет ПС - не знаю, я их не писал.
Большое спасибо за открытие глаз.

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