Virtual IP - cra16/overcast GitHub Wiki
์๊ฐ
ํด๋ผ์ฐ๋ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ค๋ค ๋ณด๋ฉด, ๊ฐ์์ IP๋ฅผ ํ ๋นํด์ผ ํ ํ์๊ฐ ์์ฃผ ์๊ธด๋ค. ์ด ๋ฌธ์์์๋ ๊ฐ์์ IP๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌํด๋ณธ๋ค. ๊ธฐ๋ณธ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ด์์ฒด์ : Ubuntu 12.04
- ํ์ดํผ๋ฐ์ด์ : virtualbox
- ๊ฒ์คํธ ์ด์์ฒด์ : Ubuntu 12.04
๊ฐ์ IP
ํ ์คํธ ๋ฐฉ์
Virtualbox๋ฅผ ์ด์ฉํด์ ๊ฐ์ IP๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ค์ ํ ์คํธํ๊ธฐ๋ก ํ๋ค. Guest ์ด์์ฒด์ ์ ๊ฐ์ IP ์ค์ ์ ํ ๋ค์์ ํธ์คํธ ์ด์์ฒด์ ํน์ ๋ค๋ฅธ ๊ฒ์คํธ ์ด์์ฒด์ ์์ ๊ฐ์ IP๋ก ๋คํธ์ํน์ด ์ ๋๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ด๋ค.
VIP
VIP๋ ํ๋์ ํธ์คํธ์ ์ฌ๋ฌ ๊ฐ์ IP ์ฃผ์๋ฅผ ํ ๋นํ๋ ๊ธฐ์ ์ด๋ค. ์ด ๊ธฐ์ ์ ์ด์ฉํ๋ฉด, ํ๋์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ์ฌ๋ฌ ๊ฐ์ IP ์ฃผ์๋ฅผ ์ค ์ ์๋ค. ๋ฐ๊นฅ์์๋ ๋ง์น ํ๋ ์ด์์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ผ ๊ฒ์ด๋ค.
VIP๋ ํํ HA๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํด์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
HA์์์ VIP ์ฌ์ฉ
์น ์๋น์ค๋ฅผ ์๋ก ๋ค์ด๋ณด์. ์ค์ ์๋น์ค์ ๊ฒฝ์ฐ์๋ ํ๋์ ์น ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ผ๋ ์น ์๋น์ค์๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค. ๊ทธ๋์ ๋ณดํต์ ๋๋์ ํธ์คํธ๋ฅผ Active - Standby ํํ์ HA๋ฅผ ๊ตฌํํ๋ค. ์ด ๋ ํธ์คํธ๋ Heartbeat ์ํํธ์จ์ด๋ฅผ ์ด์ฉํด์ ์๋ก์ ์ํ๋ฅผ ํ์ธํ๋ค. ๊ทธ๋ฌ๋ค๊ฐ Active ํธ์คํธ์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด standby๊ฐ ๋ฌธ์ ๊ฐ ์๊ธด ํธ์คํธ๋ฅผ ๋์ ํด์ Active ํธ์คํธ๊ฐ ๋๊ณ , ์๋น์ค๋ฅผ ๊ณ์ํ๋ค.
์ด๋ฐ HA ๊ตฌ์ฑ์์ ์ํ ํ ์น ์๋น์ค๋ฅผ ์ํด์๋ ๋ ํธ์คํธ๊ฐ ๋์ผํ IP๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์๊ฐ ์๋ค. ์ด๋ ์ฌ์ฉํ๋๊ฒ VIP๋ก ์๋์ ๊ฐ์ ๊ตฌ์ฑ์ ๊ฐ์ง๋ค.
- Host A๋ Active ์ํ๋ก ์๋์ ํ๋ค. ์ด Host A๋ ๋ฌผ๋ฆฌ์ ์ธํฐํ์ด์ค์ ์ค์ ์์ดํผ๊ฐ ์๋ VIP๋ฅผ ์ด์ฉํด์ ์๋น์ค ํ๋ค. VIP์ ์ฃผ์๋ฅผ 172.26.5.100์ด๋ผ๊ณ ๊ฐ์ ํ์. ์ ์ ๋ 172.26.7.100 ์ผ๋ก ์ ์ํด์ ์๋น์ค๋ฅผ ๋ฐ์ ์ ์๋ค.
- Host B๋ Standby ์ํ๋ก ์๋์ ํ๋๋ฐ, ์ฃผ๊ธฐ์ ์ผ๋ก Host A์ ์ํ๋ฅผ ํ์ธํ๋ค.
- ๋ง์ฝ Host A์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ์๋น์ค๋ฅผ ํ ์ ์๋ค๋ฉด Host A์ VIP๋ฅผ down ํ ํ, Host B์ 172.26.7.100์ VIP๋ฅผ up ํ๋ค.
- ์ด์ ์ ์ ๋ Host B์ ์ ์ํด์ ์๋น์ค๋ฅผ ๋ฐ์ ์ ์๋ค.
VIP ์ค์
VIP ํ ์คํธ๋ฅผ ์ํด์ ๋ ๊ฐ์ ๊ฒ์คํธ ์ด์์ฒด์ ๋ฅผ ์ค๋นํ๋ค. ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ ์คํธ๋ฅผ ์ํ ๋คํธ์ํฌ : 192.168.56.0/24
- ํธ์คํธ ์ด์์ฒด์ ์ IP : 192.168.56.1
- ๊ฒ์คํธ ์ด์์ฒด์ ์ IP
- Guest01 : 192.168.56.253
- Guest02 : 192.168.56.254
- ํ ์คํธ์ ์ฌ์ฉํ VIP : 192.168.56.100
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์ ์ด์ฉํด์ ํ ์คํธ ํ๋ค.
# 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 ์์ฒญ์ ๋ธ๋ก๋์บ์คํ ํ๋ฉด, ์์ฒญ์ ๋ฐ์ ์ด์์ฒด์ ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ MAC ์ฃผ์์ IP ์ฃผ์๋ฅผ ๋ฐํํ๋ค. ๋ณดํต์ ํ๋์ MAC ์ฃผ์์ ๋ํด์ ํ๋์ ์ธํฐ๋ท ์ฃผ์ ์ ๋ณด๋ง์ ์๋ตํ๋๋ฐ, 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