잠시만 기다려 주세요

HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (888)  |  추천 및 재미 (153)  |  자료실 (20)  |  끄적거림 (520)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2020년 09월 23일
최악이란 없다. 제일 안 좋은 순간에도 희망을 잃지는 말자. 어찌하든 살아야 한다. - 바다아이
 




    리눅스 서버

리눅스 서버 - 서버 랜카드, 네트워크 대역폭 제어, 트래픽 제어, 제한 – ETHTOOL / TC
이 름 : 바다아이   |   조회수 : 2592         짧은 주소 : 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
번 호 카테고리 제 목 이름 조회수
136 리눅스 서버 ... ntp .. ... 바다아이 210
135 리눅스 서버 archlinux netstat , netstat ... 바다아이 269
134 리눅스 서버 ps , ps option 바다아이 275
133 리눅스 서버 , swap , ... swap . 바다아이 258
132 리눅스 서버 crontab , .... 바다아이 234
131 리눅스 서버 ssh , ssh 바다아이 498
130 리눅스 서버 SSH SSH , ssh-keygen rsa 바다아이 482
129 리눅스 서버 , date : () , () , 바다아이 784
128 리눅스 서버 aws lightsail, ssh .. .pem 바다아이 849
127 리눅스 서버 , ubuntu generic kernel 바다아이 1274
126 리눅스 서버 .. apt ... 바다아이 1221
125 리눅스 서버 ... ubuntu kernel compile 바다아이 1462
124 리눅스 서버 nginx http2 , . 바다아이 1300
123 리눅스 서버 psql libreadline.so.7: cannot open shared object file: No such file or directory 바다아이 1726
122 리눅스 서버 ssh .bashrc , bash .. .bash_profile 바다아이 1640
121 리눅스 서버 , , 바다아이 1652
120 리눅스 서버 rc.local ... , 바다아이 1703
119 리눅스 서버 ? - IPv4 Subnetting, (Subnet Mask) 바다아이 1781
118 리눅스 서버 TCP UDP ? 바다아이 1734
117 리눅스 서버 FTP passive(), active() 바다아이 1656
116 리눅스 서버 ftp passive .... filezilla ftp ... 바다아이 2268
115 리눅스 서버 ssh sftp ... sftp ... 바다아이 1844
114 리눅스 서버 rpm 바다아이 1902
113 리눅스 서버 /tmp ... /tmp ... tmpfs 바다아이 2434
112 리눅스 서버 archlinux ... mirror, 바다아이 1823
111 리눅스 서버 centos7 pgadmin4 .... ... pgadmin4 server mode, postgresql admin .. 바다아이 1895
110 리눅스 서버 centos 7, freebsd postfix dovecot , 바다아이 2013
109 리눅스 서버 Centos 7 Postgresql 10, 11 바다아이 1841
108 리눅스 서버 [Network] SSL / TLS 바다아이 2146
107 리눅스 서버 TLS , ssl 바다아이 2614
| |








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