트래픽 제한

단풍의 이미지
    OS : RHEL4
# rpm -qi iproute
Name        : iproute                      Relocations: (not relocatable)
Version     : 2.6.9                             Vendor: Red Hat, Inc.
Release     : 3                             Build Date: 2004년 09월 20일 (월) 오후 06시 21분 34초
Install Date: 2005년 08월 15일 (월) 오전 03시 58분 52초      Build Host: porky.build.redhat.com
Group       : 응용프로그램/시스템           Source RPM: iproute-2.6.9-3.src.rpm
Size        : 1997359                          License: GNU GPL
Signature   : DSA/SHA1, 2005년 01월 06일 (목) 오전 08시 19분 38초, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary     : 어드밴스 IP 라우팅과 네트워크 장치 설정 도구들.
Description :
iproute 패키지에는 ip와 rtmon과 같은 네트워킹 유틸리티가 포함되어 있습니다.
이러한 유틸리티는 Linux 2.2.x 커널의 고급 네트워킹 기능을 사용하기 위하여
만들어 졌습니다.

    tc - show / manipulate traffic control settings
Quote:
#!/bin/sh

# Functionally almost identical to the CBQ sample configuration above:

#tc qdisc add dev eth0 root handle 1: htb default 30
tc qdisc add dev eth0 root handle 1: htb default 10

tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit burst 15k

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k
#tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k
#tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k

# The author then recommends SFQ for beneath these classes:

tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
#tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
#tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10

# Add the filters which direct traffic to the right classes:

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip dport 80 0xffff flowid 1:10

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip sport 25 0xffff flowid 1:20

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip dport 22 0xffff flowid 1:30

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip src 211.119.136.240/32 match ip dst 211.119.136.240/32 flowid 1:10

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip dst 211.119.136.240/32 flowid 1:10

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip src 211.119.136.240/32 flowid 1:10

#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
#match ip src 211.119.136.240/32 match ip sport 80 0xffff flowid 1:10

목적 : 업/다운 5Mbps 로 제한 (프로토콜에 관계없이)

위와 같이 설정해서

서버에서 외부로만 5Mbps 로 제한되고
외부에서 서버로 5Mbps 제한이 안되는데
혹시 TC 로 트래픽 제한해 보신분 있으신가요?

    [root@ask ~]# tc -s filter show dev eth0 filter parent 1: protocol ip pref 1 u32
    filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
    filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 (rule hit 874471 success 0)
    match d37788f0/ffffffff at 12 (success 874471 )
    match d37788f0/ffffffff at 16 (success 0 )
    [root@ask ~]# tc -d filter show dev eth0
    filter parent 1: protocol ip pref 1 u32
    filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
    filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10
    match d37788f0/ffffffff at 12
    match d37788f0/ffffffff at 16
    [root@ask ~]#
[/][/][/]
wariua의 이미지

목적지 IP 주소를 맞춰보도록 해서 들어오는 트래픽을 제어하시려는 거라면, 보시다시피 적용이 되지 않습니다. tc를 통해 제어하는 트래픽 셰이핑은 내보내는 트래픽에만 적용되기 때문입니다.

Quote:
With queueing we determine the way in which data is SENT. It is important to realise that we can only shape data that we transmit.

정석은 서버 앞에 있는 게이트웨이에서 서버로 향하는 트래픽을 제어하는 것이겠습니다만, 그게 불가능하거나 '어느 정도의' 대역폭 제어만으로도 충분하다면 iptables의 limit match로도 유사한(초당 바이트가 아닌 초당 패킷) 효과를 낼 수 있습니다.

Quote:
# iptables -A INPUT -m limit --limit 100/sec -j ACCEPT
# iptables -A INPUT -j DROP

하면 패킷을 초당 100개까지만 받습니다. (limit 모듈 설치 안 돼 있으면 낭패...-_-;; )

초당 바이트를 제어하는 match나 target이 있을 법도 한데 찾아봐도 안 보이네요.

$PWD `date`

mithrandir의 이미지

netfilter의 IMQ를 사용해보시는것도 좋은 방법입니다.

그리고 커널 옵션을 들여다보면 ingress qos에 대한 내용도 있습니다. (동작하는지 어떤지는 잘 모르겠습니다마는)

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

지나가는새의 이미지

check out "netshaper"

tc보다 훨씬 사용하기 편합니다.

Fever Pitch!

단풍의 이미지

[root@ask ~]# ifconfig -a
생략
imq       Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:1500  Metric:1
          RX packets:16000586 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16000591 errors:0 dropped:4294967291 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:1432257695 (1.3 GiB)  TX bytes:1432257747 (1.3 GiB)
생략
[root@ask ~]# cat tc.sh
#!/bin/sh

# imq device enable (http://pupa.da.ru/imq/)
# insmod imq
# ifconfig imq up

# Functionally almost identical to the CBQ sample configuration above:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb
tc qdisc del dev  imq root
tc qdisc add dev  imq root handle 2: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 15k
tc class add dev  imq parent 2: classid 2:2 htb rate 100mbit burst 15k

# 송신 트래픽 클래스
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20mbit burst 15k

# 수신 트래픽 클래스
tc class add dev  imq parent 2:2 classid 2:20 htb rate 20mbit burst 15k

# The author then recommends SFQ for beneath these classes:
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev  imq parent 2:20 handle 20: sfq perturb 20


# Add the filters which direct traffic to the right classes:
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 25 0xffff flowid 1:10
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:10
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 match ip sport 80 0xffff flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:10
tc filter add dev  imq protocol ip parent 2:0 prio 2 u32 match ip src 0.0.0.0/0 flowid 2:20
[root@ask ~]#
[root@ask ~]# tc -s filter show dev eth0
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10  (rule hit 25806587 success 25806587)
  match 00000000/00000000 at 12 (success 25806587 )
[root@ask ~]#
[root@ask ~]# tc -s filter show dev imq
filter parent 2: protocol ip pref 2 u32
filter parent 2: protocol ip pref 2 u32 fh 800: ht divisor 1
filter parent 2: protocol ip pref 2 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 2:20  (rule hit 16211052 success 16211052)
  match 00000000/00000000 at 12 (success 16211052 )
[root@ask ~]#

imq 를 설치해서 해결 했습니다. 답글 주신분께 감사 드립니다. :D

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.