리눅스 중복 IP 주소 확인을 알아보겠습니다. 네트워크에서 중복된 IP 주소를 감지하려면 다음과 같은 해결책이 있습니다.

수동으로 ARP를 사용하여 중복 IP 주소 감지

  • arping 명령을 사용하여 중복 주소 감지를 활성화합니다. 다음 예제에서는 중복이 의심되는 주소 및 해당 주소가 있는 인터페이스로 대체합니다.
# arping -D -w 5 -I ethX IP.ADDRESS.TO.TEST
# echo $?

0을 보고하면 IP 주소가 중복되지 않았음을 나타냅니다. 1을 보고하면 IP 주소가 중복되었음을 나타냅니다.

# arping -D -w 5 -I eth0 192.168.5.2
ARPING 192.168.5.2 from 0.0.0.0 eth0
Unicast reply from 192.168.5.2 [52:54:00:00:05:02] for 192.168.5.2 [52:54:00:00:05:02] 3.741ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

# echo $?
1
  • 명령어 실행 후 반환 값을 확인합니다.
    • 0: 중복 IP 없음
    • 1: 중복 IP 있음

NetworkManager를 사용한 RHEL 7/8/9에서 자동으로 ARP 감지

NetworkManager의 ipv4.dad-timeout 옵션을 사용하여 주소 충돌을 감지합니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
# nmcli connection modify enp7s0 ipv4.dad-timeout 'VALUE' 
# nmcli connection show wan | egrep dad
ipv4.dad-timeout:                       -1 (default)

# nmcli connection modify wan ipv4.dad-timeout 2000

# nmcli connection show wan | egrep dad
ipv4.dad-timeout:                       2000

# nmcli connection modify enp7s0 ipv4.dad-timeout 'VALUE' 'VALUE'는 밀리초 단위의 타임아웃을 나타냅니다. 0은 중복 주소 감지를 수행하지 않음을 의미하며, -1은 기본 값입니다.

예를 들어, ipv4.dad-timeout 값을 3000으로 설정하면 NetworkManager는 다른 장치가 동일한 IP 주소를 사용하고 있는지 3초 동안 확인합니다.

네트워크 장치가 많거나 IP 주소 충돌 가능성이 높은 경우 높은 값을 사용하는 것이 좋지만 너무 높게 설정하면 네트워크 연결 설정 시간이 느려질 수 있습니다.

ipv4.dad-timeout 옵션은 네트워크에서 중복 IP 주소가 있는지 확인합니다. 주소 충돌이 감지되면 활성화가 실패하고 로그 메시지가 등록됩니다.

ipv4.dad-timeout 작동 방식

  1. 장치가 네트워크에 연결하려고 할 때 네트워크 인터페이스 카드(NIC)는 해당 IP 주소를 사용하고 있는 다른 장치가 있는지 확인하기 위해 ARP(주소 해결 프로토콜) 요청을 보냅니다.
  2. 다른 장치가 동일한 IP 주소를 사용하고 있으면 ARP 요청에 응답합니다.
  3. 장치는 응답을 받으면 IP 주소 충돌을 감지하고 네트워크 연결 활성화를 실패합니다.
  4. 또한 시스템 로그에 충돌에 대한 메시지를 기록합니다.

ipv4.dad-timeout 옵션 사용

ipv4.dad-timeout 옵션은 NetworkManager 구성 파일에서 설정할 수 있습니다. 이 옵션은 시간 초과 값(밀리초)을 지정하며 이는 장치가 ARP 요청에 대한 응답을 기다리는 시간입니다.

예를 들어 다음과 같이 설정하면 장치는 3초 동안 ARP 요청에 대한 응답을 기다린 후 시간 초과가 발생합니다.

[connection]
ipv4.dad-timeout=3000

# nmcli connection add type ethernet ifname enp7s0 ipv6.method disabled ipv4.method manual ipv4.addresses 192.168.122.10/24 ipv4.dad-timeout 2000 con-name enp7s0
Connection 'enp7s0' (06132739-a32c-4fd9-8c2a-9f0ee4bfad1f) successfully added.

# nmcli connection show
NAME    UUID                                  TYPE      DEVICE 
enp1s0  f1bee232-0864-4982-b434-4909a4f88f20  ethernet  enp1s0 
enp7s0  06132739-a32c-4fd9-8c2a-9f0ee4bfad1f  ethernet  --

# journalctl -u NetworkManager.service -r | head -5
-- Logs begin at Mon 2022-11-28 08:38:39 CET, end at Mon 2022-11-28 10:54:36 CET. --
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <info>  [1669629276.3853] device (enp7s0): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <warn>  [1669629276.3848] device (enp7s0): Activation: failed for connection 'enp7s0'
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <info>  [1669629276.3837] device (enp7s0): state change: ip-config -> failed (reason 'ip-config-unavailable', sys-iface-state: 'managed')
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <info>  [1669629276.3834] l3cfg[af874031f7d0109d,ifindex=3]: IPv4 address 192.168.122.10 is used on network connected to interface 3 (enp7s0) from host 52:54:00:7B:FF:CF

# cat /var/log/messages | egrep -i '192.168.122.10' | tail -2
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <info>  [1669629276.3350] l3cfg[af874031f7d0109d,ifindex=3]: IPv4 address 192.168.122.10 is used on network connected to interface 3 (enp7s0) from host 52:54:00:7B:FF:CF
Nov 28 10:54:36 rhel8_VM2 NetworkManager[919]: <info>  [1669629276.3834] l3cfg[af874031f7d0109d,ifindex=3]: IPv4 address 192.168.122.10 is used on network connected to interface 3 (enp7s0) from host 52:54:00:7B:FF:CF

network service로 일회성 자동 ARP 감지

다음은 /etc/sysconfig/network-scripts/ifup-eth에서 제공된 스크립트을 사용하여 네트워크 서비스를 다시 시작하거나 특정 네트워크 인터페이스를 사용할 때 중복 주소를 감지하는 스크립트입니다.

if ! LC_ALL=C ip addr ls ${REALDEVICE} | LC_ALL=C grep -q "${ipaddr[$idx]}/${prefix[$idx]}" ; then
  [ "${REALDEVICE}" != "lo" ]
  if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
    echo $"Error, some other host already uses address ${ipaddr[$idx]}."
    exit 1
  fi
fi

여기에서 각 부분은 다음과 같습니다:

  1. if ! LC_ALL=C ip addr ls ${REALDEVICE} | LC_ALL=C grep -q "${ipaddr[$idx]}/${prefix[$idx]}" ; then: 이 부분은 ${ipaddr[$idx]}/${prefix[$idx]}로 지정된 IP 주소가 이미 네트워크 인터페이스 ${REALDEVICE}에 할당되어 있는지를 확인합니다. 할당되지 않았다면 스크립트는 다음 조건으로 이동합니다.
  2. [ "${REALDEVICE}" != "lo" ]: 이 조건은 네트워크 인터페이스가 루프백 인터페이스 (lo)가 아닌지 확인합니다. 네트워크 인터페이스가 루프백 인터페이스가 아니라면 스크립트는 다음 조건으로 이동합니다.
  3. if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then: 이 부분은 arping을 사용하여 지정된 IP 주소 (${ipaddr[$idx]})로 네트워크 인터페이스 ${REALDEVICE}에서 ARP 요청을 보냅니다. arping이 중복 주소를 감지하면 (지정된 시간과 재시도 제한 내에서 응답을 받지 못함), 오류 메시지를 출력하고 오류 코드와 함께 스크립트를 종료합니다.
  4. 조건 중 어느 하나라도 충족되지 않아 중복 주소가 감지되면 스크립트는 오류 메시지를 출력합니다: Error, some other host already uses address ${ipaddr[$idx]}.
  5. exit 1: 이 줄은 중복 주소가 감지되면 스크립트를 오류 코드 (1)와 함께 종료합니다.

요약하면 이 스크립트는 지정된 IP 주소가 이미 네트워크 인터페이스에 할당되었는지 확인하고, 네트워크 인터페이스가 루프백 인터페이스가 아닌지 확인하며, 그런 다음 arping을 사용하여 중복 주소 감지를 수행합니다. 중복 주소가 감지되면 오류 메시지를 출력하고 오류 코드와 함께 종료합니다.

  1. service network restart 또는 ifup ethX를 실행할 때, /etc/sysconfig/network-scripts/ifup-eth 스크립트가 arping을 사용하여 중복 주소를 감지합니다. # cat /etc/sysconfig/network-scripts/ifup-eth 중복 주소가 감지되면 “Error, some other host already uses address” 메시지가 출력됩니다.

arpwatch 서비스를 사용한 자동 ARP 감지

자동으로 arpwatch 서비스를 사용하는 부분은 다음과 같습니다. arpwatch 서비스는 로컬 시스템의 ARP 테이블을 모니터하고 주소 “flip flop”이 감지될 때 메시지를 기록할 수 있습니다

# yum install arpwatch
# service arpwatch start
# chkconfig arpwatch on

