Linux 에서의 링크 집계 (포트 본딩)

CompTIABeginner
지금 연습하기

소개

이 랩에서는 Linux 환경에서 링크 통합 (Link Aggregation), 또는 포트 본딩 (port bonding) 이라고도 알려진 기술을 구현하는 방법을 배우게 됩니다. 이 강력한 기술을 사용하면 여러 물리적 네트워크 인터페이스를 단일 논리적 인터페이스로 결합하여 네트워크 처리량을 늘리고 장애 허용 (fault tolerance) 을 제공할 수 있습니다. 본딩된 연결을 구성하고 관리하기 위한 필수 Linux 네트워킹 명령에 대한 실습 경험을 쌓게 될 것입니다.

단계별 프로세스를 따라, 먼저 ip a 명령을 사용하여 시스템에서 사용 가능한 네트워크 인터페이스를 식별합니다. 안전하고 실용적인 시연을 위해, 다중 인터페이스 환경을 시뮬레이션하기 위해 두 개의 가상 "더미 (dummy)" 인터페이스인 dummy1dummy2를 생성할 것입니다. 그런 다음 새로운 가상 본드 (bond) 인터페이스인 bond0를 생성하고 이 두 개의 더미 인터페이스를 여기에 종속시킵니다 (enslave). 이후, 통신을 활성화하기 위해 새로 생성된 bond0 인터페이스에 고정 IP 주소를 할당합니다. 마지막으로 전체 구성을 확인하고 활성 본드의 상태를 점검하여 올바르게 작동하는지 확인합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 90%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

ip a 명령으로 사용 가능한 네트워크 인터페이스 확인

이 단계에서는 LabEx VM 에서 사용 가능한 네트워크 인터페이스를 식별하는 것부터 시작합니다. 여러 네트워크 인터페이스를 단일 본딩 링크로 결합하기 전에 먼저 해당 이름을 알아야 합니다. Linux 에서 이 작업을 위한 현대적이고 권장되는 명령은 ip a ( ip addr show의 약어) 입니다.

이 명령은 시스템의 모든 네트워크 인터페이스와 해당 IP 주소, MAC 주소 및 작동 상태를 표시합니다.

먼저 터미널을 엽니다. 터미널은 이미 열려 있고 ~/project 디렉토리에 있어야 합니다. 이제 ip a 명령을 실행하여 모든 네트워크 인터페이스를 나열합니다.

ip a

여러 인터페이스를 나열하는 출력이 표시됩니다. 몇 가지 주요 세부 정보에 주의해야 합니다.

  • lo: 이것은 루프백 인터페이스 (loopback interface) 로, 시스템이 자체적으로 통신하기 위한 가상 인터페이스입니다. 본딩 시에는 이 인터페이스를 무시합니다.
  • eth0: 이것은 기본 이더넷 인터페이스입니다. 랩 환경과의 연결을 안정적으로 유지하기 위해 이 인터페이스는 사용하지 않을 것입니다.
  • docker0: 이것은 Docker 에서 생성한 가상 브리지입니다. 현재 DOWN 상태이며 이 랩에는 적합하지 않습니다.
  • dummy1, dummy2: 이 두 개의 더미 가상 인터페이스는 이 랩을 위해 두 개의 추가 네트워크 카드 (network card) 를 시뮬레이션하기 위해 추가한 것입니다. 이 인터페이스들을 함께 본딩할 것입니다.
  • state UP: 인터페이스가 활성화되었음을 나타냅니다.

출력은 다음과 유사할 것입니다. 다음 단계에서 필요하므로 더미 인터페이스 이름인 dummy1dummy2에 주목하십시오.

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
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:00:20:a3 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.188/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159680sec preferred_lft 1892159680sec
    inet6 fe80::216:3eff:fe00:20a3/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:2c:eb:c9:91 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5caf:4ff:fe97:69bd/64 scope link
       valid_lft forever preferred_lft forever
5: dummy2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5caf:4ff:fe97:69be/64 scope link
       valid_lft forever preferred_lft forever

위의 출력에서 본딩 구성을 위해 적합한 두 개의 인터페이스인 dummy1dummy2를 식별했습니다. 다음 단계에서는 이 인터페이스 이름을 사용하여 새로운 본딩 인터페이스를 생성합니다.

본드 인터페이스 'bond0' 생성 및 활성화

이 단계에서는 네트워크 카드의 마스터 역할을 할 논리적 "본드 (bond)" 인터페이스를 생성합니다. 이를 위해서는 두 가지 주요 작업이 필요합니다. 본딩을 위한 필수 Linux 커널 모듈을 로드하고, 그런 다음 인터페이스 자체를 생성하고 활성화하는 것입니다.

먼저 bonding 커널 모듈이 로드되었는지 확인해야 합니다. 이 모듈에는 커널이 본딩된 인터페이스를 관리할 수 있도록 하는 코드가 포함되어 있습니다. modprobe 명령을 사용하여 로드할 수 있습니다.

