Мне нужно написать сценарии 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: