Я хочу создать виртуальный сетевой интерфейс для TCP-прокси веб-сайта, и мой браузер будет видеть его через медленное сетевое соединение, чтобы отлаживать проблемы с производительностью на самом веб-сайте.
Пока мне удалось настроить это следующим образом:
ip link add dummy-SLOW type dummy
ifconfig dummy-SLOW 10.54.0.10 up
tc qdisc add dev dummy-SLOW root tbf rate 120kbit latency 200ms burst 1540
а потом
socat tcp-listen:443,bind=10.54.0.10,reuseaddr,fork tcp:XXX.XXX.XXX.XXX:443
Я также добавил псевдоним в /etc/hosts
чтобы я мог видеть сайт по IP-адресу 10.54.0.10
.
Хорошо, я могу видеть сайт через эту настройку, без проблем, адрес 10.54.0.10
даже отображается в Chrome devtools. Но формирование трафика не работает ... Я все еще вижу, что слишком много байтов загружается слишком быстро. Как заставить работать шейпинг трафика?
ПРИМЕЧАНИЕ: ЕСЛИ есть способ, чтобы прокси-сервер выполнял регулирование, это также работает для меня.
Вы можете формировать трафик на своем обычном интерфейсе, не добавляя виртуальный.
Назначьте qdisc уникальный идентификатор
tc qdisc add dev eth0 root handle 1: htb
Присвойте класс определенному выше qdisc. Это считается потомком qdisc. Я использую режим htb, потому что это, по сути, более многофункциональная версия tbf.
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 120kbit latency 200ms burst 1540
Назначьте классу фильтр и активно ищите трафик с меткой «10».
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
Теперь, когда у TC есть правила, нам нужно отправить трафик в управление трафиком, чтобы он дросселировался.
iptables -A OUTPUT -t mangle -p tcp --dport 443 -j MARK --set-mark 10
Сделав еще один шаг, чтобы не ограничивать всех, кто выполняет трафик 443, давайте напишем правило, которое влияет только на ваш трафик.
iptables -A OUTPUT -t mangle -p tcp -s <client IP > --dport 443 -j MARK --set-mark 10
Помечая наш трафик на выходе с сервера, мы гарантируем, что все (технически% 90) всей вероятной сетевой маршрутизации Linux завершено, и теперь мы готовы отмечать трафик, который соответствует правилу. Источник, являющийся портативным компьютером или другим сервером, на который поступает тест на порт 443, будет отмечен 10 в заголовке пакета. Как только это будет замечено, ядро возьмет пакет и применит к нему правила TC.
Вы можете просмотреть все правила Mangle, выполнив iptables -t mangle -nvL