가상머신의 DNS

가상머신의 상위 네트워크는 가상머신을 작동시키는 컴퓨터이다.
그렇기 때문에 가상머신이 인터넷 통신을 하는 과정에서 반드시 컴퓨터를 지나가게 되며, 컴퓨터를 라우터로 인식한다고 봐도 무방하다.
DNS를 이용하게 되면

  1. 가상머신 자체에 포함된 hosts 파일을 검토하고
  2. 컴퓨터에 포함된 hosts 파일을 검토한다. hosts 파일들에 포함되지 않은 DNS를 이용하게 되면 컴퓨터의 상위 네트워크에 접속해서 다시 검토하고 없으면 또 상위 네트워크로 올라가는 방식이다.

가상머신간의 DNS 사용

내 컴퓨터에 linux 가상머신과 MariaDB 가상머신이 작동되고 있을 때 서로간의 통신을 쉽게 처리하기 위해 DNS를 이용할 수 있을 것이고 이것을 처리하기 위해서는 컴퓨터의 hosts 파일을 수정하여 처리해줄 수 있다.

{window drive}:\Windows\System32\drivers\etc\hosts

해당 파일은 아래와 같은 내용을 포함하고 있다.

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

다음 내용은 VM’s Network 의 내용을 내재하고있다.

NAT 환경

NAT 환경은 기본적으로 VM(Virtual Machine)이 Guest의 포지션을 가지고 있고 가동시키는 컴퓨터가 Host의 포지션을 가지고 있는 상황에서 Guest는 Host로 접속이 불가하다. 더해서 VM들은 같은 IP를 할당받은 상태이기 때문에 서로간의 통신도 불가한 상태이다.

위의 내용대로라면 linux와 MariaDB VM들은 자신의 상위 네트워크인 Host를 따라 서로 통신하기 위해서 반드시 windows 컴퓨터의 hosts 파일을 검토해야 하지만 Guest에서 Host로의 통신이 불가능하기 때문에 내부 네트워크를 구동시키기 위한 환경으로 만족되지 않는다.

그렇지만 VM간의 통신이 절대적으로 불가능한 상태는 아니다.

Local한 DNS 환경을 구축하는 방식으로는 부합하지 않지만 Host를 DNS를 이용하여 외부에 올려두고 포트 포워딩을 통해서 서로간 통신을 해낼 수 있다.

Host의 DNS를 Globalhost로 지정하고 linux와 MariaDB VM이 windows와의 통신을 위해서 각 1234번, 8989번 포트를 열어두었다고 가정해보자.
그렇게 되면서 둘의 접속은 Globalhost:1234와 Globalhost:8989로 이루어질 수 있다.

NAT 방식의 네트워크 환경에서는 Guest간 통신을 위해 Host의 외부 IP를 이용하여 통신하게 된다면 VM간의 통신이 포트포워딩 정도로 받아들이는 것으로 이해하는 것이 쉽다.

NAT network 환경

NAT network 환경에서는 Guest인 VM이 Host로의 통신이 가능하게 된다. 심지어 VM들간의 서로 다른 IP를 할당받게 되면서 양방향 통신도 가능해져버린 상황이 된다. VM들의 hosts파일만 수정해주면 간단히 Local DNS를 구현할 수 있다.

다음과 같은 IP를 할당받았다고 가정한다.

10.0.2.4 (linux)
10.0.2.12 (MariaDB)

linux의 “/etc/hosts”를 열어

10.0.2.12 localDB

를 추가해주고

MariaDB가 설치된 Unix의 “/etc/hosts”를 열어

10.0.2.12 localLinux

를 추가해주면 세팅은 완료된다.

ping localDB
ping localLinux

해주면 정상적으로 핑이 요청되고 받아질 것이다.

하지만 이러한 방식은 유지와 보수방면에서 좋지 못하다.

만약 VM이 여러개 추가되게 된다면 추가되는 VM마다 “/etc/hosts” 파일을 열어서 서로간의 VM 주소들에 대해 별명을 칭해 주어야 하기에 굉장히 매끄럽지 못하다.

그렇기에 DNS Server를 운영하는 방법도 있다.

10.0.2.4 (linux)
10.0.2.12 (MariaDB)
10.0.2.15 (DNS-Server)

를 추가해 주면서 내부 네트워크를 위한 DNS Server를 구축시켜 VM들이 통신할때 DNS Server로 이용하게 하는 방법이 있다.
해당 DNS Server 구축은 구현 post에서 다소 늦어질 수 있습니다.

Bridge network 환경

Bridge 방식의 네트워크에서는 어떤 모습일까?
해당 통신 방식을 사용하게 되면 VM들은 각각의 IP주소를 windows 컴퓨터의 상위 라우터로부터 할당받게 된다.
그렇게 되면서 VM들은 인터넷 통신을 하기 위해 더이상 windwos 컴퓨터의 hosts파일을 검토하지 않게 될 것이고 상위 네트워크 라우터의 hosts 파일을 찾아 접근하고 DNS를 이용하게 될 것이다.

만약 라우터의 hosts파일에 접근하게 되었고 각 VM들의 주소가

192.168.0.1 (기본게이트웨이)
192.168.0.2 (windows)
192.168.0.3 (linux)
192.168.0.4 (MariaDB)

로 할당받게 되었다면, VM들은 기본 게이트웨이를 통해서 라우터로 접속하게 될 것이며 DNS hosts파일을 검토하여 서로간 통신할 것이다.

192.168.0.3     localOS
192.168.0.4     localDB

와 같이 라우터의 hosts 파일에 DNS에 대한 주소가 저장되어 있다면 linux에서 MariaDB로 통신하기위해서는 localDB의 DNS를 이용하면 되고 반대로의 상황이라면 localOS를 사용하면 된다.

하지만, 저자의 네트워크 환경은 iptime을 사용중이나 iptime은 내부 DNS를 위한 hosts 파일을 지원하지 않기(2023-11-01기준) 때문에 DNS Server를 구축하여 구현하는 방법을 생각해봤다.

192.168.0.1 (기본게이트웨이)
192.168.0.2 (windows)
192.168.0.3 (linux)
192.168.0.4 (MariaDB)
192.168.0.5 (DNS-Server)

로 구성한다음 linux와 MariaDB의 DNS Server를 192.168.0.5를 사용하게 만들어 준다면 router의 hosts 파일을 대신한 local DNS 구축을 해낼 수 있다.

다음 구현 방법에 대한 내용 VM’s DNS(2).

Tool

CentOS7-x86-64-2009.iso
Oracle VM VirtualBox 7.0.12-r159484