У меня дома есть сервер debian, использующий мое личное подключение к Интернету (50 Мбит / с). Я установил простую службу SFTP с OpenSSH для обмена большими файлами (10 ГБ +) с несколькими пользователями.
Вот моя проблема: что касается перераспределения полосы пропускания, это джунгли. У меня есть пользователи со стандартным ADSL-подключением, другие с оптоволоконным подключением и т. Д. У каждого пользователя разная скорость загрузки, и обычно побеждает самая большая пропускная способность загрузки.
Я хотел бы знать, можно ли разделить мою пропускную способность "почти поровну" между пользователями.
В идеале, каждый пользователь мог бы загрузить файл со скоростью до 50 / n Мбит / с (где n - количество подключенных пользователей).
Спасибо большое за помощь.
Поскольку вы используете Debian Linux, вы можете сделать это довольно просто. Вы можете использовать этот скрипт для «честного» передела по полосе пропускания:
#Put here your Internet-interface instead of eth1
ext_iface=eth1
eiface_addr=192.169.158.150
###############Remove shaper rules###############################3
iptables -t mangle --flush
tc qdisc del dev $ext_iface root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $ext_iface -j shape-in 2> /dev/null > /dev/null
iptables -t mangle -F shape-in 2> /dev/null > /dev/null
iptables -t mangle -X shape-in 2> /dev/null > /dev/null
##############Adding shaper rules###################################
tc qdisc add dev $ext_iface root handle 1:0 htb default 10
tc class add dev $ext_iface parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev $ext_iface parent 1:1 classid 1:5 htb rate 100mbit ceil 100mbit prio 0
tc class add dev $ext_iface parent 1:1 classid 1:10 htb rate 48mbit ceil 48mbit prio 0
tc qdisc add dev $ext_iface parent 1:5 handle 5: pfifo limit 5
tc qdisc add dev $ext_iface parent 1:10 handle 10: pfifo limit 10
iptables -t mangle -N shape-in
iptables -t mangle -I POSTROUTING -o $ext_iface -j shape-in
#Priority for pings
iptables -t mangle -A shape-in -p icmp -j MARK --set-mark 5
#Priority for Server Access
iptables -t mangle -A shape-in -s $eiface_addr -j MARK --set-mark 5
#Othet packets (user\'s internet traffic)
iptables -t mangle -A shape-in -m mark --mark 0 -j MARK --set-mark 10
tc filter add dev $ext_iface parent 1:0 prio 0 protocol ip handle 5 fw flowid 1:5
tc filter add dev $ext_iface parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
Обратите внимание, что пользователи получат канал 48 / n, а в резерве останется два мегабайта.
В чем, собственно, проблема? Неужели более медленные загрузчики полностью истощаются, когда кто-то скачивает по оптоволоконной линии? Если это не так, вам, вероятно, следует просто позволить стеку TCP / IP вашего сервера как можно лучше справляться с изменяющейся скоростью загрузки ваших клиентов. В конечном итоге каждый должен получить свою часть загрузки.
Кроме того, я считаю, что ваше представление о 50 / n Мбит / с на пользователя как о «справедливом» ошибочно. Например, предположим, что у вас подключено только два пользователя, один по оптоволокну со скоростью загрузки 50 Мбит / с, а другой по коммутируемому соединению со скоростью 56 кбит / с. Вы действительно хотите ограничить загрузчик по оптоволоконному каналу до 25 Мбит / с и тратить оставшиеся 25 Мбит / с на пользователя коммутируемого доступа?
Если бы я был на вашем месте, я бы не стал пытаться навязать именно это понятие «справедливости». Если вы это сделаете, то вскоре пользователи найдут способ захватить больший кусок вашей пропускной способности, например, путем открытия дополнительных соединений.