로컬 시스템의 ARP 테이블을 모니터하고 주소 “flip flop”이 감지될 때 메시지를 기록할 수 있는 arpwatch 서비스를 설치하고 시작합니다.

/var/log/messages 파일에서 “flip flop”에 관한 메시지가 있는지 확인합니다.

Nov  1 15:42:42 hostname arpwatch: new station 10.00.100.108 01:13:gh:ef:cd:ab   
Nov  1 15:43:32 hostname arpwatch: changed ethernet address 10.00.100.108 01:13:gh:ef:cd:ab (01:13:gh:ef:cd:ab)   
Nov  1 15:43:59 hostname arpwatch: flip flop 10.00.100.108 01:13:gh:ef:cd:ab (01:13:gh:ef:cd:ac)  

위의 메시지에서 이 기계는 먼저 ARP 매핑 정보를 기록합니다. 10.00.100.108 주소에서 MAC 주소 01:13:gh:ef:cd:ab로 매핑됩니다.

그런 다음 arpwatch 데몬은 10.00.100.108에 바인딩된 MAC 주소가 01:13:gh:ef:cd:ab에서 01:13:gh:ef:cd:ac로 변경되었음을 감지합니다.

# yum install arpwatch
# service arpwatch start
# chkconfig arpwatch on
  • 로그 메시지 /var/log/messages 파일에서 “flip flop”에 관한 메시지가 있는지 확인합니다.

IPwatchD 설치 및 사용법

  1. ipwatchd 서비스는 libpcap을 사용하여 모든 ARP 트래픽을 스니핑하고 중복 IP 주소를 감지합니다. 이는 Red Hat에서 제공하거나 지원하지 않는 제3의 도구로 여기에서 더 자세한 정보를 확인할 수 있습니다.

IPwatchD는 중복 IP 주소 감지를 위한 도구로, 네트워크에서 ARP 트래픽을 모니터링하여 중복 IP 주소의 충돌을 감지합니다. 다음은 IPwatchD를 사용하는 간단한 예제입니다.

참고: IPwatchD는 Red Hat에서 공식적으로 제공하는 도구가 아니며, 지원되지 않는 EPEL 저장소에서 사용 가능합니다. 이 도구에 대한 자세한 내용은 http://ipwatchd.sourceforge.net/에서 확인할 수 있습니다.

1. IPwatchD 설치

먼저 IPwatchD를 설치해야 합니다. 이를 위해서는 EPEL 저장소를 시스템에 추가한 후 IPwatchD를 설치할 수 있습니다.

# EPEL 저장소 설치
sudo yum install epel-release

# IPwatchD 설치
sudo yum install ipwatchd

2. IPwatchD 서비스 시작

IPwatchD 서비스를 시작합니다.

sudo service ipwatchd start

또는

sudo systemctl start ipwatchd

3. IPwatchD 로그 확인

IPwatchD는 주로 /var/log/ipwatchd.log 파일에 로그를 기록합니다. 로그를 확인하여 중복 IP 주소 충돌에 대한 정보를 파악할 수 있습니다.

sudo tail -f /var/log/ipwatchd.log

4. IPwatchD 구성 파일

IPwatchD의 구성 파일은 /etc/ipwatchd.conf에 위치합니다. 필요에 따라 이 파일을 수정하여 IPwatchD의 동작을 조절할 수 있습니다. 기본 설정에서는 대부분의 사용 사례에 적합하도록 구성되어 있습니다.

주의사항

  • IPwatchD는 Red Hat에서 공식 지원하지 않는 도구이므로 사용 시 주의가 필요합니다.
  • 설정 파일을 변경한 경우에는 변경 사항을 적용하기 위해 IPwatchD를 재시작해야 할 수 있습니다.
  • IPwatchD의 동작 방식과 더 많은 구체적인 설정에 대해서는 http://ipwatchd.sourceforge.net/에서 제공하는 공식 문서를 참고하세요.

이제 IPwatchD를 사용하여 중복 IP 주소를 모니터링하고 감지할 수 있습니다.

방화벽 및 네트워크 장비 확인

  • arping을 사용하여 서버에서 중복 IP를 찾을 수 없다면, 라우터, 방화벽, 스위치 등의 네트워크 장비에서 Proxy ARP가 활성화되어 있는지 확인하십시오.

이러한 단계를 따라 중복된 IP 주소를 감지하고 해결할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

아마존 해외 구매: 서버, 네트워크, 노트북 구매

Amazon Best Sellers Servers

Amazon Best Sellers Networking

Amazon Best Sellers Laptops

위로 스크롤