aşağıdaki durum: Yerel ikamet salonları için internet bağlantısını yöneten bir grup öğrenciyiz ve toplam yaklaşık 2000 son kullanıcısı var.
Bir trafik noktası sistemimiz var, her MB indirme veya yükleme maliyeti puanı, saat başına yeni noktalar ekleniyor. Şu anda, bir kullanıcının tüm puanlarını harcadığında internet erişimini engelliyoruz (Debian ağ geçidi yönlendiricimizdeki iptables'da bir REJECT politikasına yerleştirerek).
Yalnızca bir kullanıcının bant genişliğini sınırlamak istiyoruz. Bunu yapmanın en iyi yolu nedir?
Bunun basit cevabı, kullanıcının anahtar bağlantı noktasında (çoğunlukla Cisco Catalyst 3550'ler) bir hız sınırı belirlemek olacaktır. Ancak, kendi ağımızdaki ve üniversite ağındaki trafik sınırsız kalması gerektiğinden bu istenmeyen bir durumdur. Bant genişliğini yalnızca Cisco IOS'ta belirli bir hedef veya kaynak IP aralığına (hem çıkış hem de giriş) sahip paketler için sınırlamanın bir yolu var mı? Hiçbir şey bulamadım.
Diğer yol, ağ geçidi yönlendiricimizdeki trafiği kontrol etmektir. Aklıma birkaç çözüm geliyor:
tc veya tcng - her ikisi de oldukça gizli bir sözdizimine sahip ve IP başına trafik kontrolü yapmak için iyi özellikler sunmuyor gibi görünüyor. Pek çok kişi için özel bir QDisc muhtemelen yönlendiriciyi oldukça yavaşlatır. Ayrıca, her ikisine ilişkin belgeler oldukça eskidir.
shorewall - yapılandırmalar için oldukça düzgün bir sözdizimine sahip gibi görünüyor, ancak, bu miktarda trafiği ve kullanıcıları ele alıp alamayacağından ve IP başına trafik sınırlaması için uygun olup olmadığından emin değilim
pfSense - bizimki gibi amaçlar için tasarlanmış bir işletim sistemine benziyor. Ancak, ağ geçidi yönlendiricimizi tamamen yeniden yüklememizi gerektirir. Başka BSD sistemlerimiz yok ve pfSense'in çok iyi trafik muhasebe yeteneklerine sahip olması gerekecek (şu anda orada fprobe-ulog ve ulog-acctd kullanıyoruz).
Deneyiminiz nedir? Hangi çözüm ihtiyaçlarımıza uygundur ve en kolay şekilde korunabilir? Başka fikrin var mı?
Sistemimiz hakkında daha fazla bilgiye ihtiyaç duyarsanız, lütfen sormaktan çekinmeyin.
Şimdiden teşekkürler.
EDIT : Sistemi iptables
ve ile uyguladım tc
.
Her kullanıcının bir / 28 alt ağı, bir VPN IP'si (her ikisi de 10.0.0.0/8'den) ve harici bir IP'si vardır, hepsi bir iptables zinciri üzerinden yönlendirilir. Bu zincirin sadece bir kuralı var, basit RETURN
.
Her beş dakikada bir, bir Python betiği bu kuralların bayt sayaçlarını okur. Sayaçları sıfırlar ve PostgreSQL veritabanımızdaki kullanıcının trafik noktası hesabını günceller.
Bir kullanıcının puan dengesi belirli bir eşiğin altına düşerse, bu kullanıcı için iki tc sınıfı oluşturulur (biri gelen, biri ağ geçidi yönlendiricimizdeki giden arayüz için), IP'ler bu sınıflara ait tc filtrelerine girilir. Sınıflar bir HTB ile hız sınırlıdır.
Önceki sistem ile karşılaştırıldığında fprobe-ulog
ve ulog-acctd
bu byte sayımı iptables tarafından yapıldığından çok daha hızlıdır.
Ağ hızı kullanıcılarımız için önemli ölçüde iyileşmiştir.