잠시만 기다려 주세요

     '입만 나불거리고 행동하지 않는 야당을 규탄한다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1056)  |  추천 및 재미 (155)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (606)  |  끄적거림 (129)  |  문예 창작 (705)  |  바람 따라 (69)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    리눅스 서버

리눅스 서버 - 서버 랜카드, 네트워크 대역폭 제어, 트래픽 제어, 제한 – ETHTOOL / TC
이 름 : 바다아이   |   조회수 : 10882         짧은 주소 : https://www.bada-ie.com/su/?231591801871

트래픽이 너무 크게 발생해 큰 돈 내기 싫을 때나 기타 등의 이유로 대역폭을 제한하고 싶을 때 방법입니다.


[ethtool]
 

 – ethtool은 리눅스 내 네트워크 상태 정보를 알아보거나 설정하는데 사용되는 명령어 입니다.

 – 기본 사용법 : ethtool 장치명

# ethtool eth0

 

[설명] 

Supported link modes 지원 가능한 링크 모드
Supported auto-negotiation 자동협상인식기능의 지원여부
Speed 현재 속도 (대역폭)
Duplex 전송 모드
Auto-negotiation 자동협상인식기능 동작 여부

 

위 내용을 바탕으로 살펴보면, 

테스트 서버의 지원 가능한 랜카드의 대역폭은 10/100/1000 이며, auto-negotiation 기능을 사용할 수 있습니다.

또 현재 연결된 네트워크 속도(대역폭)는 100Mb/s이며, 전송 모드는 Full 상태임을 알 수 있습니다.

 

그럼 ethtool을 이용하여 설정을 변경해 볼까요?

설정은 네트워크 속도 : 10Mb/s, 전송 모드 Full, auto-negotiation : off 로 하겠습니다.

 – 설정 사용법 : ethtool -s 장치명 speed (10/100/1000) duplex (full/half) autoneg (on/off)


#ethtool -s eth0 speed 10 duplex full autoneg off

#ethtool eth0

 

ethtool 명령어를 이용해 쉽게 10Mb/s 로 대역폭이 제한되었음을 확인할 수 있습니다. 

편리하긴 하지만 한가지 문제가 있겠죠? 바로 세밀한 대역폭 조절이 어렵다는 것!!

ethtool은 Supported link modes에 지원되는 값으로만 설정이 가능하기에 30/50/80 등 사용자가 지정한 값으로는 조절이 불가합니다.

 

그럴 때 이용할 수 있는 명령어가 바로 tc 입니다.

tc를 이용하면 사용자가 직접 장치별 대역폭을 지정해서 사용할 수 있습니다.

또 해당 명령어를 사용하기 쉽게 스크립트 형태로 제공하고 있으니 참고하시기 바랍니다.

