Trickle – Linux에서 응용 프로그램의 네트워크 트래픽 대역폭 제어하기

하나의 응용 프로그램이 네트워크 频宽을 완전히 점유하는 상황을 당신은 몇 回 겪었는지요? 하나의 응용 프로그램이 모든 트래픽을 사용하는 상황에 있었다면, Trickle bandwidth shaper 응용 프로그램의 역할을 가치 attach하게 될 것입니다.

시스템 관리자이거나 Linux 사용자일 것이든지, 응용 프로그램의 업로드와 다운로드 속도를 어떻게 제어하는지 배워야 하며, 하나의 응용 프로그램에 의해 네트워크 频宽이 소각되는 것을 防止하는지 확인해야 합니다.

Trickle이란 무엇인가?

Trickle은 응용 프로그램의 업로드와 다운로드 속도를 관리하기 위한 네트워크 频宽 조절 도구로, 하나의 응용 프로그램이 모두(또는 대부분)의 사용 가능한 频宽을 점유하는 것을 防止하기 위해서는 사용할 수 있습니다.

간략히 말해서, trickle은 사용자 단위가 아닌 애플리케이션 단위로 네트워크 트래픽 속도를 제어할 수 있도록 해줍니다. 이는 클라이언트-서버 환경에서 대역폭 형성의 전형적인 예시로, 아마도 익숙한 설정일 것입니다.

trickle 작동 방식

또한, trickle은 우선순위 애플리케이션별로 우선순위를 정의하는 데 도움을 줄 수 있어 전체 시스템에 대한 제한이 설정된 경우에도 우선순위 앱들은 자동으로 더 많은 대역폭을 받을 수 있습니다.

이 작업을 수행하기 위해 trickle은 TCP 연결을 사용하여 소켓으로부터 데이터를 전송하고 수신하는 방식에 트래픽 제한을 설정합니다. 데이터 전송 속도 이외에도, trickle은 특정 시점에서 형성 중인 프로세스의 동작을 어떠한 방식으로든 수정하지 않는다는 점을 명심해야 합니다.

trickle이 할 수 없는 것

말하자면, trickle의 유일한 제한은 정적으로 연결된 응용 프로그램이나 SUID 또는 SGID 비트가 설정된 이진 파일과 함께 작동하지 않는다는 것입니다. 이는 trickle이 동적으로 연결하고 로딩하여 형성 프로세스와 관련된 네트워크 소켓 사이에 자리잡기 위해 동적 연결 및 로딩을 사용하기 때문입니다. trickle은 이후 이 두 소프트웨어 구성 요소 사이에서 프록시로 작동합니다.

trickle는 실행시에 슈퍼유저 권한을 필요로하지 않으므로, 사용자는 자신의 트래픽 제한을 설정할 수 있습니다. 이러한 것을 모르는 것이 unb desirable하다는 것을 보고하며, 시스템 사용자가 초과하지 못하는 전체 제한을 어떻게 설정하는지 탐구할 것입니다. 换句话说, 사용자는 자신의 트래픽 率을 依然 관리할 수 있지만, 그 것은 시스템 관리자가 정한 경계 내에서 이뤄집니다.

시험 환경

이 記事에서는, trickle를 사용하여 Linux 서버에서 어플리케이션이 사용하는 네트워크 帯宽을 제한하는 방법을 설명할 것입니다.

필요한 트래픽을 생성하기 위해서는, 클라이언트(ncftpputncftpget – 모두 ncftp를 설치하면 사용 가능)를 사용하여 (CentOS 서버 – dev1: 192.168.0.17), 서버에서 示시 목적으로 vsftpd를 사용하고 (Debian – dev2: 192.168.0.15)를 사용하고자 합니다.

이러한 지침은 RHEL-basedDebian-based 배포, UbuntuLinux Mint과 같은 것에서도 적용되ます.

Linux에서 ncftp와 vsftpd를 설치하는 方法

1. 레드햇 기반 배포판에서는 Fedora 프로젝트에 의해 유지되는 고품질의 무료 및 오픈 소스 소프트웨어 저장소 인 EPEL 저장소를 활성화해야합니다.

RHEL 9에 EPEL 설치:

sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

CentOS 9, AlmaLinux 9, Rocky Linux 9에 EPEL 설치:

sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release

RHEL 8에 EPEL 설치:

sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

CentOS 8, AlmaLinux 8, Rocky Linux 8에 EPEL 설치:

sudo dnf config-manager --set-enabled powertools
sudo dnf install epel-release

2. 그 다음으로, 다음과 같이 ncftp를 설치하십시오.

sudo dnf install ncftp         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install ncftp         [On Debian, Ubuntu and Mint]

3. 별도의 서버에 FTP 서버를 설정하십시오. FTP는 본질적으로 보안이 없지만 파일을 업로드하거나 다운로드 할 때 보안이 필요하지 않은 경우에 널리 사용됩니다.

이 문서에서는 trickle의 혜택을 설명하기 위해 사용하고 있으며, 이는 클라이언트의 stdout에서 전송률을 보여주기 때문에 나중에 FTP가 사용되어야 하는지 여부에 대한 논의는 다른 날과 시간에 남겨 둘 것입니다.

sudo dnf install vsftpd         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install vsftpd         [On Debian, Ubuntu and Mint]

이제 FTP 서버의 /etc/vsftpd/vsftpd.conf 파일을 다음과 같이 편집하십시오:

$ sudo nano /etc/vsftpd/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

다음 변경 사항을 적용하십시오:

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

그 후, 현재 세션에 vsftpd를 시작하고 향후 부팅에서 자동으로 시작되도록 활성화되었는지 확인하십시오:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo systemctl status vsftpd

4. 만약 원격 액세스를 위해 SSH 키를 사용하여 CentOS/RHEL 도플릿에 FTP 서버를 설정하려는 경우, 루트 홈 디렉토리 외부에 업로드 및 다운로드할 콘텐츠에 대한 적절한 디렉토리 및 파일 권한이 있는 암호로 보호된 사용자 계정이 필요합니다.

그런 다음 브라우저에서 다음 URL을 입력하여 홈 디렉토리로 이동할 수 있습니다. 로그인 창이 나타나 FTP 서버의 유효한 사용자 계정 및 암호를 입력하라고 요청됩니다.

ftp://192.168.0.15

인증이 성공하면 홈 디렉토리의 내용이 표시됩니다. 이 튜토리얼에서는 이전 단계에서 업로드된 파일을 표시하기 위해 나중에 해당 페이지를 새로 고칠 수 있습니다.

FTP Directory Tree

리눅스에 Trickle 설치 방법

이제 yum 또는 apt를 통해 trickle을 설치합니다.

성공적인 설치를 위해 도구 자체를 설치하기 전에 현재 설치된 패키지가 최신 상태인지 확인하는 것이 좋은 실천 방법으로 간주됩니다(yum update 사용).

sudo yum -y update && sudo yum  install trickle  [On RedHat based systems]
sudo apt -y update && sudo apt install trickle 	 [On Debian based systems]

trickle이 원하는 이진 파일과 함께 작동할지 확인합니다. 앞에서 설명한대로 trickle은 동적 또는 공유 라이브러리를 사용하는 바이너리에서만 작동합니다.특정 애플리케이션과 이 도구를 사용할 수 있는지 확인하려면 잘 알려진 ldd 유틸리티를 사용할 수 있습니다. 여기서 ldd는 동적 의존성 목록을 나열하는 것을 의미합니다.

특정 애플리케이션에서 이 도구를 사용할 수 있는지 확인하기 위해 ldd 유틸리티를 사용할 수 있습니다. 여기서 ldd는 동적 종속성 목록을 의미합니다.

특히, 소켓을 통한 통신에 관여하는 시스템 호출을 정의하는 glibc(GNU C 라이브러리)가 주어진 프로그램의 동적 종속성 목록에 있는지 확인합니다.

다음 명령어를 실행하여 트리클을 사용하여 해당 바이너리의 대역폭을 조절할 수 있는지 확인합니다.

sudo ldd $(which [binary]) | grep libc.so

예를 들어,

sudo ldd $(which ncftp) | grep libc.so

다음과 같은 출력이 나타납니다:

sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

출력의 대괄호 사이의 문자열은 시스템마다 다르고 심지어 같은 명령어를 여러 번 실행할 때도 달라질 수 있으며, 이는 라이브러리가 물리적 메모리에서의 로드 주소를 나타냅니다.

위의 명령어가 결과를 반환하지 않으면, 해당 바이너리가 libc를 사용하지 않으며, 따라서 그 경우 트리클을 대역폭 조절기로 사용할 수 없습니다.

Linux에서 Trickle 사용 방법 알아보기

Trickle을 가장 기본적인 독립 모드로 사용하는 것입니다. 이 방법을 사용하면 트리클을 사용하여 주어진 애플리케이션의 다운로드 및 업로드 속도를 명시적으로 정의할 수 있습니다. 앞서 설명한 것처럼, 간결성을 위해 다운로드 및 업로드 테스트에 동일한 애플리케이션을 사용합니다.

