RHEL6에서 리눅스 KVM 환경을 구축하면 기본으로 ‘default’라는 이름의 가상 네트워크가 준비된다. 여기서는 DHCP 실험을 위해 ‘private’라는 가상 네트워크를 추가했다. DHCP 클라이언트와 DHCP 서버의 가상 머신은 각각 ‘client01’과 ‘dhcp01’이란 이름으로 만들고, ‘default’와 ‘private’ 양쪽 가상 네트워크에 접속한다. 호스트 리눅스에서 가상 머신에 로그인할때 default 쪽 네트워크 사용한다.
우선 물리 서버에 RHEL6을 설치하고 리눅스 KVM 환경을 준비한다. 이어서 가상 네트워크 ‘private’를 추가한다. 아래 코드 파일 ‘private.xml’을 현재 디렉터리에 만든다.
<network>
<name>private</name>
<bridge name='virbr1' />
</network>
다음 명령어를 실행한다.
# virsh net-define private.xml
# virsh net-autostart private
# virsh net-start private
다음은 읾반적인 순서대로 가상 머신 ‘client01’과 ‘dhcp01’을 만들고, 게스트 OS로 RHEL6.5를 ‘Basic Server’ 구성으로 설치한다. 이 단계에서 NIC는 ‘eth0’을 만들어 가상 네트워크 ‘default’에 접속해 둔다. 마지막으로 각 가상 머신에 가상 NIC ‘eth1’을 추가해서 가상 네트워크 ‘private’에 접속한다. 호스트 리눅스의 데스크톱에서 ‘가상 머신 메니저’를 실행해 가상 머신의 구성 화면을 표시한 후 왼쪽 아래 [하드웨어 추가] 버튼을 누른다. 추가할 장치로써 ‘Network’를 선택한 후 ‘호스트 장치’와 ‘장치 모델’을 선택한 후 [완료]를 누른다. 이 과정을 ‘client01’과 ‘dhcp01’에서 각각 해준다.
그럼 가상 머신 ‘dhcp01’에 로그인해서 DHCP 서버를 구성하겠다. 우선, 가상 NIC eth1에는 고정 ip 주소 192.168.1.2를 할당한다. 설정 파일 /etc/sysconfig/network-scripts/ifcfg-cth1 을 아래 코드처럼 작성한다.
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETWORK=255.255.255.0
NM_CONTROLLED=no
ONBOOT=yes
다음 명령어로 인터페이스를 활성한다.
# ifup eth1
이어서 iptables에서 DHCP 클라이언트로부터 메시지 수신을 허가한다. 설정 파일 /etc/sysconfig/iptables에 아래처럼 한 줄을 추가한다.
(앞부분 생략)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 67 -j ACCEPT <- 이 코드를 추가
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWATD -j REJECT --reject-with icmp-host-prohibited
COMMIT
다음 명령어로 변경된 설정을 반영한다.
# service iptables restart
DHCP 서버는 UDP 67번 포트로 메시지를 수신하므로, 이 포트 앞으로 오는 패킷 수신을 허가했다.