Untuk meringkas: Saya memiliki server khusus dengan beberapa teman yang menjalankan klien torrent dengan web gui. Setiap pengguna menjalankan klien di bawah nama pengguna mereka di server sehingga unduhan masuk dalam dir pengguna mereka, dan hanya mereka yang memiliki akses ke file mereka sendiri dll.
Bagaimana saya bisa memonitor dan membatasi bandwidth per bulan pada basis per pengguna?
Saya berpikir mungkin ada cara menggunakan iptables mungkin. Dan dengan memantau bandwidth yang digunakan oleh semua proses pengguna X. Dan jika mereka telah menggunakan lebih dari bandwidth Y GB bulanan yang diizinkan, mereka mendapatkan pesan yang mengatakan bahwa dan jaringan diblokir untuk klien torrent mereka, atau klien terbunuh sepenuhnya. Saya juga berpikir tentang squid, tetapi karena akan menggunakan banyak klien torrent, ini bisa menggunakan banyak sumber daya server ...
Saya menggunakan lenny debian.
Saya tidak yakin bagaimana melakukan ini ...
apakah ini mungkin? Saya berterima kasih atas solusi parsial untuk ini ...
Jawaban:
Anda bisa menggunakan perintah traffic shaping 'tc'.
Berikan masing-masing teman Anda port yang berbeda untuk digunakan untuk BitTorrent. Tandai paket TCP dengan iptables untuk setiap port.
Kemudian gunakan perintah tc untuk mengatur bandwidth dan nilai maksimum untuk setiap pengguna.
Di akhir bulan Anda dapat menghapus dan menambahkan perintah 'tc' untuk mengatur ulang penghitungan.
Anda dapat memantau penggunaan untuk setiap pengguna dengan:
Jika Anda menggunakan Debian install shorewall, sangat mudah untuk melakukan pembentukan lalu lintas tanpa mengacaukan iptables. Anda cukup mengedit tcdevices, tcclasses, dan tcrules di direktori / etc / shorewall. Info lebih lanjut di sini: http://www.shorewall.net/traffic_shaping.htm
Seperti yang disarankan orang lain, menandai paket dengan nama pengguna mungkin lebih baik daripada dengan port, dengan cara itu port dapat diubah tanpa memperbarui iptables.
sumber
Anda dapat mencoba menggunakan
--quota
opsi di iptables, yang memungkinkan Anda untuk menetapkan batas transfer dalam byte. Karena Anda menjalankan banyak klien torrent, masing-masing di bawah nama pengguna yang berbeda, Anda dapat menggabungkannya dengan--uid-owner
opsi, seperti yang disarankan katriel.Dengan cara ini Anda dapat menerapkan batas transfer per periode waktu (hari / minggu / bulan / dll) tanpa harus membatasi kecepatan unduh pengguna Anda.
Agar penghitung paket tetap ada, Anda harus menyimpannya secara berkala (misalnya, melalui tugas cron), sehingga Anda dapat memulihkannya jika perlu me-reboot server atau menghapus aturan firewall.
sumber
Hanya dengan menambahkan pertanyaan di atas.
Anda bisa menggunakan iptables dengan pencocokan pengguna untuk mewarnai paket-paket seperti:
Dan kemudian gunakan 'tc' untuk membatasi pada basis per pengguna.
sumber
Bergantung pada seberapa banyak lalu lintas bulanan yang ingin Anda izinkan untuk setiap pengguna per bulan, Anda dapat menetapkan batas bandwidth yang sesuai, menggunakan beberapa alat yang disarankan oleh pengguna lain.
Misalnya, katakanlah Anda ingin menetapkan batas unduhan maksimum 250 GB / bulan . Sekarang, jika Anda membaginya dengan jumlah jam dalam sebulan (~ 730), dan kemudian pada 3600, Anda akan mendapatkan tingkat unduhan maksimum, yang dalam contoh ini akan menjadi 100 KB / s .
Kemudian, jika Anda menetapkan tingkat DL maksimum 100 KB / s, Anda akan secara otomatis memberlakukan batas unduhan 250 GB / bulan Anda (dengan asumsi tentu saja bahwa pembentuk lalu lintas Anda berfungsi dengan baik). Jika pengguna Anda tidak dapat mengunduh lebih cepat dari 100 KB / s, maka mereka tidak akan dapat mengunduh lebih dari 250 GB / bulan.
Untuk membatasi laju unduhan, Anda dapat menggunakan
tc
atau beberapa alat lain yang telah disebutkan. Jika Anda tidak ingin berurusan langsung dengantc
, Anda bisa menggunakan cbq.init , yang cukup sederhana untuk diatur. Skrip ini hadir dalam Debian Etch sebagaishaper
paket, tetapi tampaknya telah dihapus setelah itu. Bagaimanapun, ini hanya skrip sederhana yang dapat Anda unduh dari SourceForge.Tentu saja pendekatan ini mungkin tidak berguna dalam kasus Anda (misalnya, jika Anda ingin agar pengguna Anda dapat mengunduh dengan kecepatan maksimum yang tersedia tetapi tetap menegakkan batas bulanan Anda, saran saya tidak akan berhasil).
sumber
Saya tahu ini adalah posting lama tapi bahkan saya menemukan jawaban hari ini dan akhirnya saya mengumpulkan sesuatu yang bekerja dengan baik untuk saya. Saya memiliki downlink 25Mbs dan uplink 2,5Mbs dan ada 4 orang dan 5 server berbagi tautan ini. dengan server uplink bandwidth sangat penting tetapi downlink berguna dengan 4 orang sehingga tidak ada yang memakan semuanya.
Saya menjalankan centos 6.3 sebagai router tetapi perintah ini harus bekerja pada linux apa pun. eth0 adalah uplink saya ke provider eth1 adalah lan saya melalui 24 port switch dan jalur akses wifi Saya membatasi unduhan hingga 5 dari 25 Mbs (sekitar 500KB / detik) Saya membatasi unggahan hingga 200Kbit (sekitar 25KB / detik)
lalu untuk membatasi pengguna Anda menggunakan 2 baris iptables per pengguna
untuk membatasi unggahan:
untuk membatasi unduhan
cukup ubah alamat ip dan port et sesuai dengan yang ingin Anda batasi
sumber
Untuk kelengkapan, ada daemon userspace yang disebut
trickle
. Ini dapat digunakan untuk membatasi bandwidth dari satu proses tunggal. Penggunaannya sangat sederhana: untuk membatasi bandwidth yang digunakan oleh aptitude, Anda dapat menulis:trickle -d 10 aptitude install wesnoth
Namun karena berfungsi menggunakan LD_PRELOAD, ini bisa dengan mudah diganti oleh pengguna dengan akses shell.sumber
Lihatlah patch kernel useripacct (ini sebenarnya memiliki sejarah yang cukup panjang ). Dalam dokumen untuk versi lama , tampaknya juga memberikan penegakan kuota serta pemantauan, dan juga memungkinkan untuk memberikan skrip kebijakan Anda sendiri.
Mengingat pencipta useripacct harus menggunakan patch kernel untuk mendapatkan perilaku yang Anda inginkan, tampaknya tidak mungkin ada metode yang lebih sederhana tersedia secara default. Satu-satunya alternatif tampaknya membatasi bandwidth (dengan sesuatu seperti tc atau trickle) seperti yang disarankan oleh sebagian besar jawaban lain di sini (tetapi sebenarnya bukan yang Anda cari), atau membuat VM untuk setiap pengguna (menggunakan virtualisasi OS ringan) oleh sesuatu seperti OpenVZ ) dan lalu lintas akuntansi per VM (yang cukup mudah dinilai oleh sesuatu seperti vnstat ). Namun sepertinya itu berlebihan (tiba-tiba Anda memiliki banyak VM untuk dikelola, bukan satu sistem).
sumber