독립 모드에서 Trickle 실행

우리는 트리클을 사용할 때와 사용하지 않을 때의 다운로드 및 업로드 속도를 비교할 것입니다. -d 옵션은 다운로드 속도를 KB/s로 나타냅니다. 반면 -u 플래그는 트리클이 동일한 단위로 업로드 속도를 제한하도록 지시합니다. 또한, 우리는 -s 플래그를 사용할 것입니다. 이 플래그는 트리클이 독립 모드로 실행되어야 한다는 것을 지정합니다.

독립 모드로 트리클을 실행하기 위한 기본 구문은 다음과 같습니다:

sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]

다음 예제를 직접 수행하려면 tricklencftp를 클라이언트 컴퓨터에 설치해야 합니다 (192.168.0.17 경우입니다).

예제 1: 트리클을 사용하고 사용하지 않고 2.8MB 파일 업로드

다음 테스트에서는 무료로 배포 가능한 Linux Fundamentals PDF 파일 (다음 링크에서 제공됨)을 사용하고 있습니다.here

다음 wget 명령으로 현재 작업 디렉토리에 이 파일을 처음 다운로드할 수 있습니다.

wget http://linux-training.be/files/books/LinuxFun.pdf 

FTP 서버에 파일을 업로드하는 구문은 다음과 같습니다.

sudo ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename 

여기서 /remote_directory는 사용자 홈에 대한 업로드 디렉토리의 상대 경로이고, local-filename은 현재 작업 디렉토리의 파일입니다.

특정으로, trickle 없이는 52.02 MB/s의 최대 업로드 속도를 얻습니다 (이것은 실제 평균 업로드 속도가 아니라, 즉시 시작하는 최대ピーク임을 참고하십시오). 파일은 거의 즉시 업로드 됩니다:

sudo ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf 

출력:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

trickle을 사용하면, 업로드 전송 속도를 5 KB/s로 제한합니다. 파일을 두 번째로 업로드하기 전에, 목적지 디렉터리에서 파일을 삭제해야 합니다.

그렇지 않으면, ncftp가 목적지 디렉터리에 있는 파일이 업로드하려는 파일과 같은 것이고, 전송을 수행하지 않을 것입니다:

rm /absolute/path/to/destination/directory/LinuxFun.pdf 

그러면:

trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf 

출력:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

위의 예에서, 평균 업로드 속도가 ~5 KB/s로 떨어졌음을 볼 수 있습니다.

예제 2: Trickle을 사용하고 사용하지 않고 같은 2.8MB 파일을 다운로드

먼저, 원본 소스 디렉터리에서 PDF를 삭제하십시오:

rm /absolute/path/to/source/directory/LinuxFun.pdf 

다음과 같은 경우들은 클라이언트 기계의 현재 디렉터리에 FTP 서버의 IP 주소 뒤에 나타나는 점 (‘.‘)로 표시되는 것처럼, 원격 파일을 다운로드할 것입니다.

trickle 없이:

ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf 

출력:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

trickle을 사용하면, 다운로드 속도를 20 KB/s로 제한합니다:

trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf 

출력:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Trickle을 관리되지 않은 (슈퍼바이징) 모드로 실행

Trickle은 /etc/trickled.conf에 정의된 매개변수 시리즈를 따라 관리되지 않은 모드로도 실행할 수 있습니다. 이 파일은 trickled(데몬)의 행동방식과 trickle를 관리하는 방식을 정의합니다.

더욱이, 만약 모든 응용 프로그램 전체에서 사용할 전역 설정을 설정하고자 한다면, trickled 명령어를 사용해야 합니다. 이 명령어는 데몬을 실행시키고, trickle을 통해 실행되는 모든 응용 프로그램에 공유되는 다운로드와 업로드 제한을 정의할 수 있습니다. 이렇게 하면 매번 제한을 지정할 필요 없이 됩니다.

예를 들어, 다음과 같이 실행하면:

trickled -d 50 -u 10

이렇게 하면 trickle을 통해 실행되는 모든 응용 프로그램의 다운로드와 업로드 속도가 각각 30 KB/s10 KB/s로 제한됩니다.

trickled가 실행 중인지와 어떤 인자로 실행되고 있는지 언제든 확인할 수 있음을 유의하십시오:

ps -ef | grep trickled | grep -v grep

출력:

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10

예제 3: Trickle을 사용하여 19MB의 MP4 파일을 FTP 서버에 업로드하기

