Opsi untuk manajemen bandwidth pada koneksi internet bersama

13

Premis:

Lokasi pedesaan, tidak banyak pilihan untuk koneksi internet bandwidth tinggi. Sejauh ini yang tercepat adalah internet satelit, tetapi mahal (peralatan dan biaya bulanan, dan memiliki kelemahan latensi), sehingga banyak rumah tangga ingin membagikannya.

Ini mudah - mengatur router dengan subnet untuk setiap rumah tangga (VLAN atau port fisik), memblokir lalu lintas di antara mereka dan mengkonfigurasi modem untuk merutekan ke subnet atau mengatur NAT ganda.

Masalah:

Cara TCP biasanya bekerja berarti bahwa setiap koneksi TCP akan lebih atau kurang mendapatkan 1 / n dari bandwidth yang tersedia, di mana n adalah jumlah koneksi. Jadi, jika satu rumah tangga / pengguna membuat banyak koneksi, mereka akan mendapatkan bagian lebih besar dari keseluruhan koneksi. Ini tidak adil - dengan tautan jenuh, setiap rumah tangga harus mendapat bagian yang sama. Di sisi lain, ketika tidak ada orang lain yang menggunakan koneksi, seharusnya dimungkinkan untuk menggunakan bandwidth penuh.

Misalnya, ada 4 rumah tangga yang berbagi koneksi turun 12Mbit / s. Jika salah satu dari mereka mengunduh / streaming / apa pun, mereka harus dapat menggunakan 12Mbit / s penuh (atau cukup dekat). Jika 2 rumah tangga menggunakan koneksi, mereka harus mendapatkan masing-masing 6Mbit / s, terlepas dari apakah satu rumah tangga mengunduh 1 file dan yang lainnya 11. (tanpa manajemen bandwidth, setiap file akan mengunduh sekitar 1Mbit / s dalam hal ini) 3 rumah tangga dapatkan 4Mbit / s masing-masing dan seterusnya.

Apa yang saya kerjakan sejauh ini:

Lokasi terbaik untuk menerapkan kebijakan seperti ini (untuk hilir) akan berada di ujung pipa sempit, yaitu di ISP. Jelas, itu tidak mungkin dalam kasus ini, jadi akan lebih baik untuk bisa memperkirakannya. Tapi bagaimana caranya? Apakah ada router yang mendukung sesuatu seperti ini? Bisakah saya mengonfigurasi kotak Linux atau BSD untuk melakukannya? Itu tidak harus anti peluru - server TCP yang nakal atau layanan UDP yang agresif mungkin bisa menghindari apa pun yang bisa saya lakukan di akhir saya - tetapi itu harus bekerja untuk kasus umum sebagian besar lalu lintas yang terdiri dari banyak yang sesuai dengan RFC Koneksi TCP.

Untuk lebih jelasnya, saya tidak berbicara tentang memprioritaskan aplikasi tertentu, melainkan lalu lintas agregat ke / dari perangkat ethernet tertentu atau rentang alamat IP. Memberikan beberapa lalu lintas prioritas yang lebih tinggi daripada lalu lintas lain tampaknya didukung dengan baik, tetapi situasinya kurang jelas ketika mencoba mengalokasikan bandwidth secara sama untuk kelas lalu lintas.

Ada banyak informasi yang ditulis dengan buruk / tidak sengaja dimuntahkan / jika tidak informasi tentang pembentukan lalu lintas di web. Dokumentasi pada perangkat keras router sangat tidak spesifik, jadi saya sepertinya berputar-putar.

Seperti yang saya pahami, cara untuk mendapatkan TCP berperilaku seperti ini adalah dengan mensimulasikan pipa yang sedikit lebih sempit daripada yang sebenarnya tersedia dan secara artifisial menjatuhkan paket untuk membuatnya mundur. Jadi saya pikir akan cukup mudah untuk memberikan semua orang 3Mbit / s dalam contoh di atas dengan secara artifisial menjatuhkan paket tambahan. Ini tidak benar-benar menggunakan koneksi secara efisien karena sebagian besar waktu ada kapasitas cadangan.

Apakah ada cara untuk melakukan apa yang saya minta? Apakah saya salah tentang hal itu? Saya (atau lebih tepatnya rumah tangga yang bersangkutan) bersedia mengeluarkan uang untuk hal ini - baik itu router / alat off-the-rak dengan harga sedang atau kotak generik untuk menjalankan distro Linux atau BSD.

pmdj
sumber

Jawaban:

4

Jika saya membangun sesuatu untuk mengatasi masalah ini, saya akan mengatur ini:

Kami di sini akan mengambil contoh Anda dari 4 komputer berbagi satu tautan. Jaringan akan berbentuk seperti ini:

{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops

Katakanlah Anda menggunakan pengalamatan IP statis di LAN2:

Linux Box 192.168.1.1
Home 1    192.168.1.11
Home 2    192.168.1.12
Home 3    192.168.1.13
Home 4    192.168.1.14

Pertama-tama saya akan menulis skrip kecil untuk mendeteksi klien mana yang melakukan ping dengan mereka dan menulis hasil di suatu tempat. "Ini dibiarkan sebagai latihan untuk pembaca" Hitung jumlah total host yang terhubung (1-4)

Pastikan untuk menangani kasus tidak ada host online.

Bagilah total bandwidth dengan jumlah host yang terhubung. (12 MB untuk 1, 6 MB untuk 2, 4 MB untuk 3, 3Mb untuk 4)

Selanjutnya gunakan tc dengan algoritma HTB untuk membatasi bandwidth setiap alamat pada perangkat sisi WAN. Pertama, buat kelas root:

DEV="eth0"
TC="/sbin/tc"
TOT_BW=12
$TC qdisc add dev $DEV root handle 1: htb default 99

Kemudian, tambahkan kelas untuk setiap "klien" (Di sini, misalnya, 3 klien)

NB_CLT=3
CLT_BW=$(($TOT_BW/$NB_CLT))mbit
for i in seq $NB_CLT
do
    $TC class add def $DEV parent 1: classid 1:$i htb rate $CLT_BW ceil $CLT_BW burst 15k cburst 1500
    $TC filter add dev $DEV protocol ip parent 1:0 prio 1 flowid 1:$i u32 \
     match ip dst 192.168.1.1$i/32 \
     match ip src [Router IP in LAN1]/32
done

(skrip di atas benar-benar belum diuji dan TIDAK mengetik-bebas kesalahan)

Sekarang Anda masih harus skrip yang benar untuk dijalankan setiap menit dan perpanjang ember / filter setiap kali host baru naik atau turun.

Saya harap itu akan mengarahkan Anda ke arah yang benar, semoga sukses.

Solusi Alternatif

Instal perangkat lunak QoS lokal pada semua host untuk membatasi bandwidth mereka. I Personnaly menggunakan NetLimiter (Tidak bebas)

mveroone
sumber
Masalah dengan pendekatan saya adalah bahwa setiap host mengurangi bandwidth yang lain bahkan jika mereka tidak menggunakan semua bagiannya. Tetapi merancang sesuatu yang memaksa berbagi hanya ketika permintaan tinggi ... sulit.
mveroone
2

OpenWRT tampaknya mendukungnya, meskipun saya belum pernah menggunakannya sendiri. Anda dapat melihat halaman Kontrol Lalu Lintas Jaringan di situs web mereka, dan terutama contoh kedua: berbagi bandwidth sederhana (alias pembentukan lalu lintas) dengan HTB . Ini melibatkan panggilan sederhana ke qdisc, sehingga setiap kotak Linux bisa melakukannya.

pengguna2313067
sumber
Saya perhatikan bahwa contoh itu untuk sisi unggah . Saya saat ini membaca cara saya melalui Linux Advanced Routing & Traffic Control HOWTO yang tampaknya agak menjanjikan dan mudah-mudahan memungkinkan saya untuk memahami semua tcaturan ini . Pembentuk traffic Linux tentu saja terlihat menjanjikan.
pmdj
0

Pengaturan yang dijelaskan dalam /superuser//a/1210164/257859 melakukan hal itu:

[...] antrian mendistribusikan BW yang terbatas secara merata di antara semua klien LAN (LAN IP lebih tepatnya).

ndemou
sumber
1
Tolong jangan memposting jawaban yang sama untuk beberapa pertanyaan. Jika informasi yang sama benar-benar menjawab kedua pertanyaan, maka satu pertanyaan (biasanya yang baru) harus ditutup sebagai duplikat dari yang lain. Anda dapat menunjukkan ini dengan memilih untuk menutupnya sebagai duplikat atau, jika Anda tidak memiliki reputasi yang cukup untuk itu, angkat bendera untuk menunjukkan bahwa itu adalah duplikat. Jika tidak, sesuaikan jawaban Anda untuk pertanyaan ini dan jangan hanya menempelkan jawaban yang sama di banyak tempat.
DavidPostill
@DavidPostill Saya berpikir untuk memilih untuk menutup sebagai duplikat tetapi ragu karena ini adalah pertanyaan 3 tahun. Saya bahkan mencari meta.superuser dan menemukan pertanyaan yang relevan di meta.superuser.com/questions/3524/… . Setelah membaca meta saya pikir situasinya rumit (saya punya jawaban untuk dua pertanyaan lama dengan cukup diskusi di masing-masing) dan meninggalkan jawaban pointer pendek tampaknya setidaknya "tidak buruk". Saya terbuka untuk mendengar pikiran Anda.
ndemou