sudo modprobe bonding

모듈이 성공적으로 로드되었는지 확인하려면 lsmod 명령을 사용하여 모든 로드된 커널 모듈을 나열하고 grep을 사용하여 "bonding"을 필터링할 수 있습니다.

lsmod | grep bonding

bonding 모듈이 현재 사용 중임을 나타내는 출력이 표시되어야 합니다.

bonding               196608  0

이제 커널이 준비되었으므로 새 논리적 인터페이스를 생성할 수 있습니다. 인터페이스 이름을 bond0으로 지정합니다. ip link 명령을 사용하여 bond 유형의 새 가상 링크를 추가합니다.

sudo ip link add bond0 type bond

이 명령은 인터페이스를 생성하지만 기본적으로 "down" 상태입니다. 활성화하려면 "up" 상태로 만들어야 합니다. 이는 물리적 네트워크 카드를 활성화하는 것과 유사합니다.

sudo ip link set dev bond0 up

이제 ip a 명령을 다시 사용하여 새 bond0 인터페이스가 존재하고 활성 상태인지 확인할 수 있습니다. 이번에는 인터페이스 이름을 지정합니다.

ip a show bond0

출력에는 bond0 인터페이스가 표시되며 상태는 DOWN이고 아직 IP 주소가 할당되지 않은 것을 볼 수 있습니다. IP 주소는 다음 단계에서 구성됩니다.

6: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

이제 마스터 bond0 인터페이스를 성공적으로 생성하고 활성화했습니다. 다음 단계는 더미 인터페이스를 슬레이브 (slave) 로 추가하는 것입니다.

인터페이스를 'bond0'의 슬레이브로 추가

이 단계에서는 이전에 식별한 가상 인터페이스 (dummy1dummy2) 를 bond0 마스터 인터페이스에 종속시킵니다. 인터페이스를 "종속시킨다 (enslave)"는 것은 해당 인터페이스를 본딩된 인터페이스의 제어 하에 둔다는 의미입니다. 종속된 후에는 물리적 인터페이스가 더 이상 자체 IP 주소를 필요로 하지 않습니다. 모든 트래픽은 bond0을 통해 관리됩니다.

더미 인터페이스를 사용하는 이 접근 방식은 완전히 안전하며 네트워크 연결 손실 위험 없이 본딩 프로세스를 학습할 수 있습니다.

먼저 dummy1 인터페이스를 본드에 추가합니다. 슬레이브로 추가하기 전에 해당 인터페이스를 비활성화해야 합니다.

sudo ip link set dev dummy1 down
sudo ip link set dev dummy1 master bond0

다음으로 dummy2 인터페이스에 대해서도 동일한 작업을 수행합니다.

sudo ip link set dev dummy2 down
sudo ip link set dev dummy2 master bond0

이제 본드 인터페이스를 활성화하고 IP 주소를 할당해 보겠습니다. 기존 eth0 구성과의 충돌을 피하기 위해 다른 서브넷을 사용합니다.

sudo ip addr add 192.168.100.10/24 dev bond0
sudo ip link set dev bond0 up

이제 dummy1dummy2가 모두 bond0에 종속되었는지 확인해 보겠습니다.

ip a

출력에서 dummy1, dummy2, bond0에 대한 항목을 확인합니다. dummy1dummy2 모두 설명에 master bond0이 포함되어 나열되는 것을 볼 수 있으며, 이는 성공적으로 종속되었음을 확인합니다. 또한 bond0 인터페이스가 이제 UP 상태이며 할당된 IP 주소를 가지고 있음을 확인합니다.

4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
    link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::2847:4ff:fe07:1aea/64 scope link
       valid_lft forever preferred_lft forever

인터페이스가 이제 슬레이브로 작동하므로 다음 단계는 bond0 인터페이스 자체에 대한 네트워크 설정을 구성하는 것입니다.

본드 인터페이스 연결 테스트

이 단계에서는 본드 인터페이스가 올바르게 작동하는지 확인하기 위해 테스트합니다. 두 개의 더미 인터페이스로 기능적인 본드를 생성하고 IP 주소를 할당했으므로 이제 기본 기능을 테스트할 수 있습니다.

먼저 본드 인터페이스가 활성화되어 있고 올바른 IP 주소를 가지고 있는지 확인합니다.

ip a show bond0

할당한 IP 주소 (192.168.100.10/24) 와 함께 bond0 인터페이스가 표시되어야 하며, 인터페이스 상태는 UP으로 표시되어야 합니다.

6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 scope global bond0
       valid_lft forever preferred_lft forever

이제 인터페이스가 응답하는지 확인하기 위해 본드 인터페이스 자체의 IP 주소로 ping 을 보내 테스트합니다.

ping -c 3 192.168.100.10

성공적인 ping 응답을 볼 수 있으며, 이는 본드 인터페이스가 작동하고 있음을 확인합니다.