이 예제에서는 무료로 배포되는 “He is the gift” 동영상을 사용하겠습니다. 이 동영상은 이 링크에서 다운로드할 수 있습니다.

우선, 다음 명령으로 이 파일을 현재 작업 디렉토리에 다운로드할 것입니다:

wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

먼저, 위에 나열된 명령으로 trickled 데몬을 시작하겠습니다:

trickled -d 30 -u 10

trickle 없이:

ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   36.31 MB/s

trickle로:

trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB	9.51 kB/s

위의 출력에서 볼 수 있듯이, 업로드 전송 속도가 ~10 KB/s로 떨어졌습니다.

예제 4: Trickle을 사용하여 같은 동영상 다운로드하기

예제 2와 같이, 파일을 현재 작업 디렉토리에 다운로드할 것입니다.

트리클 없이:

ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB  108.34 MB/s

트리클로:

trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   29.28 kB/s

이전에 설정한 다운로드 제한(30 KB/s)과 일치합니다.

참고: 데몬을 시작하면, trickle을 사용하는 각 응용 프로그램마다 개별적인 제한을 설정할 필요가 없습니다.

이전에 언급한 대로, trickled.conf를 통해 trickle의 대역폭 형성을 더욱 자세하게 커스터마이징할 수 있습니다. 이 파일의典型的 구성은 다음과 같습니다:

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

여기서,

  • [service]는 대역폭 사용을 조정하고자 하는 응용 프로그램의 이름을 나타냅니다.
  • Priority를 통해 서비스에 대한 우선순위를 지정하여, 하나의 응용 프로그램이 데몬이 관리하는 모든 대역폭을 소유하지 못하게 할 수 있습니다. 숫자가 낮을수록 [service]에 할당되는 대역폭이 많습니다.
  • Time-Smoothing [초 단위]: trickled가 응용 프로그램이 데이터를 전송하고/또는 받을 때 어느 시간 간격으로 시도할 것인지를 정의합니다. 작은 값(0.1 – 1초 사이)는 대화식 응용 프로그램에理想的하며, 더 매끄러운 세션을 제공하고, 약간 큰 값(1 – 10 초)는 대량 전송이 필요한 응용 프로그램에 좋습니다. 값이 지정되지 않으면, 기본값(5 초)이 사용됩니다.
  • 길이-풀기 [in KB]: 이 아이디어는 Time-Smoothing와 같지만, I/O 연산의 길이를 기반으로 한다. 값이 지정되지 않으면 기본값(10 KB)이 사용된다.

풀기 값을 변경하면 [서비스]에 지정된 응용 프로그램이 고정값 대신 간격 내의 전송 속도를 사용한다. 불행히도, 이 간격의 하한값과 상한값을 계산하는 공식은 없으며, 주로 각 특정 케이스 시나리오에 따라 다르다.

다음은 CentOS 7 클라이언트(192.168.0.17)의 trickled.conf 예제 파일이다:

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

이 설정을 사용하면, trickled는 FTP 전송보다 SSH 연결을 우선시 한다. 대화식 프로세스인 SSH는 더 작은 시간-풀기 값을 사용하고, 대량의 데이터를 전송하는 서비스(FTP)는 더 큰 값을 사용한다는 것을 참고하자.

풀기 값은 이전 예제의 다운로드와 업로드 속도가 trickled 데몬에 의해 지정된 값을 정확히 일치시키지 않고 그 가까운 간격 내에서 변동하는 것에 책임이 있다.

[당신이 좋아할 수도 있는 것: OpenSSH 서버를 안전하게 하고 강화하는 방법]

결론

이 기사에서 우리는 Fedora 기반 배포판과 Debian/파생에서 trickle을 사용하여 응용 프로그램이 사용하는 대역폭을 제한하는 방법을 탐구했다. 다른 가능한 사용 사례에는, 다음과 같이 한정되지 않는다:

  • 시스템 유틸리티를 통해, 예를 들어 wgettorrent 클라이언트를 사용하여 다운로드 속도를 제한할 수 있습니다.
  • `yum` (또는 Debian 기반 시스템에서는 `aptitude`) 패키지 관리 시스템을 통해 시스템 업데이트 속도를 제한할 수 있습니다.
  • 서버가 프록시 또는 방화벽 뒤에 있거나 (또는 프록시 또는 방화벽 자신이라면), trickle을 사용하여 클라이언트와 외부와의 다운로드와 업로드 또는 통신 속도에 제한을 설정할 수 있습니다.

질문과 댓글은 언제나 환영입니다. 아래의 양식을 사용하여 보내주시기 바랍니다.

Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/