Формирование трафика с помощью iptables, ipset и tc (--match-set и --set-mark)

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

У меня есть сервер Ubuntu (16.04), который действует как маршрутизатор / nat . Я хочу разрешить большинству пользователей использовать Интернет со скоростью 2 Мбит / с, а для некоторых устройств снизить скорость до 512 кбит / с.

У меня есть список регулируемых устройств в ipset .

1
задан 22 April 2017 в 18:04
2 ответа

Надеюсь, через год вы выяснили свою проблему, однако для тех, кто будет дальше, ниже приводится объяснение по крайней мере одной из ваших проблем.

На основе ipset приведенный вами пример, ваши правила iptables недействительны. Тип набора hash: mac хранит только одно поле. Однако ваш оператор iptables проверяет набор, как если бы он содержал пары данных (т.е. два поля, такие как mac, IP или mac, net). Таким образом, вы сопоставляете записи в наборе, используя MAC-адрес источника пакета и неопределенное поле назначения из пакета:

ipset create throttled hash:mac -exist
ipset add throttled 00:11:22:33:44:55 -exist
iptables -A PREROUTING -t mangle -m set --match-set throttled src,dst -j MARK --set-mark 6

Однако из-за используемого типа набора вы можете сопоставить только одно поле. Следующий оператор iptables показывает правильный метод сопоставления с исходным MAC-адресом, содержащимся в наборе:

ipset create throttled hash:mac -exist
ipset add throttled 00:11:22:33:44:55 -exist
iptables -A PREROUTING -t mangle -m set --match-set throttled src -j MARK --set-mark 6

Чтобы проиллюстрировать, подумайте, есть ли у вас набор с типом хэша : net, port, net на межсетевой экран. Набор будет хранить тройки (две сети и один порт).

Предположим, брандмауэр имеет следующие записи ipset и правила iptables:

# creates set
ipset create throttled hash:net,port,net
ipset add services 192.168.0.0/16,tcp:80,192.168.1.80/32
ipset add services 192.168.0.0/16,tcp:443,192.168.1.80/32

# clear all rules (to illustrate that conntrack is not being used)
iptables -F FORWARD

# allows traffic to web server
iptables -A FORWARD -m set --match-set services src,dst,dst -j ACCEPT

# allows traffic from web server
iptables -A FORWARD -m set --match-set services dst,src,src -j ACCEPT

# drop all other traffic
iptables -P DROP

Вышеупомянутые правила функционально эквивалентны:

# clear all rules (to illustrate that conntrack is not being used)
iptables -F FORWARD

# allows traffic to web server
iptables -A FORWARD -s 192.168.0.0/16 -p tcp --dport 80  -d 192.168.1.80/32 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp --dport 443 -d 192.168.1.80/32 -j ACCEPT

# allows traffic from web server
iptables -A FORWARD -d 192.168.0.0/16 -p tcp --sport 80  -s 192.168.1.80/32 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/16 -p tcp --sport 443 -s 192.168.1.80/32 -j ACCEPT

# drop all other traffic
iptables -P DROP

Хотя два вышеуказанных метода функционально эквивалентно, метод ipset будет работать лучше с большим количеством записей из-за использования поиска в хэш-таблице по сравнению с линейным вычислением правил iptables.

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

Ниже приведены несколько сопоставлений для иллюстрации:

 ipset type        | iptables match-set | Packet fields
 ------------------+--------------------+---------------------------------
 hash:net,port,net | src,dst,dst        | src IP address, dst port, dst IP address
 hash:net,port,net | dst,src,src        | dst IP address, src port, src IP address
 hash:ip,port,ip   | src,dst,dst        | src IP address, dst port, dst IP address
 hash:ip,port,ip   | dst,src,src        | dst IP address, src port, src ip address
 hash:mac          | src                | src mac address
 hash:mac          | dst                | dst mac address
 hash:ip,mac       | src,src            | src IP address, src mac address
 hash:ip,mac       | dst,dst            | dst IP address, dst mac address
 hash:ip,mac       | dst,src            | dst IP address, src mac address

Однако при взаимодействии с TC / iptables могут возникнуть дополнительные проблемы. это должно по крайней мере решить вашу проблему с ipset / iptables.

0
ответ дан 3 December 2019 в 23:31

Одна мысль .. Ваш набор содержит MAC-адреса, но я подозреваю, что правило PREROUTING пытается сопоставить IP-адреса src или dst, а не MAC-адреса.

1
ответ дан 3 December 2019 в 23:31

Теги

Похожие вопросы