Какой набор команд ограничит исходящую скорость передачи данных X Кбит/с для трафика к или от порта Y?

Заключить в кавычки из bash страница справочника на СТАТУСЕ ВЫХОДА

Статус выхода выполняемой команды является значением, возвращенным waitpid системным вызовом или эквивалентной функцией. Статусы выхода падают между 0 и 255, тем не менее, как объяснено ниже, оболочка может использовать значения выше 125 особенно. Статусы выхода от оболочки builtins и составных команд также ограничены этим диапазоном. При определенных обстоятельствах оболочка будет использовать специальные значения для указания на определенные виды отказа.

Так это ограничения это к тому диапазону, я на самом деле как удивлен как Вы.

От waitpid (2) страница справочника:

WEXITSTATUS(status)

возвращает статус выхода ребенка. Это состоит из младших значащих 8 битов аргумента состояния, что ребенок указал в вызове для выхода (3) или _exit (2) или как аргумент в пользу оператора возврата в основном (). Этот макрос должен только использоваться, если бы WIFEXITED возвратил true.

5
20.05.2013, 22:41
2 ответа

Следующий набор команд ограничит исходящий уровень для трафика с исходным или целевым портом от 8333 до 160 Кбит/с, если целевой IP не будет в локальной сети.

#network interface on which to limit traffic
IF="eth0"
#limit of the network interface in question
LINKCEIL="1gbit"
#limit outbound Bitcoin protocol traffic to this rate
LIMIT="160kbit"

#delete existing rules
tc qdisc del dev ${IF} root

#add root class
tc qdisc add dev ${IF} root handle 1: htb default 10

#add parent class
tc class add dev ${IF} parent 1: classid 1:1 htb rate ${LINKCEIL} ceil ${LINKCEIL}

#add our two classes. one unlimited, another limited
tc class add dev ${IF} parent 1:1 classid 1:10 htb rate ${LINKCEIL} ceil ${LINKCEIL} prio 0
tc class add dev ${IF} parent 1:1 classid 1:11 htb rate ${LIMIT} ceil ${LIMIT} prio 1

#add handles to our classes so packets marked with <x> go into the class with "... handle <x> fw ..."
tc filter add dev ${IF} parent 1: protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11

#limit outgoing traffic to and from port 8333. but not when dealing with a host on the local network
#   --set-mark marks packages matching these criteria with the number "2"
#   these packages are filtered by the tc filter with "handle 2"
#   this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT}
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d 192.168.0.0/16 -j MARK --set-mark 0x2
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d 192.168.0.0/16 -j MARK --set-mark 0x2
1
27.01.2020, 20:42

Можно использовать tc "сформировать" использование пропускной способности на основе сетевых адресов или отмеченных пакетов. Когда-то давно была некоторая опция в IPTables для маркировки пакетов затем с помощью tc Я не могу помнить, каково это. Это не находится в моем iptables --help где угодно, таким образом, они, возможно, вынули его. Который является точно также, потому что это, вероятно, базируется от pid или владельца. PID переработан, и владелец был бы слишком неопределенен. Если Вы знаете грубый диапазон сетевых адресов, tc могло бы быть предпочтительным начиная с изучения, что это может окупиться в других областях. Если Вы не можете, то само приложение могло бы быть единственными критериями, которые можно надежно использовать.

Если у Вас есть довольно текущее ядро, можно ограничить использование пропускной способности приложения через cgroups. Вот другой ответ, показывающий короткий пример того, как настроить cgroup.

cgroups предпочтительны потому что forkи execveпоймайте новых детей, таким образом, любые дочерние процессы добавляются к тому же cgroup. Вот почему тот ответ, я связал работы даже при том, что они только добавляют pid своей оболочки (выгоды cgroup bashвызов execve и добавляет PID к тому же cgroup).

1
27.01.2020, 20:42

Теги

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