해당 포스팅은 작성자가 공부 목적으로 작성한 글로써 작동하지 않거나 일부 틀린 부분이 존재할 수 있습니다.

개요

본인의 직장에서 작업 중 대용량의 파일을 온라인에서 내려받을 일이 생겼고 해당 작업을 실행 시 회사의 여유롭지 않은 네트워크 트래픽을 다 사용하게 되는 문제가 있었다. 그래서 기존 40Mbps 로 받아지는 대용량 파일 5Mbps로 내려 조금 오래걸리더라도 해당 작업을 회사 네트워크에 문제가 되지 않도록 네트워크 속도에 제한을 걸어 느리게 진행하였다. Wondershaper라는 도구를 이용하여 네트워크 속도를 제한하였고 구성 환경 및 특징 다음과 같다. 다른 사용자의 포스팅에 의하면 우분투 20.04 에서도 사용가능하다고 한다.

  • Ubuntu 18.04
  • 유선 랜 사용
  • Wondershaper 툴 사용
  • Ubuntu 20.04도 가능

일련의 설치과정이 존재하지만 어렵지 않게 수행할 수 있다.

Wondershaper 설치

해당 툴은 apt 패키지로도 설치할 수 있지만 2022년 6월 기준 해당 깃헙 레포지토리에서 최신버전을 받아 사용하였다. 가장 마지막 커밋은 2021년 10월 이고 따로 릴리즈 버전은 없지만 Readme.md 내용을 기준으로 1.4.1 버전인 것 같다.

$ git clone https://github.com/magnific0/wondershaper.git
$ cd wondershaper
$ sudo make install

설치에 문제가 있거나 작동에 문제가 있을 시 다음 명령어로 삭제할 수 있다.

$ sudo make uninstall

위의 설치 과정은 바이너리, 서비스, 설정파일을 각각 필요한 위치에 옮겨준다. 본인의 PC 기준으로 다음과 같다.

/usr/local/sbin/wondershaper
/usr/local/lib/systemd/system/wondershaper.service
/etc/systemd/wondershaper.conf

사용

설치가 완료되었다면 서비스의 형태로 제공되는 wondershaper를 작동 시키자. 1회성으로 사용한다면 바로 바이너리 파일을 이용하여 실행 할 수 있다. 지속적 사용이 필요하다면 설정파일을 셋팅하고 systemctl 명령어를 통해 enablestart까지 하자.

네트워크 인터페이스 확인

하나의 PC에 네트워크 인터페이스는 여러개가 설정되어있을 수 있다. 단순 로컬 뿐 아니라 VM과의 연결, 도커 사용으로 인한 인터페이스 등이 있지만 여러개가 있을 수 있지만 사용자인 본인이 보기에 외부와의 연결 속도를 제한한다면 어떤 네트워크 인터페이스를 건드려야할 지 알 것이라 생각한다. 본인의 경우 다음과 같다.

$ ip addr show

>>>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    ...
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    ...
3: vmnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    ...
4: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    ...
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    ...
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    ...
7: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    ...
8: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    ...
14: vethe84347f@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP group default 
    ...

위 내용과 같이 9가지의 인터페이스가 나오는데 사무실 내에서 본인이 외부와 연결하기 위해 사용하는 인터페이스는 eno1이다. 본인의 IP와 저기에 생략하였지만 실제로 출력된 내용을 보면 알 수 있다.

바로 실행(바이너리를 통해)

기본적인 wondershaper의 사용법은 다음과 같다.

$ wondershaper [-a <adapter>] [-d <rate>] [-u <rate>]
# wondershaper [-a 네트워크 인터페이스 명] [-d 다운로드 속도] [-u 업로드 속도]

다른 옵션들이 일부 더 있는데 이는 wondershaper --help 명령어를 통해서 확인해보자.

아래와 같이 실행한다면 다운로드 속도는 5MB/s, 업로드 속도는 1MB/s 로 제한 할 수 있다.

$ sudo wondershaper -a eno1 -d 5120 -u 1024

서비스로 실행(설정 파일 셋팅)

지속적 사용을 위한다면 설정파일을 열어 네트워크 인터페이스, 다운로드 속도, 업로드 속도를 지정해주자. 해당 파일은 /etc/systemd/wondershaper.conf 경로에 있다.

$ sudo vi /etc/systemd/wondershape.conf

>>>
[wondershaper]

# Adapter
IFACE="eth0"

# Download rate in Kbps
DSPEED="2048"

# Upload rate in Kbps
USPEED="512"

...
...

해당 내용 아래에 있는 설정들은 건들 필요 없이 위의 바이너리로 실행할 때와 마찬가지로 네트워크 인터페이스, 다운로드 속도, 업로드 속도를 지정한다. 해당 값들을 본인의 환경에 맞게 변경한다.

그 후 서비스를 enablestart해 주어 wondershaper를 작동시킨다.

$ sudo systemctl enable wondershaper.service
$ sudo systemctl start wondershaper.service

속도 확인

본인은 https://www.speedtest.net/ 라는 사이트에서 속도를 체크하였다.

차이를 확인하기 위해 wondershaper를 적용 전과 후 2번을 체크해보면 확실한 차이를 알 수 있다.

속도 제한 설정 해제

설정 해제도 간단하게 구현되어있는 것 같다. 바이너리 사용 시와 서비스 사용 시 둘다 문제 없이 설정 해제가 된다.

바이너리 사용 시

-c 옵션은 clear인 듯하다. 설정했던 내용을 날려준다.

# sudo wondershaper -c -a [인터페이스 명]
$ sudo wondershaper -c -a eno1

서비스 사용 시

서비스를 중지하고 아예 사용을 안한다면 disable 명령어를 통해 서비스 등록을 해제한다.

$ sudo systemctl stop wodnershaper.service

# 아예 사용을 중단 할 시 
$ sudo systemctl disable wondershaper.service

참고: Average linux user posting
참고: Vitux posting

댓글남기기