Назад | Перейти на главную страницу

Маркировка пакетов с помощью iptables с помощью NAT

Мне нужно написать сценарии bash для маршрутизатора, чтобы контролировать ограничение полосы пропускания для данного пользователя на данном доменном имени.

Для этого я использую iptables, чтобы отмечать пакеты, входящие из ограниченного домена на IP-адрес пользователя в частной сети. Для каждой пары user_ip / domain_ip у меня есть единственный ключ, которым я могу пометить пакет.

Я добавляю эти правила в таблицу искажений следующим образом:

$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j MARK --set-mark $id 
$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j RETURN

Моя настройка NAT в таблице nat (eth0 - мой интернет-интерфейс, и я использовал tap0 для интерфейса Lan):

$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Пакет для моего пользователя Lan должен соответствовать правилу в таблице изменений, но не является перехватом.

Пример: (таблица mangle в PREROUTING CHAIN) Это, например, для маркировки пакетов, приходящих с slashdot.org для пользователя 192.168.0.2 в сети Lan.

Chain PREROUTING (policy ACCEPT 14858 packets, 7215129 bytes)
pkts      bytes target     prot opt in     out     source               destination      
 0        0 MARK       tcp  --  *      *       216.34.181.45        192.168.0.2         MARK xset 0x9/0xffffffff 
 0        0 RETURN     tcp  --  *      *       216.34.181.45        192.168.0.2         

Однако, если я попытаюсь пометить пакеты, приходящие с slashdot.org на интернет-интерфейсе маршрутизатора, пакеты будут перехвачены, и если компьютер в локальной сети также обратится к slashdot.org, то же правило отметит и их.

Итак, я предполагаю, что существует проблема из-за преобразования NAT, и я точно не знаю, когда и в каком порядке применять правила.

В первый раз, верны ли мои настройки NAT в iptables или нет? Пропустил ли я что-то важное о правилах или концепции iptables?

Заранее спасибо.

Я думаю, вам следует использовать РАЗМЕЩЕНИЕ таблица mangle, поскольку вы маркируете пакеты в PREROUTING перед механизмом NAT.

Взгляните на цепочку IPTABLE: