Локальный прокси-сервер формирования сети для тестирования веб-сайтов

Локальный прокси-сервер формирования сети для тестирования веб-сайтов

Я хочу создать виртуальный сетевой интерфейс для 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. Но шейпинг трафика не работает... Я все еще вижу слишком много байтов, загружаемых слишком быстро. Как мне заставить шейпинг трафика работать?

ПРИМЕЧАНИЕ: Если есть способ заставить прокси-сервер выполнять регулирование, то это тоже работает для меня.

решение1

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

Назначьте 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

Связанный контент