리눅스 중복 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 작동 방식
- 장치가 네트워크에 연결하려고 할 때 네트워크 인터페이스 카드(NIC)는 해당 IP 주소를 사용하고 있는 다른 장치가 있는지 확인하기 위해 ARP(주소 해결 프로토콜) 요청을 보냅니다.
- 다른 장치가 동일한 IP 주소를 사용하고 있으면 ARP 요청에 응답합니다.
- 장치는 응답을 받으면 IP 주소 충돌을 감지하고 네트워크 연결 활성화를 실패합니다.
- 또한 시스템 로그에 충돌에 대한 메시지를 기록합니다.
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
여기에서 각 부분은 다음과 같습니다:
if ! LC_ALL=C ip addr ls ${REALDEVICE} | LC_ALL=C grep -q "${ipaddr[$idx]}/${prefix[$idx]}" ; then
: 이 부분은${ipaddr[$idx]}/${prefix[$idx]}
로 지정된 IP 주소가 이미 네트워크 인터페이스${REALDEVICE}
에 할당되어 있는지를 확인합니다. 할당되지 않았다면 스크립트는 다음 조건으로 이동합니다.[ "${REALDEVICE}" != "lo" ]
: 이 조건은 네트워크 인터페이스가 루프백 인터페이스 (lo
)가 아닌지 확인합니다. 네트워크 인터페이스가 루프백 인터페이스가 아니라면 스크립트는 다음 조건으로 이동합니다.if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
: 이 부분은arping
을 사용하여 지정된 IP 주소 (${ipaddr[$idx]}
)로 네트워크 인터페이스${REALDEVICE}
에서 ARP 요청을 보냅니다.arping
이 중복 주소를 감지하면 (지정된 시간과 재시도 제한 내에서 응답을 받지 못함), 오류 메시지를 출력하고 오류 코드와 함께 스크립트를 종료합니다.- 조건 중 어느 하나라도 충족되지 않아 중복 주소가 감지되면 스크립트는 오류 메시지를 출력합니다:
Error, some other host already uses address ${ipaddr[$idx]}.
exit 1
: 이 줄은 중복 주소가 감지되면 스크립트를 오류 코드 (1
)와 함께 종료합니다.
요약하면 이 스크립트는 지정된 IP 주소가 이미 네트워크 인터페이스에 할당되었는지 확인하고, 네트워크 인터페이스가 루프백 인터페이스가 아닌지 확인하며, 그런 다음 arping
을 사용하여 중복 주소 감지를 수행합니다. 중복 주소가 감지되면 오류 메시지를 출력하고 오류 코드와 함께 종료합니다.
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 설치 및 사용법
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 주소를 감지하고 해결할 수 있습니다.