LINUX.ORG.RU
ФорумAdmin

Ограничить скорость определённого ip через nftables

 


0

3

Доброго времени. Есть софтроутер, в локалке есть сервер с выходом наружу. Есть задача определённому ip на входе с wan ограничить скорость. Подскажите как без особых бубнов решить эту проблему. Задача редкая, планирую прям статикой в конфиге указывать адрес с правилом. Текущий конфиг:

#!/usr/sbin/nft -f
flush ruleset


define wan_if = ppp0
define lan_if = enp4s0

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                iifname "lo" accept
                ip saddr 146.158.116.23 accept
                ip saddr 80.76.0.0/16 drop
                ip saddr 104.255.0.0/16 drop
                ip saddr 45.78.0.0/16 drop
                ip saddr 185.239.0.0/16 drop
                icmp type echo-request accept
                iifname $lan_if accept
                ct state related,established accept
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                iifname $wan_if tcp dport { 21, 53 } oifname $lan_if accept
                iifname $wan_if udp dport { 123 } oifname $lan_if accept
                iifname $lan_if oifname $wan_if accept
                iifname $wan_if oifname $lan_if ct state related,established accept

        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table ip nat {
        chain prerouting {
                type nat hook prerouting priority -100; policy accept;

                iifname $wan_if tcp dport { 21 } dnat to 192.168.1.10
                iifname $wan_if udp dport { 123 } dnat to 192.168.1.10
        }


        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                oifname $wan_if masquerade
        }
}
Ответ на: комментарий от vel

iptables и nftables умеют ограничивать скорость только до 0.

На самом деле нет. Про nftables не скажу, а так есть ipt_ratelimit от автора ipt_netflow.

UPD: а вот пишут, что у nft сразу есть: https://wiki.nftables.org/wiki-nftables/index.php/Rate_limiting_matchings

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
25 декабря 2024 г.

Добавь

define LIMIT_SPEED = { Нужный IP }

Затем в таблицу фильтр прям сверху следующее:

limit lim_20mbps { rate over 2560 kbytes/second }
limit lim_40mbps { rate over 5120 kbytes/second }

chain policer {
	type filter hook forward priority -50
	ip daddr $LIMIT_SPEED limit name "lim_20mbps" counter drop
	ip daddr $LIMIT_SPEED limit name "lim_40mbps" counter drop
}

Из данных я думаю понятно как указать необходимую скорость

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

Это ограничение реализовано исключительно дропом, что дает приемлемый результат для tcp, а для udp это может быть неприемлемо.

Нормальное ограничение скорости это задержка и при необходимости дроп.

nftables пока не научится поддерживать сторонние модули, следовательно, это бесполезная поделка :)

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

Это реализовано исключительно дропом, что дает приемлемый результат для tcp, а для udp это может быть неприемлемо.

Хм. Интересно. Я для ТС решение нагуглил и у себя попробовал, но только на спидтесте. Сработало. На UDP не пробовал, так что тут спорить не стану.

nftables пока не научится поддерживать сторонние модули, следовательно, это бесполезная поделка :)

Может есть какой-то костыль?

Shprot ★★
()