SHIM6: 인터넷주소의 Identifier/Locator 분리기술 2008 년 1 월 경북대학교통신프로토콜연구실 김지인 (jiin16@gmail.com) 요약 현재의인터넷은이동성지원, 멀티호밍환경등으로인해그아키텍처변경이불가피하다. 그변화중하나로인터넷주소의 Identifier/Locator 분리기술이있다. 이기술에는 VIP, LINA, HIP등이있다. 하지만이들은기존단말간의호환성을보장하지않는다. 이단점을보완한 Shim6를소개하고 test를수행해보았다. 목 차 1. 서론... 2 2. IDENTIFIER/LOCATOR 분리... 2 2.1 VIP(VIRTUAL INTERNET PROTOCOL)... 3 2.2 LINA(LOCATION INDEPENDENT NETWORK ARCHITECTURE)... 4 2.3 HIP(HOST IDENTITY PROTOCOL)... 5 3. L3SHIM(NETWORK LAYER SHIM)... 6 4. SHIM TEST... 7 4.1 TEST 시나리오... 7 4.2 TEST 환경... 7 4.3 TEST 수행... 8 5. 결론...14 참고문헌...14 APPENDIX A. SHIM6 설치방법...15 1
1. 서론현재인터넷은 1969년 ARPANet을기반으로현재의 OSI 7 계층모델에서 TCP/IP를사용하는형태로발전해왔다. 하지만 2000년에들면서빠른이동단말의지원, 다중인터페이스단말의등장, 다양한무선구간의확장, 센서와같은다량의단말접속, 안전한전자거래, 네트워크에서의서비스품질보장, 비즈니스측면보완등현재의인터넷기술에대한문제제기및이를보완, 대체하기위한다양한연구들이진행되어왔다. 이러한현재의인터넷의문제를보완, 해결하기위해현재의인터넷의철학을뛰어넘는보다새로운인터넷에대한연구가필요한실정이다. 이에대한현재진행되고있는대표적인연구들을살펴보면, 최근인터넷상의가장큰문제인 routing과 addressing의확장성을높이는연구가진행되고있다. 이동성, 멀티호밍, PI(Provider Independent) routing 등의증가로인한 routing 테이블엔트리의증가는현재인터넷에서가장시급히개선되어야할문제중하나로인식되고있다. 이러한문제는현재사용되는 IP 어드레스에 identifier와 locator 기능이함께사용되기때문이며, 이를해결하기위해서는현재어드레스개념에서 identifier와 locator를분리하거나, 혹은 identifier를근본적으로다시설계하려는연구가진행중에있다. Identifier/Locator 분리작업에대한연구및표준화는 IETF RoAP BoF 등을통해추진중에있다. 2. Identifier/Locator 분리현재인터넷에서의핵심요소인 IP 주소는네트워크에연결되어있는어떤 device의 interface에대한유일한식별자 (identifier) 역할을하며, 동시에네트워크상의 device의위치에대한식별자 (locator) 역할을모두하고있다. 하지만현재의네트워크환경은이동성을지원함으로써단말의위치와상관없이단말을식별할수있어야한다. 하지만현재사용하는 IP 주소의경우단말을인식하는 identifier와위치를인식하는 locator의의미가함께사용되기때문에단말이이동할경우 IP 주소가바뀌면서단말의 identifier도바뀌면서통신중세션이끊어져연속적인서비스 (Seamless service) 를제공할수없다. 그리고멀티호밍환경 ( 네트워크등이다중 IP 주소를사용하여동종또는이종링크와다중으로접속을유지하는기술 ) 을지원하기위해서는단말의 identifier는하나이지만동적으로는두개이상의 locator가매핑되어야한다. 이경우단말의위치가이동을하더라도 identifier는바뀌지않고 locator만바뀌면서연속적인서비스를제공할수있다. OSI 7 layer에서 IP 계층과 Transport 계층사이에 Identity 라는계층을집어넣어여기에서 Transport 상위계층에서사용하는 identifier와 IP 하위계층에서사용하는 locator를매핑하도록한다. 이로인해단말의이동으로 IP 주소가바뀌어도 Identity 계층에서변경된 IP 주소 (locator) 와동적인매핑이이루어져실제상위프로토콜의통신세션은아무변화가없어연속적인서비스 (Seamless service) 를제공할수있다. 2
그림 1. Identifier 와 locator 분리 2.1 VIP(Virtual Internet Protocol) VIP는 1994년차세대 IP인 IPv6가한창논의되고있을당시 IPv4에서 host의이동성을고려한프로토콜로처음제안됐다. VIP는 Virtual Network라는개념을도입한다. host는 Transport 계층에서 Virtual Network를새로이정의한다. 이 Virtual Network에서도실제 Network와마찬가지로 IP 주소를지정하는데이를 VIP address라한다. host는실제 Network에서는이동을하지만이 Virtual Network에서는이동을하지않으며항상같은 Virtual Network에접속해있다. 따라서 host의실제 Network주소는 host의위치를반영하여변화하지만 VIP address는변화하지않는다. Transport 계층상위계층에서는이변화하지않는 VIP address 를이용하여서비스를하므로연속적인서비스 (Seamless Service) 를제공한다. 2. VIP 3
하지만실제로는그림 2와같이 Transport 계층과 IP 계층사이에 VIP 계층을두어 VIP address와실제 IP address를매핑하도록정의하였다. VIP의가장큰단점은 VIP를지원하지않는 host들과의호환성이없으며현재인터넷아키텍처의수정이불가피하다는것이다. 2.2 LINA(Location Independent Network Architecture) LINA 1999 IPv6. LIN6. LIN6 VIP IP VIP identifier locator IP identification delivery identifier locator. 3. LIN6 generalized ID LIN6 address LIN6 3 LIN6 node interface id node id. node interface node id. IPv6, node id LIN6 ID IPv6 128 bits, 64bits LIN6 prefix 128bits, Transport identifier LIN6 generalized ID. node interface LIN6 address, LIN6 address IPv6 network prefix 64bits LIN6 ID 64bits 128bits IPv6 locator IP. 4. LIN6 Address processing 4
LIN 4, WIDE, FreeBSD. 2.3 HIP(Host Identity Protocol) HIP IP layer identifier locator. HIP identifier public-private key. host private key, public key. public key Host Identity(HI) 128 bits hash Host Identity Tag(HIT). HIT 128 bits IPv6. transport. public key hash HIP. 5. HIP new architecture 5 HIP. IP internetworing Host identity. Host identity identifier HIT loactor. HIP, DNS Rendezvous Server(RVS). 5
3. L3Shim(Network Layer Shim) L3Shim은 identifier와 locator를분리하는기술로기본적인개념은 HIP와동일하다. 하지만별도의 identifier와 locator를사용하지않고, 그냥기존의 IP address를그대로사용한다. 따라서 VIP, LINA, HIP의단점인기존단말과의호환성문제를해결한다. 이를위해서우선 shim은처음통신이설정되는순간 host의 identifier와 locator를동일한 IP address로설정한후서로 Shim을지원하는지 context를교환을실시한다. context를교환시에는상대방 host 의 locator 정보를가져온다. Shim을지원하는경우통신경로에문제가생길경우, 다른 locator로통신을변경한다. 이과정에서그림 6과같이 shim은 IP 계층에 shim6 계층을두고 identifier와 locator를매핑하는역할을수행한다. 6. shim6 architecture shim은현재 UCL(Universite Catholique de Louvain), ETRI( 한국전자통신연구원 ) & SNU(Seoul National University) 에서구현중이다. ETRI shim6 구현의경우 phase 2까지구현이되었다. phase 1은 netfilter와 iptable을이용하여 packet을그대로복사한후다른 interface로전달하는방법을사용하였고, phase 2의경우직접 socket API를만들어 kernel에서 packet을복사하여 interface로전달을한다. 당연히 phase 1보다는 phase 2가 shim6에더적합하다. 아래의 test의경우 phase 2를이용하여실행되었다. 6
4. Shim Test 4.1 Test 시나리오 A. Shim : iperf iperf iperf TCP link down link shim. B. Shim test: VLC VLC. link down link shim. shim wireshark packet capture. 4.2 Test 환경 test Fedora Core 6, Kernel netfilter 2.6.18 2.6.19.7. shim test IPv6 IPv6,. Shim Appendix A. test ETRI, ETRI. Test iperf, VLC, Wireshark. Fedora Core 6 rpm yum. VLC : $rpm Uvh http://rpm.livna.org/livna-release-6.rpm $yum install vlc Wireshark: $yum install wireshark $yum install wireshark-gnome iperf: $yum install iperf Shim. shim locator_list.txt IPv6. iptable shim special device. $iptables t mangle A INPUT j L3SHIM_IN $iptables t mangle A OUTPUT j L3SHIM_OUT $mknod /dev/shim6_dev c 1052 0 7
4.3 Test 수행 A. Shim 실행점검 $./shim6 7. Shim - 터미널창을열어그림 7과같이 shim을작동시킨다. 다른터미널창을열어다음명령어를수행해준다. $iperf V s i 1 8
8. iperf - 그림 8은서버모드로 iperf가동작하는화면이다. TCP 연결을만든다. 그리고상대방에서 iperf를 client로접속한다. 아래그림 9와같이 iperf이동작하는것을확인할수있다. 9. iperf 9
B. Shim 실행점검 test를수행하기전 packet capture를위해 wireshark를실행한다. [Capture] 메뉴에서 [Interface] 를선택한후그곳에서 any device를선택해모든 device에서나오는 packet을 capture한다. 그리고 VLC를실행하여 client로네트워크스트림을열어연결한다. 연결을하면아래그림 10과같이 shim이동작한다. 10. shim i. server link down server에서 link를다운시킨다. link를 down하는방법으로는직접 lan선을뽑는방법이있고, ip 명령어에서 link를 down하는방법등다양하다. link를 down하면 client에서는 VLC 화면이 12~15초정도멈추었다다시나오는것을확인할수있다. 화면이다시나오면 wireshark를저장후종료한다. 10
11. shim 그림 10과그림 11을비교해보면 shim table에서 2001:320:1a10:3::300 에서 2001:220:808:1::220으로바뀐것을확인할수있다. ii. client link down server의 link를복구한후 shim이다시연결된것을확인한다. 그림 12를보면다시연결되어있다는것을확인할수있다. 11
12. shim 이번엔 client의 link를 down한다. $ip link set dev [device name] down client에서는 VLC 화면이 12~15초정도멈추었다다시나오는것을확인할수있다. 화면이다시나오면 wireshark를저장후종료한다. 13. shim 12
그림 12와그림 13을비교해보면 local_locator부분이바뀐것을알수있다. 이는 client link down 후 shim이정상작동하여기존의 link가아닌다른 link에의해연결되고있음을뜻한다. 14. wireshark 13
5. 결론 Test 결과 server에서 link를 down하여도 client에서 link를 down하여도두가지경우모두정상적으로 shim이작동하는것을알수있다. test 종료후 wireshark를보면 shim이작동하고나서 source와 destination의 IP 주소를살펴보면변화가없다. shim을실행한터미널화면에서는분명 link down시 locator가변하였는데 wireshark는그렇지않다. 이는 locator는변화하였으나, identifier는변화하지않았기때문이다. 즉, wireshark는 identifier를 capture한것이지 locator를 capture한것이아니다. 이번 VLC를이용한 test는 UDP기반으로이루어졌다. UDP의경우세션의개념이명확하지않다. 따라서 VLC가아닌세션의개념이명확한다른 TCP 기반의응용프로그램에서도추후실험이이루어져야할것으로생각된다. 이번 test를끝으로더이상의 shim에대한개인적인연구는없을것으로생각된다. shim은현재까지의인터넷구조와는다른새로운인터넷구조를도입하는과정에서생긴 identifier 와 locator 분리기술을실제로보여주는역할을담당하였고, 앞으로멀티호밍환경뿐만아니라보안성, 이동성을고려한새로운인터넷구조에대한다른많은연구가있으리라생각된다. 이와같이자연스럽게인터넷아키텍처의변화가진행이되고, 결국새로운아키텍처의적용을고려할시점이다가올것이며, 현재의아키텍처가아닌새로운아키텍처로완전히바뀌는결과를가져올것이다. 참고문헌 [1] E. Nordmark, Shim6: Level 3 Multihoming Shim Protocol for IPv6, IETF Internet Draft, draft-ietf-shim6-proto-08.txt, May 2007 [2] 유태완, 인터넷주소의 Identifier/Locator 분리에관한기술및표준화동향 ", TTA IT Standard Weekly, June 2005 [3] 서울대학교멀티미디어및이동통신연구실, 한국전자통신연구원서비스융합표준연구팀, shim(release 2) 실행방법.doc, October 2007 [4] Fumio Teraoka, LIN6: A Solution to Multihoming and Mobility in IPv6, IETF Internet Draft, draft-teraoka-multi6-lin6-00.txt, December 2003 [5] Petri Jokela, Host Identity Protocol Extended Abstract, Ericsson Research, 2004 [6] 신명기, 미래인터넷기술및표준화동향, ETRI 전자통신동향분석제22권제6호, December 2007 [7] 손준영, 무선망구현을위한적정프로토콜분석에관한연구, 동의대학교대학원, February 1998 14
Appendix A. Shim6 설치방법 본문서는 test를위해 shim6를설치하며만든문서이므로 device 이름 (tun6to40, tun6to1) 과 IP 주소는설치할때변경해야하는부분입니다. [] 부분은설치시반드시자신에게맞는값을넣어야한다. 1. Kernel 컴파일 Fedora Core 6 의경우처음 kernel 버전이 2.6.18 이다. 여기서는 netfilter 와 Iptable을재설치하기위해새로운버전의 kernel이필요하다. 버전은 2.6.18 이상. 2.6.22, 2.6.23.1 버전의경우컴파일후 kernel panic 현상이일어났다. $cd /usr/src/ $wget http://155.230.105.153/linux-2.6.19.7.tar.gz kernel source download( 여기서는개인웹서버사용 ) $tar xvfz linux-2.6.19.7.tar.gz $cd linux-2.6.19.7 $make mrproper $make menuconfig <- terminal창의크기를일정크기이상하지않을경우 error 발생. <- File system에서 ext3 지원 * check $make bzimage $make $make modules_install $make install $reboot 재부팅시새로컴파일한이미지로부팅. 여기서는 2.6.19.7버전이다. 2. Iptables 설치 $wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.5.tar.bz2 $tar xjvf iptables-1.3.5.tar.bz2 $cd iptables-1.3.5 $make $make install $make install-devel $cd iptables-1.3.5 $vim Makefile Makefile 수정 Ifndef KERNEL_DIR KERNEL_DIR = /usr/src/linux-2.6.19.7 endif 15
3. Shimv2 설치 $wget http://155.230.105.153/shim2007_v2.tar $tar xvf shim2007_v2.tar $cd final $cp ip6t_l3shim_* /usr/src/linux-2.6.19.7/net/ipv6/netfilter/ $cd /usr/src/linux-2.6.19.7/net/ipv6/netfilter/ $vim Kconfig Kconfig의마지막줄에위치한 endmenu 윗부분에아래굵은글씨추가 config IP6_NF_TARGET_L3SHIM_IN tristate 'L3SHIM_IN target support' depends on IP6_NF_MANGLE help This option adds an L3SHIM INPUT target. config IP6_NF_TARGET_L3SHIM_OUT tristate 'L3SHIM OUT target support' depends on IP6_NF_MANGLE help This option adds an L3SHIM OUTPUT target. endmenu $vim Makefile Makefile 마지막부분에추가 # l3shim obj-$(config_ip6_nf_target_l3shim_in) += ip6t_l3shim_in.o obj-$(config_ip6_nf_target_l3shim_out) += ip6t_l3shim_out.o $cd /root/final $cp libip6t_l3shim_* /root/iptables-1.3.5/extensions/ $cp.l3shim_* /root/iptables-1.3.5/extensions/ $cd /usr/src/linux-2.6.19.7 $make && make modules_install && make install 선택문항이나오면 m선택 (2번) $cd /root/iptables-1.3.5 $make && make install $vim Makefile PREFIX 경로수정 #PREFIX:=/usr/local PREFIX:= $make && make install 16
4. IPv6 tunneling Create interface $/sbin/ip -6 tunnel add tun6to40 mode sit ttl 64 remote any local [IP address1] $/sbin/ip -6 tunnel add tun6to41 mode sit ttl 64 remote any local [IP address2] Activate interface $/sbin/ip link set dev tun6to40 up $/sbin/ip link set dev tun6to41 up Add address $/sbin/ip -6 addr add [IP address1을통해계산한 IPv6 address1] dev tun6to40 $/sbin/ip -6 addr add [IP address2을통해계산한 IPv6 address2] dev tun6to41 Set route $/sbin/ip -6 route add 2000::/3 via ::203.254.38.130 dev tun6to40 metric 1 $/sbin/ip -6 route add 2000::/3 via ::203.254.38.130 dev tun6to41 metric 1 17