LINUX.ORG.RU
решено ФорумAdmin

iptables MARK & ACCEPT


0

2

Добрый вечер всем, сразу оговорюсь что в iptables далеко не асс, но делал все по инструкциям. Так вот имеем два интерфейса eth0 (176.56.22.15 смотрит в интернет) и eth1 (192.168.0.1 смотрит в локальную сеть), необходимо настроить шлюз между локалкой и интернетом и шейпирить трафик с помощью tc. Пишу:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 176.56.22.15
Вроде как тем самым снатили сеть, далее для теста пишу включение и отключение интернета для машины из локальной сети:
iptables -A FORWARD -s 0/0 -d 192.168.0.3 -j ACCEPT
и
iptables -A FORWARD -s 192.168.0.3 -d 0/0 -j ACCEPT работает, инет на машину пошел. Дальше необходимо промаркировать трафик и ограничивать средствами tc, вроде не сложно потому пишу:
iptables -A FORWARD -s 0/0 -d 192.168.0.3 -j MARK --set-mark 2
и
iptables -A FORWARD -s 192.168.0.3 -d 0/0 -j MARK --set-mark 2
Где 2 это условный ID пользователя.
И это не работает, то есть трафик перестает форвардиться. В чем тут беда, ведь вроде логично делаю. И еще меня сильно смущает что все это по умолчанию пишется в цепочку filter, цепочки mangle вообще в конфиге нет, если ее создавать то один черт все идет помимо нее. Буду признателен за любой совет.


Отзовитесь хоть кто-нибудь...

OxOyD ()

Пробывал варианты :
iptables -t mangle -A FORWARD -s 0/0 d 192.168.0.3 -j MARK --set-mark 2
iptables -t mangle -A FORWARD -s 192.168.0.3 -d 0/0 -j MARK --set-mark 2
Связи все равно нет.
Инет идет исключительно если прописать:
iptables -A FORWARD -s 0/0 -d 192.168.0.3 -j ACCEPT
iptables -A FORWARD -s 192.168.0.3 -d 0/0 -j ACCEPT

OxOyD ()

MARK

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

Ман вроде не так категоричен, но примеры в нём такого рода:

iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1  --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff

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

Имеется вот такой пример для шейпинга трафика:
iptables -t mangle -A FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1
iptables -t mangle -A FORWARD -s $2/$3 -d 0/0 -j MARK --set-mark $1
tc filter add dev eth1 parent 1: protocol ip prio 3 handle $1 fw classid 1:$1


tc class add dev eth1 parent 1:1 classid 1:$1 htb rate 512kbit burst 20k
где $2 и $3 ip и mask и $1 ID локального пользователя
tc qdisc add dev eth1 root handle 1: htb предварительно создан Все говорят что должно работать, но беда в том что у меня через mangle вообще ничего не идет, то если даю форвардингу ACCEPT в цепочке filter

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

Маркеровать нужно именно там, в форвард передается айпи и ид пользователя для включения и выключения связи, я вот думаю может входящий и исходящий трафик нужно на разных интерфейсах шейперить?

OxOyD ()

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

OxOyD ()

Ап господа, подскажите как же все таки пометить входящий трафик от абонента для последующего шейпинга оного, при условии того что включение трафика происходит по правилу
iptables -A FORWARD -s 0/0 -d UIP -j ACCEPT
для исходящего аналогично.

OxOyD ()
Ответ на: комментарий от OxOyD
[br]$tc class add dev eth1 parent 1:1 classid 1:UID htb rate 512kbit ceil 1mbit burst 1600 
[br]$tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle UID fw flowid 1:UID 
[br]$fw -A FORWARD -s 0/0 -d UIP -j ACCEPT 
[br]$fw -A FORWARD -s UIP -d 0/0 -j ACCEPT 
[br]$fw -t mangle -A FORWARD -i eth0 -o eth1 -d UIP -j MARK --set-mark UID 



Удалось настроить ограничение входящей скорости клиенту (единственное что при установленном значении ceil, скорость не поднялась выше отметки rate, при том что канал пуст и свободен).
Теперь остался вопрос ограничения исходящей скорости клиента, подскажи те пожалуйста, будет ли работать такая связка для этой цели?

[br]$tc qdisc add dev eth0 ingress 
[br]$tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 
[br]$tc class add dev ifb0 parent 1:1 classid 1:UID htb rate 512kbit burst 1600 
[br]$tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src UIP flowid 1:UID 
[br]$fw -t mangle -A FORWARD -i eth0 -o eth1 -s UIP -j MARK --set-mark UID
Если я что то не так понял, объясните пожалуйста. Заранее благодарен.

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

Насколько я помню, ifb работает до того, как пакет пройдёт iptables и будет отмаркирован. В вашем случае вы работаете с транзитным трафиком, поэтому ingress вам вобще не нужен, на eth0 пишете правила, полностью аналогичные правилам eth1.

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

Хм.... да нат и шейпер на одной машине, спасибо буду пробывать вечером.

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

Дайте полное описание классов. Пока что я не вижу, чем ограничен родительский класс, который «parent 1: classid 1:1». Все подчинённые ему классы не могут взять больше, чем rate родительского.

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

В точку =) Забыл для этого интерфейса вообще указать родительский класс.

OxOyD ()

Возможно я ошибаюсь, но может быть проблема в том, что Вы сначала открываете доступ, а потом пытаетесь промаркировать пакеты ? Попробуйте сначала промаркировать -j MARK --set-mark 2 , а потом уже -j ACCEPT

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