今天的 Tetralet 又在唧唧喳喳了



« 五月 2017 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        






 

使用 Shaperd 來限制本機頻寬!

Tetralet | 17 八月, 2006 22:28

對於 Debian GNU/Linux 使用者而言,不能和 Internet 連線,世界就是黑白的。但如果和別人共用網路連線時,老是佔用別人的頻寬也不是辨法,這時您可能希望能替您的 Linux 加上一些限制本機頻寬的功能。

在 Debian GNU/Linux 裡,要限制您的 Linux 主機的本機頻寬並非難事。首先,安裝 shaperd 套件:

apt-get install shaperd

然後在 /etc/shaperd/shaperd.conf 中設定頻寬限制範圍,例:

log level = warning
packet forwarding = ipq
daemon = yes
class all_up {
        bandwidth = 96 kbit/s
        ipv4 classifier out_if=ppp0 daddr=0/0
        queue limits = 0 kb 180 packets
}
class all_down {
        bandwidth = 1024 kbit/s
        ipv4 classifier inp_if=ppp0 saddr=0/0
        queue limits = 0 kb 150 packets
}

接下來,設定 iptables,將規則為 ACCEPT 的皆改為 QUEUE,例:

# 預設上不接受任何連線
itables -P INPUT DROP
iptables -P OUTPUT DROP

# 本機 lo 連線不受管控
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 不回應來自 ppp0 介面的 ping 封包
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i ppp0 -p icmp -j ACCEPT

# 不接受任何來自 ppp0 的連線
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP

# 所有的連線皆要接受頻寬控管
iptables -A INPUT -i ppp0 -p all -j QUEUE
iptables -A OUTPUT -o ppp0 -p all -j QUEUE

然後,請記得載入 ip_queue 模組(建議將其寫在 /etc/modules 裡), 否則所有設定為 QUEUE 的 iptables 規則將會無法生效,且會在 /var/log/daemon.log 裡留下以下的錯誤訊息:

shaperd: can't open /proc/sys/net/ipv4/ip_queue_maxlen (is ip_queue loaded? is /proc mounted? how are babies made? :)
you can try 'mount /proc' and/or 'modprobe ip_queue' {config.cpp:1551}
最後,重新啟動 shaperd 讓新的設定生效後,您的 Linux 主機就擁有限制本機頻寬的功能了。

註:

  • 使用 shaperd 並無法平順得限制本機頻寬,您所使用頻寬會上上下下跳動,但平均值會接近您所設定的數值。

  • 使用 shaper、squid、shorewall 所限制的是經由本機的頻寬,而這只有在您的主機是拿來當 Gateway 時才有效用。shaper、squid、shorwall 並無法限制本機頻寬。

  • 使用 shaperd 也可以限制的是經由本機的頻寬,只要將 FORWARD 的 iptables 規則設定為 QUEUE 即可。
迴響

無法限制流量

我安裝了shaperd也設定將封包轉往Queue了但是上傳速度依然沒有受到限制查看syslog發現了shaperd的訊息如下

Sep 21 21:53:59 localhost shaperd[3770]: invalid packet (hw_protocol=0x0) please apply http://webs.sinectis.com/lesanti/shaperd/fw-2.4.17.patch to fix this problem {packet.cpp:157}

我使用的是2.6.16-2核心,不知道這是不是無法限制流量的原因

[回應] nansenat16 @ 21/09/2006, 22:02

也許是未載入 ip_queue 模組的關係?

不好意思我的原文中忘了把 ip_queue 相關設定加進去了。
現已更正,請您再試一次。

[回應] Tetralet @ 27/09/2006, 22:57

你好!

我的问题跟你一样,我也在为这个问题苦恼.我的朋友们都喜欢玩网络游戏,而网络游戏对于延迟是很重视的.但是我的UBUNTU不能不上网,也不能不更新或者安装一些软件,而且UBUNTU下东西的时候很占带宽.

不知道你的这篇文章适不适合UBUNTU.

[回應] Davy @ 15/11/2007, 00:29

Re: Davy

應該可以吧?Ubuntu 基本上是 Debian Based 的呀!

[回應] Tetralet @ 15/11/2007, 19:05

我是个小白~

不行啊,不懂,整不明白,我在这之前没有摆弄过这些东西。
iptables是个文件吗?在那里找?我搜到几个,但是里面都是空的,是要自己加进去吗?
載入 ip_queue 模組(建議將其寫在 /etc/modules 裡) 是直接加进modules文件里吗?

[回應] Davy @ 16/11/2007, 00:49

Re: Davy

這就有點難解釋了。

iptable 是現今 Linux Kernel 所提供的 IP 封包過濾機制。也就是說,我們可以利用 iptables 來架設防火牆。

由於某些難以理解的原因,Debian 不提供 /etc/init.d/iptables 讓系統在開機時就啟用 iptables;取而代之的,您可以將您的 iptables 規則寫在 /etc/network/interface 裡;或是利用像是 shorewall 之類的 iptables 設定工具。

想以三言兩語解釋 iptables 或 shorewall 的設定方式實非易事,請試著 Google 看看吧!

另外,Debian 在開機時會載入寫在 /etc/modules 裡的模組,所以請直接把 ip_queue 寫入 /etc/modules 即可。

[回應] Tetralet @ 16/11/2007, 19:02

哦,谢谢了

谢谢了,知道是什么东西的就可以GOOGLE了,呵呵

不知道Tetralet兄是否开始使用Ubuntu了?

[回應] Davy @ 16/11/2007, 20:54

Re: Davy

個人是試用過 Ubuntu 7.10 幾天,但很快就放棄不用了。

個人認為,Gnome 比起以前來真的是進步蠻多的,但在很多小地方還是未能盡善盡美。失望之餘,個人又回去 Debian + IceWM 的懷抱了。

[回應] Tetralet @ 16/11/2007, 21:13

被WIN给养懒了

UBUNTU挺漂亮的,我已经喜欢上了,至少不用Debian + IceWM 那么多命令,习惯了WIN,都已经被养懒了。

[回應] Davy @ 17/11/2007, 15:04

Re: Davy

若是以操作介面及易用性而言,Ubuntu 的確不輸 Windows XP。人們不習於使用 Ubuntu 的主要原因個人會歸因於使用習慣 - 畢竟人們已太習於使用 MS Windows 了。

就像人們使用號稱最人性化的 Mac OS X 也是需要一段時間適應,更何況是 Ubuntu 呢?

使用 IceWM 也是類似的情形。雖然要用 IceWM 當 Desktop 將需要更多的 GNU/Linux 使用經驗,但用慣 IceWM 的人們使用 Ubuntu 卻會覺得綁手綁腳的。

所以說,一剛開始就選對工具是很重要的。等習慣了才想轉換工具難免事倍功半,甚至只是徒勞無功。人生可沒有太多重來的機會呀!

[回應] Tetralet @ 18/11/2007, 23:54

不错!

恩,不错,说的很有道理,受教了!呵呵

[回應] Davy @ 19/11/2007, 13:59

authimage
驗證碼皆為英文大寫字母
僅輸入前4碼即可。後2碼是假的,欺敵用。
這是為了防制 Spam 而設計的。若造成您的不便還請見諒!
Accessible and Valid XHTML 1.0 Strict and CSS
Powered by LifeType - Design by BalearWeb