메뉴

문서정보

가상 IP 할당하기

목차

소개

클라우드 인프라를 구축하려다 보면, 가상의 IP를 할당해야 할 필요가 자주 생긴다. 이번 글에서 가상의 IP를 할당하는 방법을 연구해 보려고 한다. 기본 환경은 다음과 같다.

가상 IP

테스트 방안

Virtualbox를 이용해서 가상 IP를 설정하기 위한 여러 방법들을 테스트하기로 했다. Guest 운영체제에 가상 IP 설정을 한 다음에 호스트 운영체제 혹은 다른 게스트 운영체제에서 가상 IP로 네트워킹이 잘 되는지를 확인하는 방식이다.

VIP

VIP는 하나의 호스트에 여러 개의 IP주소를 할당하는 기술이다. 이 기술을 이용하면, 하나의 네트워크 인터페이스에 여러 개의 IP 주소를 줄 수 있다. 바깥에서는 마치 하나 이상의 네트워크 인터페이스가 있는 것으로 보일 것이다.

VIP는 흔히 HA나 로드밸런싱을 위해서 널리 사용된다.

HA에서의 VIP 사용

웹 서비스를 예로 들어보자. 중요 서비스의 경우에는 하나의 웹 서버에 문제가 생기더라도 웹 서비스에는 문제가 없어야 한다. 그래서 보통은 두대의 호스트를 Active - Standby 형태의 HA를 구현한다. 이 두 호스트는 heatbeat 소프트웨어를 이용해서 서로의 상태를 확인한다. 그러다가 Active 호스트에 어떤 문제가 생기면 standby가 문제가 생긴 호스트를 대신해서 Active 호스트가 되고, 서비스를 계속한다.

이런 HA구성에서 원할한 웹 서비스를 위해서는 두 호스트가 동일한 IP를 가지고 있을 필요가 있다. 이때 사용하는게 VIP로 아래와 같은 구성을 가진다.

VIP 설정

VIP 테스트를 위해서 두 개의 게스트 운영체제를 준비했다. 네트워크 환경은 다음과 같다. Guest01에 다음과 같이 VIP 설정을 했다.
# ifconfig eth0:1 192.168.56.100 netmask 255.255.255.0
# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:7d:10:15  
          inet addr:192.168.56.254  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe7d:1015/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:65 errors:0 dropped:0 overruns:0 frame:0
          TX packets:65 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8590 (8.5 KB)  TX bytes:8090 (8.0 KB)

eth0:1    Link encap:Ethernet  HWaddr 08:00:27:7d:10:15  
          inet addr:192.168.56.100  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
VIP가 제대로 설정됐는지 호스트 운영체제에서 ping(:12)를 이용해서 테스트 했다.
# ping 192.168.56.100
PING 192.168.56.100 (192.168.56.100) 56(84) bytes of data.
64 bytes from 192.168.56.100: icmp_req=1 ttl=64 time=0.454 ms
64 bytes from 192.168.56.100: icmp_req=2 ttl=64 time=0.465 ms

arp 테이블 정보를 확인해 봤다.
$ arp -na
? (192.168.56.254) at 08:00:27:7d:10:15 [ether] on vboxnet0
? (192.168.56.100) at 08:00:27:7d:10:15 [ether] on vboxnet0
MAC 주소 08:00:27:7d:10:15에 두 개의 IP가 맵핑돼 있는 걸 확인할 수 있다.

마지막으로 tcpdump를 이용해서, 패킷 수준에서의 데이터 전달을 확인했다.
# tcpdump icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:28:26.771493 IP 192.168.56.1 > 192.168.56.100: ICMP echo request, id 4458, seq 1, length 64
11:28:26.771539 IP 192.168.56.100 > 192.168.56.1: ICMP echo reply, id 4458, seq 1, length 64
11:28:27.769532 IP 192.168.56.1 > 192.168.56.100: ICMP echo request, id 4458, seq 2, length 64
11:28:27.769579 IP 192.168.56.100 > 192.168.56.1: ICMP echo reply, id 4458, seq 2, length 64
11:28:28.767470 IP 192.168.56.1 > 192.168.56.100: ICMP echo request, id 4458, seq 3, length 64

로드 밸런서에서의 VIP 사용

로드 밸런서는 트래픽을 여러 컴퓨터로 분산하는 컴퓨터 시스템이다. 트래픽이 분산되는 컴퓨터, 예컨데 웹서버들은 사설 IP로 구성되는 경우가 많다. 로드 밸런서는 퍼블릭 네트워크와 사설 네트워크의 경계에 있는데, 퍼블릭 네트워크와 통신할 수 있는 VIP를 가진다.

클라이언트가 VIP로 접근하면, 로드 밸런서는 지정한 알고리즘에 따라서 트래픽을 분산한다.

proxy arp를 이용한 가상 IP 생성

ARP는 Address Resolution Protocol로 MAC 주소와 IP 주소를 맵핑하는 프로토콜이다. ARP에 대한 자세한 내용은 GNS3로 알아보는 L2문서를 참고하기 바란다.

proxy arp는 ARP 요청이 왔을 때 대신 응답을 하는 기술이다. L2에서 ARP 요청을 브로드캐스팅 하면, 요청을 받은 운영체제(:12)는 네트워크 인터페이스의 MAC 주소와 IP 주소를 반환한다. 보통은 하나의 MAC 주소에 대해서 하나의 인터넷 주소 정보만을 응답하는데, proxy arp를 이용하면 두개 이상의 인터넷 주소를 응답할 수 있다.

이렇게 하면 외부에서는 마치 두 개의 네트워크 인터페이스가 있는 것처럼 보이게 할 수 있다.

Proxy arp 설정

잘 안된다. 좀 더 테스트해봐야 겠지만, 굳이 ip 툴을 이용하지 않고 Proxy arp를 이용할 필요가 있을 까 싶다

ip 툴을 이용한 IP 설정

ip 툴을 이용해서 인터페이스에 ip를 추가할 수 있다.

게스트 운영체제의 IP 정보다.
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:7d:10:15  
          inet addr:192.168.56.254  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe7d:1015/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6125 (6.1 KB)  TX bytes:7721 (7.7 KB)

eth0에 192.168.56.253을 추가한다.
# ip addr add 192.168.56.253 dev eth0

제대로 추가 됐는지 확인.
$ ip addr show 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:7d:10:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.254/24 brd 192.168.56.255 scope global eth0
    inet 192.168.56.253/32 scope global eth0
    inet6 fe80::a00:27ff:fe7d:1015/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 08:00:27:fe:f6:bc brd ff:ff:ff:ff:ff:ff

호스트 운영체제에서 추가한 IP로 ping을 날리고 arp 테이블을 확인 했다. 잘 된다.
$ arp -na
? (192.168.56.254) at 08:00:27:7d:10:15 [ether] on vboxnet0
? (192.168.1.254) at 00:1d:93:30:03:b5 [ether] on wlan0
? (192.168.56.253) at 08:00:27:7d:10:15 [ether] on vboxnet0

히스토리

  1. 2012년 5월 12일