슬레이브 인터페이스가 본드에 올바르게 연결되었는지도 확인해 보겠습니다.

ip a | grep "master bond0"

이 명령은 bond0에 종속된 인터페이스를 보여줍니다. dummy1dummy2가 모두 나열된 것을 볼 수 있습니다.

4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000

추가 확인을 위해 본드 인터페이스가 라우팅 테이블에 나타나는지 확인해 보겠습니다.

ip route | grep bond0

bond0 인터페이스를 통한 192.168.100.0/24 네트워크에 대한 라우팅 항목을 볼 수 있습니다.

교육용 참고: 이 설정은 본딩의 핵심 개념을 완벽하게 보여줍니다. 여러 물리적 인터페이스가 있는 프로덕션 환경에서는 선택한 본딩 모드에 따라 실제 네트워크 트래픽 로드 밸런싱 및 이중화를 볼 수 있습니다.

cat /proc/net/bonding/bond0로 본드 상태 확인

이 마지막 단계에서는 본드의 상태 파일을 직접 검사하여 가장 상세한 검증을 수행합니다. Linux 커널은 /proc 파일 시스템의 특수 파일을 통해 각 본딩된 인터페이스에 대한 실시간 정보를 노출합니다. bond0이라는 이름의 인터페이스의 경우 이 파일은 /proc/net/bonding/bond0에 있습니다.

이 파일을 보기 위해 cat 명령을 사용하면 본드의 모드, 슬레이브 인터페이스의 상태 및 트래픽 카운터를 포함한 본드의 구성에 대한 포괄적인 개요를 얻을 수 있습니다.

터미널에서 다음 명령을 실행합니다.

cat /proc/net/bonding/bond0

그러면 자세한 보고서가 표시됩니다. 출력은 다음과 유사하게 표시되며 이제 두 개의 슬레이브 인터페이스가 표시됩니다.

Ethernet Channel Bonding Driver: vX.X.X (Month Day, Year)

Bonding Mode: load balancing (round-robin)
Primary Slave: None
Currently Active Slave: dummy1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: dummy1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2a:47:04:07:1a:ea
Slave queue ID: 0

Slave Interface: dummy2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2e:5f:12:08:3a:eb
Slave queue ID: 0

이 출력의 주요 정보를 살펴보겠습니다.

  • Bonding Mode: 트래픽을 분배하는 데 사용되는 정책을 보여줍니다. 지정하지 않았으므로 기본값은 load balancing (round-robin)이며, 사용 가능한 슬레이브에 걸쳐 순서대로 패킷을 전송합니다.
  • MII Status: 본딩된 링크의 전반적인 상태를 보여줍니다. up은 활성화되었음을 의미합니다.
  • Slave Interface: dummy1dummy2 모두에 대한 섹션을 볼 수 있습니다. 둘 다 MII Statusup으로 표시되어 활성 상태이며 본드의 일부임을 확인합니다. SpeedDuplex는 더미 인터페이스의 경우 Unknown 또는 기본값으로 표시될 수 있습니다.

축하합니다! Linux 에서 본딩된 네트워크 인터페이스를 성공적으로 구성했으며, 두 개의 더미 인터페이스를 단일 논리 인터페이스로 결합했습니다.

요약

이 실습에서는 Linux 환경에서 링크 집계 (포트 본딩) 를 구현하는 기본 개념을 배웠습니다. 절차는 ip a 명령을 사용하여 미리 구성된 두 개의 가상 인터페이스인 dummy1dummy2를 포함하여 사용 가능한 네트워크 인터페이스를 식별하는 것부터 시작했습니다. 식별 후 bond0이라는 새 가상 본드 인터페이스를 생성하고 활성화한 다음, 두 더미 인터페이스를 모두 슬레이브로 추가하여 완전한 본딩 프로세스를 시연했습니다.

이 접근 방식은 원격 환경에서 연결 손실 위험 없이 본딩 개념을 학습할 수 있는 완전히 안전하고 효과적인 방법을 제공했습니다.

주요 학습 내용은 다음과 같습니다.

  • 다중 인터페이스 환경을 시뮬레이션하기 위해 두 개의 더미 인터페이스 생성.
  • bonding 커널 모듈 로드.
  • 네트워크 본딩에서 마스터 - 슬레이브 관계 이해.
  • 여러 인터페이스를 단일 본드 마스터에 종속시키는 방법.
  • 본드 인터페이스에 안전하게 IP 주소 할당.
  • 최종 본드 구성 및 상태 확인.

실습은 cat /proc/net/bonding/bond0을 사용하여 본드의 상세 상태를 검사하는 것으로 마무리되었습니다. 이 명령은 본드의 구성, 모드 및 모든 슬레이브 인터페이스의 상태에 대한 포괄적인 정보를 제공합니다. 이 검증 단계는 본딩 설정이 의도한 대로 작동하는지 확인하기 위해 실제 시나리오에서 필수적입니다.