이미 바인딩 되어있는 DNS VIP를 교체할 때 테스트하는 방법

kindof

·

2023. 6. 25. 15:56

0. 문제

이번 글에서는 DNS VIP를 교체하는 시나리오에서 신규 VIP를 테스트하는 방법에 대해 소개하려고 합니다.

 

DNS VIP(Virtual IP)는 DNS에서 사용되는 가상 IP 주소를 의미합니다. 이러한 VIP는 DNS에 바인딩되어 실질적인 '단일 창구 역할'을 하며 로드 밸런서같은 역할을 할 수 있는데요.

 

아래와 같이 특정 도메인에 대한 트래픽이 여러 서버로 리디렉션되는 상황을 고려할 때, VIP는 중요한 개념이 됩니다.

 

DNS VIP

그런데 만약 신규 서버를 발급받고, 신규 서버들을 바인딩하는 새로운 VIP를 기존 DNS에 연결하려면 어떻게 해야할까요? 

 

신규 VIP

물론 이 상황에서 중요한 가정은 기존 서버들에 들어오던 요청을 그대로 받으면서 테스트를 진행해야 한다는 것입니다.

 

다시 말해, DNS에 신규 VIP를 무작정 바인딩시켜서 확인할 수 없다는 것이죠.

 

1. 로컬에서 신규 VIP 테스트하기

가장 먼저, 각 서버들에서는 서버 내에서 테스트할 수 있는 여러가지 내용들을 충실히 테스트해야 합니다.

 

예를 들어, 특정 서버가 가지는 IP에 대해 몇 가지 API를 호출해보거나 ACL 권한 등을 가지고 있는지 외부 API를 호출해보는 것들이 있을 수 있습니다.

 

다음으로는 신규 VIP가 제대로 터널링되고 있는지를 확인해야 하는데요. 먼저 아래 명령어를 통해 터널 인터페이스가 올라와있는지 확인해야 합니다.

$ sudo /sbin/ifconfig

해당 명령어를 수행했을 때 tunl0:0과 같이 IP 패킷을 다른 네트워크로 터널링하기 위한 설정이 제대로 되어 있는지 확인합니다.

 

만약 아직 터널 인터페이스가 올라와있지 않다면 VIP를 통한 요청이 해당 서버로 리디렉션되지 않을 수 있으므로 터널 인터페이스를 올리는 과정을 선행해야 합니다.

 

다음으로, 로컬 PC에서 기존 DNS가 바라보는 VIP를 우회해서 테스트합니다. 이 때는 로컬에서 /etc/hosts 파일의 수정을 통해 이를 테스트해볼 수 있습니다.

 

/etc/hosts 파일은 UNIX 기반 OS에서 사용되는 로컬 호스트 파일입니다.

 ~  cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost

...

이 파일은 IP 주소와 호스트 이름의 매핑을 정의하여 도메인 이름을 IP 주소로 해석하는 데 사용되는데요. 이를 조금 다르게 생각하면, /etc/hosts 파일의 조작을 통해 시스템의 로컬 DNS 조회를 우회할 수 있다는 뜻이 됩니다.

 

먼저, 기존에 사용하고 있는 도메인 주소(example.com)에 대해 특정 요청을 보내게 되면 해당 요청은 기존에 바인딩되어 있는 VIP 주소(xx.xxx.xxx.xx)로 향하게 됩니다.

 

하지만, 아래와 같이 /etc/hosts 파일을 수정하게 되면 기존 도메인 주소(example.com)이 마치 신규 VIP를 바라보고 있는 것처럼 로컬의 환경을 구성할 수 있죠.

 ~  cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost

# This is for testing new DNS VIP Mapping
10.123.12.23	example.com
...

 신규 VIP의 주소가 10.123.12.23 이라고 가정하고 작성한 내용입니다.

 

그러면 example.com에 대해 로컬에서 어떤 요청을 보내도 신규 VIP로 터널링되고 새로운 서버들에 대한 L4 동작을 테스트할 수 있게 됩니다.

 

이를 간접적으로 보기 위해 아래와 같이 www.naver.com에 대한 DNS IP 매핑을 수정해보겠습니다.

 ~  cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost

# This is for testing new DNS VIP Mapping
127.0.0.1	www.naver.com
...

www.naver.com 도메인은 이제 로컬 호스트를 바라보고 있는데요. 테스트용 Springboot 프로젝트를 8080 포트로 실행시키고 요청을 보내보겠습니다.

@Tag(name = "헬스체커 API", description = "Health Check Controller")
@RestController
@RequestMapping("/api/health-check")
public class HealthChecker {

    @GetMapping()
    public String healthcheck() {
        return "OK";
    }
}

테스트

테스트 결과를 보면, www.naver.com 에 대한 요청이 실제로는 제가 실행한 Springboot 애플리케이션으로 향했고, OK 응답을 받은 것을 확인할 수 있습니다.