안녕하세요, 씨앤텍 시스템즈 황순호 연구원입니다.
이번 포스트는 VirtualBox에서 서로 다른 네트워크의 게스트 간 통신이 가능하도록 구현하는 방법에 대해 작성하겠습니다.
VirtualBox에서 제공하는 네트워크 설정에서는 게스트끼리 같은 네트워크로 묶여 통신이 직접 이루어집니다.
따라서 라우터를 경유하여 통신이 이루어지는 네트워크를 구현하기 위해서는 추가적인 설정이 필요합니다.
환경 구성을 위해 필요한 준비물은 다음과 같습니다.
1. VirtualBox
2. VirtualBox에 설치 가능한 CentOS 7 이미지
구현하고자 하는 네트워크 구성은 다음과 같습니다.
1. 가상 환경 설정
가상 환경이므로 실제로 그림과 같은 구성은 아니나 그림처럼 Guest1이 Router를 경유하여 Guest2와 통신할 수 있도록 설정해보겠습니다.
Guest1 네트워크 설정 -> 어댑터 1 -> 네트워크 어댑터 사용하기 체크 -> 내부 네트워크 선택
Guest2 네트워크 설정 -> 어댑터 1 -> 네트워크 어댑터 사용하기 체크 -> 어댑터에 브리지 선택
Router 네트워크 설정 -> 어댑터 1 -> 네트워크 어댑터 사용하기 체크 -> 어댑터에 브리지 선택 -> 어댑터 2 -> 내부 네트워크 선택
2. CentOS 7 네트워크 설정
이제 게스트 내에서 네트워크 설정을 변경해 보도록 하겠습니다.
먼저 Guest1에서 현재 사용하고 있는 네트워크 인터페이스를 확인합니다.
# ip addr
Guest1 환경의 네트워크 인터페이스명은 enp0s3 입니다. 인터페이스명이 다른 경우 이하 명령어나 설정 부분에서 enp0s3 대신 해당 이름을 사용합니다.
Guest1 네트워크를 설정하겠습니다.
# vi /etc/sysconfig/network-scripts/ifcfg-[인터페이스명]
CentOS7을 설치만 한 상태라면 네트워크 설정이 다음과 같이 되어있습니다.
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="91af51db-7cf0-4069-9433-77d356b31bca"
DEVICE="enp0s3"
ONBOOT="no"
설정 파일 내용 중 다음 부분을 변경합니다
BOOTPROTO=”none”
ONBOOT=”yes”
변경 후 아래에 다음 내용을 추가합니다.
IPADDR="10.0.2.2"
NETMASK="255.255.255.0"
GATEWAY="10.0.2.1"
변경 후 네트워크 재시작을 합니다.
$ systemctl restart network
Guest2를 설정하겠습니다.
Guest2는 어댑터에 브리지로 설정되어 있으므로 네트워크 설정 파일에서
ONBOOT=”yes”
해당 설정만 no에서 yes로 변경한 뒤 네트워크 재시작합니다.
$ systemctl restart network
Router를 설정하겠습니다
Router의 경우 어댑터를 2개 사용하고 있기 때문에 인터페이스도 2개가 확인되어야 합니다.
$ ip addr
어댑터 설정 순서대로 enp0s3가 어댑터 1, enp0s8이 어댑터 2의 네트워크 인터페이스입니다.
어댑터1 네트워크 설정을 하겠습니다.
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
Guest2처럼 ONBOOT 부분만 no에서 yes로 변경합니다.
ONBOOT=”yes”
어댑터2 네트워크 설정을 하겠습니다.
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s8"
UUID="91af51db-7cf0-4069-9433-77d356b31bca"
DEVICE="enp0s8"
ONBOOT="yes"
IPADDR="10.0.2.1"
NETMASK="255.255.255.0"
내용을 수정한 뒤 네트워크 재시작을 합니다.
# systemctl restart network
Router가 Guest 1으로부터 받는 패킷을 Guest2로 보내도록 설정하겠습니다.
다음 명령어를 입력합니다.
# vi /etc/sysctl.conf
다음 내용을 추가합니다.
net.ipv4.ip_forward = 1
Router를 MASQUERADE 모드로 변경하고 패킷을 전달하도록 다음 명령어를 입력합니다.
# iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
# iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
# iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
※ iptables 명령어로 설정된 부분은 CentOS 재부팅 후 사라집니다.
3. 네트워크 설정 확인
이제 Router는 Guest1의 패킷을 enp0s3 인터페이스로 보내 Guest2로 전달할 수 있도록 설정되었습니다.
설정이 잘 되었는지 Guest1에서 확인해 보도록 합니다.
# traceroute [Guest2 IP]
Guest1의 패킷이 10.0.2.1(Router)을 지나 192.168.1.95(Guest2)로 전달되는 모습을 확인했습니다.
traceroute가 설치되지 않은 경우 간단하게 ping 명령어로 확인할 수 있습니다.
설정상 편의를 위해 내부 네트워크에만 게이트웨이 주소를 설정하였으며 ip를 자동으로 부여받는 어댑터에 브리지를 사용하였습니다. Guest2에서도 Guest1으로 연결할 수 있도록 동작하려면 어댑터에 브리지 대신 내부 네트워크를 생성하여 동일하게 Router와 게이트웨이 설정을 하시면 됩니다.
감사합니다.
'Web Programming > Linux CentOS' 카테고리의 다른 글
[CentOS 7] Python3 설치 및 버전 변경과 Tensorflow, Keras 설치 (3) | 2020.12.24 |
---|