[tc 스크립트 바로가기]
(https://www.iplocation.net/traffic-control)

 

[tc]
 

 – 리눅스 기본 패키지인 iproute 안에 내장된 명령어로 Traffic Control의 약자입니다.

   네트워크 스위치의 도움 없이 서버 자체에서 이더넷 속도를 제한할 수 있으며, QOS(Quality Of Service)와 비슷한 기능을 제공합니다.  

 

* 링크 내 해당 스크립트에서 수정할 부분은 아래와 같습니다.

22라인 IF=eth0             # Interface (장치명)

25라인 DNLD=1mbit          # DOWNLOAD Limit (다운로드 제한)

28라인 UPLD=1mbit          # UPLOAD Limit (업로드 제한)

31라인 IP=216.3.128.12     # Host IP (서버 IP)

 

자 그럼 저는 원하는 값으로 수정하였으니, 스크립트를 실행하고 결과를 확인해 보도록 하겠습니다.






 

외부에서 파일을 다운로드 할 때의 트래픽 변화입니다. 제가 제한을 어떻게 걸었는지 아시겠죠?

35 > 25 > 15 mb로 설저을 변경하면서 테스트를 진행하였습니다.

잘 적용이 되는 듯 합니다만, 한가지 특이한 점은 서버 기준 Out트래픽(UPLD)만 제한이 되고, In트래픽은 제한되지 않습니다. 

원인은 tc를 통해 제어하는 트래픽 세이핑 방법은 Out트래픽에만 적용되기 때문인데요.  추후 In트래픽 제한 방법에 대해 별도 소개하도록 하겠습니다.

 

여기까지가 가장 기본적인 tc 사용법이며 활용 방법은 무궁무진합니다.

tc를 잘 활용하면, 특정 IP 서버 혹은 특정 국가별 대역폭 조절도 가능하죠. 자세한 건 검색을 통해서 확인하시기 바랍니다. ^^

 

각각의 장단점이 있는 ethtool과 tc !! 선택은 사용하는 자의 몫이겠죠?

※ TC bash 스크립트

 

#!/bin/bash
#
#  tc uses the following units when passed as a parameter.
#  kbps: Kilobytes per second
#  mbps: Megabytes per second
#  kbit: Kilobits per second
#  mbit: Megabits per second
#  bps: Bytes per second
#       Amounts of data can be specified in:
#       kb or k: Kilobytes
#       mb or m: Megabytes
#       mbit: Megabits
#       kbit: Kilobits
#  To get the byte figure from bits, divide the number by 8 bit
#

#
# Name of the traffic control command.
TC=/sbin/tc

# The network interface we're planning on limiting bandwidth.
IF=eth0             # Interface

# Download limit (in mega bits)
DNLD=1mbit          # DOWNLOAD Limit

# Upload limit (in mega bits)
UPLD=1mbit          # UPLOAD Limit

# IP address of the machine we are controlling
IP=216.3.128.12     # Host IP

# Filter options for limiting the intended interface.
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"

start() {

# We'll use Hierarchical Token Bucket (HTB) to shape bandwidth.
# For detailed configuration options, please consult Linux man
# page.

    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2

# The first line creates the root qdisc, and the next two lines
# create two child qdisc that are to be used to shape download
# and upload bandwidth.
#
# The 4th and 5th line creates the filter to match the interface.
# The 'dst' IP address is used to limit download speed, and the
# 'src' IP address is used to limit upload speed.

}

stop() {

# Stop the bandwidth shaping.
    $TC qdisc del dev $IF root

}

restart() {

# Self-explanatory.
    stop
    sleep 1
    start

}

show() {

# Display status of traffic control status.
    $TC -s qdisc ls dev $IF

}

case "$1" in

  start)

    echo -n "Starting bandwidth shaping: "
    start
    echo "done"
    ;;

  stop)

    echo -n "Stopping bandwidth shaping: "
    stop
    echo "done"
    ;;

  restart)

    echo -n "Restarting bandwidth shaping: "
    restart
    echo "done"
    ;;

  show)

    echo "Bandwidth shaping status for $IF:"
    show
    echo ""
    ;;

  *)

    pwd=$(pwd)
    echo "Usage: tc.bash {start|stop|restart|show}"
    ;;

esac

exit 0

 

 

| |





      1 page / 5 page
번 호 카테고리 제 목 이름 조회수
148 리눅스 서버 samba ... , ... 바다아이 459
147 리눅스 서버 postfix main.cf ... 바다아이 3439
146 리눅스 서버 /etc/crontab ... 바다아이 2131
145 리눅스 서버 - MEMTEST, , 바다아이 3311
144 리눅스 서버 top , top 바다아이 4124
143 리눅스 서버 , systemd-networkd, archlinux network setting 바다아이 5215
142 리눅스 서버 mirror .. ... 바다아이 5690
141 리눅스 서버 [Ubuntu] (swapfile) , ... 바다아이 5567
140 리눅스 서버 ufw , iptables 바다아이 6842
139 리눅스 서버 ... grub . submenu, grub-mkconfig 바다아이 5655
138 리눅스 서버 CentOS 7 Upgrade Kernel, centos 바다아이 7449
137 리눅스 서버 , dd , 바다아이 5569
136 리눅스 서버 ... ntp .. ... 바다아이 6608
135 리눅스 서버 archlinux netstat , netstat ... 바다아이 6356
134 리눅스 서버 ps , ps option 바다아이 6083
133 리눅스 서버 , swap , ... swap . 바다아이 6314
132 리눅스 서버 crontab , .... 바다아이 6266
131 리눅스 서버 ssh , ssh 바다아이 7368
130 리눅스 서버 SSH SSH , ssh-keygen rsa 바다아이 6907
129 리눅스 서버 , date : () , () , 바다아이 7097
128 리눅스 서버 aws lightsail, ssh .. .pem 바다아이 12147
127 리눅스 서버 , ubuntu generic kernel 바다아이 7490
126 리눅스 서버 .. apt ... 바다아이 7370
125 리눅스 서버 ... ubuntu kernel compile 바다아이 9959
124 리눅스 서버 nginx http2 , . 바다아이 8847
123 리눅스 서버 psql libreadline.so.7: cannot open shared object file: No such file or directory 바다아이 9211
122 리눅스 서버 ssh .bashrc , bash .. .bash_profile 바다아이 8552
121 리눅스 서버 , , 바다아이 7761
120 리눅스 서버 rc.local ... , 바다아이 8473
119 리눅스 서버 ? - IPv4 Subnetting, (Subnet Mask) 바다아이 8183
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.05841
to webmaster... gogo sea. gogo sea.