Linux

리눅스 네트워크 본딩 (Linux Network Bonding)

Beengineer's Tech Notes 2025. 8. 29. 20:00

해당 포스팅은 RedHat Enterprise Linux 7.x ~ 8.x (CentOS 7.x ~ Rocky Linux 8.x)를 기준으로 작성됐습니다.

 

Bonding (본딩)?

 

리눅스 OS에서는 네트워크의 안정성을 위해서 Bonding(이하 본딩) 기능을 제공합니다. 네트워크 본딩이란 여러 개의 네트워크 인터페이스 (NIC, Network Interface Card)를 논리적으로 묶는 것을 말합니다. 이를 통해 논리적인 1개의 네트워크 인터페이스(본딩 네트워크 인터페이스)에 해당하는 대역폭을 본딩으로 묶은 네트워크 인터페이스들의 대역폭 합으로 확장할 수 있습니다. Fault Tolerance(이하 내결함성)도 제공합니다. 본딩 인터페이스를 구성하는 네트워크 인터페이스 중 1개에 장애가 발생하더라도, 다른 네트워크 인터페이스를 통해서 통신을 지속할 수 있습니다. 네트워크 인터페이스를 Active-Backup 모드로 지정하여 본딩을 구성하는 것도 가능합니다.

 

Bonding 설정 파일 위치 및 역할

 

리눅스는 'Everything is a file' 철학에 따라, 시스템 내 모든 사항들은 파일로 표현됩니다. 본딩도 예외가 아닙니다. 네트워크 본딩 관련 설정 및 구성, 인터페이스 모두 파일로 표현됩니다. 대표적인 파일은 다음과 같습니다.

 

bonding.conf

  • 위치 : /etc/modprobe.d/bonding.conf
  • 역할
    • 본딩 커널 모듈(bonding.ko) 로딩 시 기본적으로 적용되는 모듈 파라미터를 지정합니다. (Default 옵션 설정)
  • 예시
    • alias bond0 bonding
      • bond0 이라는 이름의 인터페이스 요청이 오면, 본딩 모듈을 사용하도록 alias(별칭)을 지정합니다. 즉,bond0 인터페이스를 본딩 모듈에 매핑하는 것입니다.
    • options bonding : 본딩 모듈 로드 시, 기본적으로 적용되는 옵션 값을 지정합니다. ifcfg-bondX 파일에 BONDING_OPTS에 별도 설정이 없을 경우, 여기서 지정한 값이 기본값으로 사용됩니다.
      • miimon=100 : 100ms 간격으로 링크 상태를 모니터링하게 합니다.
      • mode=1 : 본딩 인터페이스를 Active-Backup 모드로 구성 합니다.
      • alias bond0 bonding alias bond1 bonding alias bond2 bonding options bonding miimon=100 mode=1
  • 적용 방법
    1. bonding.conf 파일을 설정합니다.
    2. modprobe bonding 명령을 실행해, bonding 모듈을 로드합니다.
    3. 네트워크 서비스를 재시작하여 설정을 적용합니다.
      1. systemctl restart network 또는 NetworkManager
    4. 설정이 적용됐는지 확인합니다.
      1. cat /proc/net/bonding/bondX

 

ifcfg-bondX, ifcfg-ensXfX

  • 위치 : /etc/sysconfig/network-scripts/
  • 역할
    • 본딩 마스터 네트워크 인터페이스, 본딩을 구성하는 슬레이브 인터페이스별 설정을 지정합니다.
      • 본딩 마스터 네트워크 인터페이스에는 본딩 마스터를 알리는 설정, IP주소 및 게이트웨이 설정 등이 지정합니다.
      • 본딩 슬레이브 네트워크 인터페이스에는 해당 인터페이스가 본딩을 구성하는 슬레이브를 알리는 설정과 어떤 본딩 마스터를 따르는 지를 지정합니다.
  • 예시
    • Bonding Master
      • TYPE=Bond : 해당 인터페이스가 본딩 인터페이스임을 명시합니다.
      • BONDING_MASTER=yes : 해당 인터페이스가 본딩 인터페이스임을 설정합니다.
      • BONDING_OPTION
        • 본딩 옵션을 지정합니다. 여기서 지정된 본딩 옵션은 /etc/modprobe.d/bonding.conf에 설정된 기본 옵션보다 우선됩니다. 즉, 본딩 네트워크 인터페이스에 지정된 본딩 옵션이 있다면, 본딩 모듈에 기본 값으로 설정된 본딩 옵션을 무시하고 우선 적용됩니다.
# ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=1000"
  • 예시
    • Bonding Slave
      • TYPE=Ethernet : 이더넷 네트워크 인터페이스임을 설정합니다.
      • MASTER=bond0 : 해당 인터페이스의 본딩 마스터 네트워크 인터페이스를 설정합니다.
      • SLAVE=yes : 해당 인터페이스가 본딩 마스터 네트워크 인터페이스를 구성하는 슬레이브 인터페이스임을 설정합니다.
# ifcfg-ens192
DEVICE=ens192
TYPE=Ethernet
NAME=ens192
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes 

# ifcfg-ens224
DEVICE=ens224
TYPE=Ethernet
NAME=ens224
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

 

bondX

  • 위치 : /proc/net/bonding/bondX
  • 역할
    • 현재 시스템에서 활성화된 본딩 인터페이스의 실시간 동작 상태를 보여줍니다.
    • 본딩 상태 및 설정을 확인할 때 주로 확인합니다.
  • 예시
    • Bonding Mode : 본딩 동작 모드를 출력합니다. 현재 Active-Backup(mode=1)로 동작하는 것을 확인할 수 있습니다.
    • Primary/Currently Slave : 현재 모드에서 트래픽을 담당하고 있는 네트워크 인터페이스를 출력합니다.
    • MII Status : 해당 네트워크 인터페이스의 링크 상태를 출력합니다.
    • Speed : 해당 인터페이스의 네트워크 속도를 출력합니다.
    • Duplex : 해당 네트워크 인터페이스의 Duplex 설정을 출력합니다.
    • Link Failure Count : 해당 인터페이스의 링크 장애 발생 횟수를 출력합니다.
    • Permanent HW Addr : 해당 네트워크 인터페이스의 MAC 주소를 출력합니다.
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens192 (primary_reselect always)
Currently Active Slave: ens192
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens192
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:aa:bb:cc
Slave queue ID: 0

Slave Interface: ens224
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: 00:50:56:dd:ee:ff
Slave queue ID: 0

 

 

Bonding 생성 절차 및 파일 간 상호작용

 

네트워크 서비스(network 또는 NetworkManager)가 시작되거나, ifup bondX 명령이 실행되면 다음의 절차를 통해서 본딩이 생성됩니다.

이해를 돕기 위해, 해당 예시에서는 ens192, ens224 네트워크 인터페이스를 통해서 bond0 본딩을 생성하는 시나리오로 작성하겠습니다.

 

1. 커널 모듈 로드

  • 시스템이 bond0 인터페이스를 활성화하라는 요청을 받으면, 커널은 본딩 모듈이 필요한 것을 인지합니다.
  • 커널은 /etc/modprobe.d/bonding.conf 파일을 참조하여 본딩 모듈을 메모리에 로드합니다.
  • 파일에 정의된 options bonding 을 확인하여, 본딩의 기본 설정을 적용합니다.

 

2. 본딩 마스터 인터페이스 설정 읽기

  • 네트워크 서비스는 /etc/sysconfig/network-scripts/ifcfg-bond0 파일을 읽습니다.
  • 파일 내 IPADDR, GATEWAY, ONBOOT, BOOTPROTO 등 네트워크 관련 설정을 읽습니다. BONDING_OPTS 에 정의된 본딩 설정도 확인합니다. 해당 설정이 있다면, 1단계 본딩 모듈에서 읽은 본딩 설정을 덮어씁니다.

 

3. 가상 인터페이스 생성

  • 커널은 읽은 설정을 바탕으로 bond0 가상 네트워크 인터페이스를 생성하고, IP 주소 등 네트워크 정보를 할당합니다.

 

4. 슬레이브 네트워크 인터페이스 종속

  • 네트워크 서비스는 ifcfg-XXX 파일들을 확인해, MASTER=bond0, SLAVE=yes 로 설정된 네트워크 인터페이스들을 찾습니다.
  • 찾은 인터페이스들(ens192, ens224)를 bond0 마스터 인터페이스에 종속 시킵니다.
  • 종속된 슬레이브 인터페이스들은 독자적으로 동작하지 않고, bond0의 제어를 받습니다.

 

5. 본딩 상태 시스템 반영 및 확인

  • 본딩 정의 및 활성화가 성공적으로 이루어지면, 커널은 해당 본딩의 상태/정보를 /proc/net/bonding/bond0 파일에 실시간으로 기록합니다.
  • 해당 파일을 통해서 본딩이 의도한 대로 구성됐는지 확인 가능합니다.