У меня есть машина ubuntu с двумя интерфейсами. eth1 - это интерфейс NAT, а eth2 - это интерфейс WAN. У меня подключение к Интернету со скоростью 4 Мбит / с. Я хочу ограничить его до 2 Мбит / с для сети NAT eth1. Поэтому я использую это правило tc:
tc qdisc add dev eth1 root tbf rate 2mbit burst 10kb latency 70ms peakrate 2.4mbit minburst 1540
Теперь, если я проверю пропускную способность, выходящую из eth1, она ограничена 250 Кбит / с, что хорошо. Но пропускная способность, которую обеспечивает eth2, больше, чем это: она будет в пределах от 300 до 400 кбит / с. Если я проверю статус правила tc, он показывает сильное отбрасывание пакетов. Как я могу ограничить входящую полосу пропускания на eth2 до 2 Мбит и как предотвратить потерю пакетов?
Я попробовал данное решение в этом ответе. Линия tc qdisc add dev eth2 ingress
дал мне file exists error
. Второй подход в ответе показал то же поведение, на которое я ссылался здесь: больше данных (выше 2 Мбит), поступающих через eth2.
РЕДАКТИРОВАТЬ 1: Какие правила iptables и tc я могу использовать для замедления пакетов SYN, ACK, FIN, чтобы маршрутизаторы ISP знали о перегрузке в моей локальной сети.
Если я не понимаю ваши цели, вы не можете ограничить скорость, с которой приходят пакеты. в в вашу сеть от вашего интернет-провайдера, если вы не координируете какую-либо форму QoS с вашим интернет-провайдером для формирования трафика на их маршрутизаторах. Обычно это требует подключения бизнес-класса и денег. Вы наблюдаете отбрасывание пакетов, потому что это единственный способ сформировать трафик - вы бросаете их на пол. Итак, ваше правило TC работает так, как задумано, но вы не можете контролировать, какой уровень трафика будет отправляться. к ваш WAN-интерфейс, так как отправители стараются отправить его как можно быстрее.
Теперь вы можете сортировать входящий TCP-трафик, стратегически отбрасывая пакеты или возиться с ACK-пакетами, чтобы отправители думали, что ваша сеть более загружена, чем это есть на самом деле. Но это не очень помогает для трафика, не связанного с TCP, входящего в вашу сеть.
Вы можете сделать что-то вроде:
tc qdisc add dev eth1 root handle 1: htb default 2
tc class add dev eth1 parent 1: classid 1:1 htb rate 2.4mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.0/24 flowid 1:1
Это ограничит трафик, идущий в LAN (при условии, что eth1 - это LAN) в данной подсети.