Linux MobileIPv6
원저자 : Lars Strand (lars (at) unik.no)
번역자 : 김영민 (blhole (at) venus.uos.ac.kr)
이 문서는
![]() 1. 소개 ¶이 문서는 리눅스에서 모바일 IPv6를 설치하고 사용하기 위해 소프트웨어들을
어떻게 구성하는지 설명한다.
![]() 1.1. 모바일 IP는 무엇인가? ¶각각의 모바일 노드는 인터넷상의 현재 접속해 있는 위치에 관련없이 항상 home address를 이용해 통신한다. 모바일 노드가 홈에서 벗어나 다른 곳에서 인터넷을
사용할 때는 부가적으로 모바일 노드의 현재 위치를 나타내는
care-of address를 부여 받는다.
모바일 노드의 home address를 목적지 주소로 하는 IPv6 패킷들은 모바일 노드의 home agent (HA)에 의해 care-of address로 보내진다.
모바일 노드는 모바일 IP 프로토콜의 지원으로 자신의 home address와
care-of address의 맵핑정보를 유지할 수 있고, 이 정보를 이용해서 HA를 거치지 않고
직접 care-of address로 패킷을 전송할 수 있다.
1.2. 왜 모바일 IP를 사용해야 하는가? ¶모발일 IP 기능이 없어 IPv6에서 노드의 이동성을 지원하지 못한다면,
기본적인 라우팅은 패킷의 목적지 주소를 포함하는 서브넷으로 보내지므로,
모바일 노드(호스트 또는 라우터)가 home link에 있지 않을 경우 모바일 노드로
보내지는 패킷을 수신할 수 없다.
모바일 노드가 다른 link로 이동하더라도 계속 통신을 유지하기 위해서 새로운 link로
이동할 때마다 해당 서브넷주소를 가지고 IP 주소를 변경해야 한다. 그러나, 전송
계층이나 상위 계층의 통신을 그대로 유지할 수는 없을 것이다.
IPv6의 보급으로 이동 컴퓨터들을 늘어날 것이므로 IPv6에서의 이동성 지원은 매우 중요하다.
1.3. 모바일 IP의 동작방식 ¶Mobile IP
위의 그림과 설명을 함께 보라.
3. 리눅스를 위한 모바일 IPv6 ¶현재 이용가능한 모바일 IPv6 구현물은 두 가지가 존재한다. 영국의 Lancaster 대학
은
![]() 다른 최신 구현은 헬싱키 대학 (Helsinki University of Technology)의 MIPL 프로젝트이다.
지원하는 가장 최근의 커널 버전은 2.4.22이고 조만간 정식 배포할 2.6커널의
패치도 개발하였다(자주 하는 질문을 보라). 관련문서와 소프트웨어, 개발 과정등을
볼려면
![]() 3.1. 커널 패치 ¶MIPL MIPv6 구현은 커널 패치를 요구하므로 IPv6 커널을 수정하고 재 컴파일 해야 한다.
설치과정을 정리한 문서는 잘 되어 있지만, 여기서는 간략한 단계별 설치방법을 제시한다.
주목! MN을 위한 커널과 HA를 위한 커널, 이렇게 두 개의 커널을 사용하는 방식은
예전 방식이다. 현재는 하나의 커널에 MN과 HA을 모두 지원할 수 있도록 컴파일 한다.
그러나, 동시에 MN과 HA의 역할을 수행할 수는 없으며, 어떠한 모듈이 올려지느냐에 따라
MN이나 HA의 역할을 수행한다.
# cd /usr/local/src # wget http://www.mobile-ipv6.org/download/mipv6-1.0-v2.4.22.tar.gz # tar zxfv mipv6-1.0-v2.4.22.tar.gz
# cd /usr/src # wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.22.tar.bz2 # tar jxvf linux-2.4.22.tar.bz2 # ln -s linux-2.4.22 linux # cd linux
# patch -p1 --dry-run < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch --dry-run 옵션은 패치 명령이 올바르게 수행될 수 있는지를 검사하기만 하는 옵션이다.
에러 메시지가 출력되면 다음을 진행하지 말고 문제를 해결하라.
# patch -p1 < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch
CONFIG_EXPERIMENTAL=y CONFIG_SYSCTL=y CONFIG_PROC_FS=y CONFIG_MODULES=y CONFIG_NET=y CONFIG_NETFILTER=y CONFIG_UNIX=y CONFIG_INET=y CONFIG_IPV6=m CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_IPV6_TUNNEL=m CONFIG_IPV6_MOBILITY=m CONFIG_IPV6_MOBILITY_MN=m CONFIG_IPV6_MOBILITY_HA=m MIPL은 아직 진행중인 프로젝트이므로 다음을 활성화하여 문제를 찾는데 도움을
얻을 수 있다.
CONFIG_IPV6_MOBILITY_DEBUG=y 버그를 보고할 때 디버그 메시지를 함께 보내주면 많은 도움이 될 것이다.
옵션이 올바르게 선택되었는지 검사하기 위해서 MIPL tarball에 포함된 작은 스크립트인
chkconf_kernel.sh를 실행할 수 있다.
커널을 패치하고 컴파일 하고 설치하는 방법에 대한 자세한 설명을 얻고자 한다면
![]() 3.2. 사용자 툴들 ¶모듈을 올바르게 작동하도록 하기 위해 사용자 툴인 mipdiag와 config 화일들,
init 스크립트들이 설치되어야 한다.
# cd /usr/local/src/mipv6-1.0-v2.4.22 # ./configure # make && make install 3.3. MIPv6 장치 노드 ¶MIPv6 모듈은 새로운 장치 노드 엔트리를 필요로 한다. 다음 명령을 수행하여 문자 장치 (Character Device)
를 추가하라.
# mknod /dev/mipv6_dev c 0xf9 0 3.4. 자동 시작 ¶
# chkconfig --add mobile-ip6 시스템을 시작할 때 MIPv6를 작동하지 않도록 하기 위해 다음 명령을 이용할 수 있다.
# chkconfig --del mobile-ip6
# update-rc.d -n mobile-ip6 start 75 3 4 5 . stop 05 1 2 6 .
# echo '/etc/rc.d/mobile-ip6 start' >> /etc/rc.d/rc.local Makefile을 직접 수정하지 않으면 '/'에 mobile-ipv6 스크립트가 설치되므로
"/etc/rc.d/"로 옮겨 놓으면 된다.
4. 실제로 모바일 IPv6 네트워크 만들기 ¶이제 정상적으로 설치된 MIPL 패치 커널과 사용자 툴들, 부팅할 때 자동으로 모바일
IPv6를 시작할 수 있는 설정이 갖추어져 있다.
만일 아직도 문제를 가지고 있다면 앞 절로 가서 문제를 해결하라.
4.1. 네트워크 구성 ¶본 실험에서는 site-local IPv6 주소를 사용한다. Global 주소도 사용할 수 있지만
link local 주소를 사용하면 모바일 IPv6가 동작하지 않음을 주의하라.
실험을 위한 네트워크는 네 개의 노드로 구성되며, 그림 "Mobile IPv6 testbed"를 보라.
Mobile IPv6 testbed
4.2.1. 완벽한 IPv6 네트워크 설정 ¶모바일 IP 실험을 시작하기 전에 완벽한 IPv6 네트워크를 설정해야 한다.
가능한 모든 노드들의 조합이 ping6를 이용해 통신 가능한지 확인 해야 한다.
이 과정은 매우 중요한데, 만일 AR이 HA에게 ping6를 이용한 통신에 실패한다면
모바일 IP 실험에서 어떠한 binding update도 실행되지 않을 것이다.
본 HOWTO에서는 IPv6 네트워크를 구성하고 동작하도록 만들기 위한 간략한 방법만을
제시한다. IPv6 네트워크를 구성하기 위한 더 자세한 설명은
Peter Bieringer의
![]() 본 HOWTO에서는 단순함을 위해 IPv6의 보안기능(encryption)은 고려하지 않지만,
실제 상황에서 무선 네트워크를 이용할 때는 반드시 보안기능을 이용해야만 한다.
또한, 네트워크가 다르면 ESSID도 다르다는 사실을 유념하라.
# iwconfig eth0 mode ad-hoc essid homenet enc off # ifconfig eth0 inet6 add fec0:106:2700::4/64 # echo "0" > /proc/sys/net/ipv6/conf/eth0/forwarding # echo "1" > /proc/sys/net/ipv6/conf/eth0/autoconf # echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_ra # echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_redirects # /etc/init.d/mobile-ip6 start
# iwconfig eth0 mode ad-hoc essid homenet enc off # ifconfig eth0 inet6 add fec0:106:2700::2/64 # echo "1" > /proc/sys/net/ipv6/conf/eth0/forwarding # echo "0" > /proc/sys/net/ipv6/conf/eth0/autoconf # echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_ra # echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_redirects # ip route add ::/0 via fec0:106:2700::1 # /etc/init.d/mobile-ip6 start
# ifconfig eth0 inet6 add fec0:106:2300::2/64 # iwconfig eth1 mode ad-hoc essid homenet enc off # ifconfig eth1 inet6 add fec0:106:2700::1/64 # echo "1" > /proc/sys/net/ipv6/conf/all/forwarding # echo "0" > /proc/sys/net/ipv6/conf/all/autoconf # echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra # echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects # ip route add fec0:106:1100::/64 via fec0:106:2300::1
# ifconfig eth0 inet6 add fec0:106:2300::1/64 # iwconfig eth1 mode ad-hoc essid visitnet enc off # ifconfig eth1 inet6 add fec0:106:1100::1/64 # echo "1" > /proc/sys/net/ipv6/conf/all/forwarding # echo "0" > /proc/sys/net/ipv6/conf/all/autoconf # echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra # echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects # ip route add fec0:106:2700::/64 via fec0:106:2300::2 proc 변수들을 변경하는 대신에 sysctl을 사용할 수도 있다.
주목: 본 실험 환경은 정적인 경로 설정을 이용한다. 위의 설정이 모두 이루어지면 가능한
모든 호스트들의 조합에 대해 ping6가 가능할 것이다.
4.2.2. 모바일 IPv6 설정 ¶MIPv6 설정은 network-mip6.conf에서 이루어진다. Debian과 slackware는 /etc/에 설정화일이 있고
redhat은 /etc/sysconfig/ 아래에서 설정화일을 찾을 수 있다. 설정화일에는 주석이 잘 첨부되어 있어
설정하기 어렵지 않을 것이다.
# cat /etc/network-mip6.conf # Home Agent configuration file FUNCTIONALITY=ha DEBUGLEVEL=1 MIN_TUNNEL_NR=1 MAX_TUNNEL_NR=5 TUNNEL_SITELOCAL=yes
# cat /etc/network-mip6.conf # Mobile Node configuration file FUNCTIONALITY=mn DEBUGLEVEL=1 TUNNEL_SITELOCAL=yes MIN_TUNNEL_NR=1 MAX_TUNNEL_NR=3 HOMEDEV=mip6mnha1 HOMEADDRESS=fec0:106:2700::4/64 # MN's home adress HOMEAGENT=fec0:106:2700::2/64 # HA's address
# /etc/init.d/mobile-ip6 start Starting Mobile IPv6: OK HA가 정상적으로 작동하는지 알아보기 위해 HA에서 ifconfig 명령을 실행시킨다.
ip6tnl1과 같은 터널이 하나 이상 생성되었다면 mobile-ipv6가 시작된 것이다.
# ifconfig eth1 Link encap:Ethernet HWaddr 00:02:2D:2D:DE:79 inet6 addr: fec0:106:2700::2/64 Scope:Site inet6 addr: fe80::202:2dff:fe2d:de79/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:618 errors:6 dropped:6 overruns:0 frame:6 TX packets:1485 errors:22 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:87914 (85.8 KiB) TX bytes:252596 (246.6 KiB) Interrupt:3 Base address:0x100 ip6tnl1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 (1) UP POINTOPOINT RUNNING NOARP MTU:1460 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:576 (576.0 b) TX bytes:624 (624.0 b) ip6tnl2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 (2) UP RUNNING NOARP MTU:1460 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 b) TX bytes:560 (560.0 b) (1) 터널이 활성화 되었으며 연결들을 위한 준비가 갖추어 졌음.
(The tunnel is up and ready for connections.)
(2) 또 다른 터널이 준비 상태임.
MN에서는 mipv6 커널 모듈이 올려진 것을 볼 수 있다.
# lsmod Module Size Used by Not tainted mip6_mn 59888 0 (unused) ipv6_tunnel 11448 1 [mip6_mn] mip6_base 40728 0 [mip6_mn] ipv6 179764 -1 [mip6_mn ipv6_tunnel mip6_base] ... 4.2.3. AR에서 radvd 설정 ¶MN이 새로운 네트워크로 이동했을 때, link-local 주소 설정을 시도하고 성공하면 다음 과정을
수행한다. 다음 과정은
![]() "주소 자동 설정의 다음 과정은 Router Advertisement(RA)를 수신하거나 RA를 건내줄 어떠한 라우터도
없는 두 가지 상황에서 시작한다. 라우터가 존재한다면, 호스트에서 어떠한 주소 자동 설정을
수행해야 하는지를 알려주는 RA를 보낼 것이다. 어떠한 라우터도 존재하지 않는다면,
이미 정해진 정보에 의한 주소 설정(stateful autoconfiguration)이 이루어 질 것이다."
"라우터들은 주기적으로 RA들을 전송한다. 그러나 연속한 두 RA간의 지연시간이 노드가
주소를 자동 설정하기 위해 기다릴 수 있는 시간보다 길 것이므로, 빠르게 RA를 얻기 위해서
호스트들은 "all-routers multicast group" 주소로 하나 이상의 "Router Solicitation" 메시지를
보낸다. "
본 절은
![]() 이제 AR의 무선 인터페이스에 RADVD를 설정할 것이다. radvd.conf는 다음을 포함해야만 한다.
# cat /etc/radvd.conf interface eth1 { AdvSendAdvert on; AdvIntervalOpt on; MinRtrAdvInterval 3; MaxRtrAdvInterval 10; AdvHomeAgentFlag off; prefix fec0:106:1100::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; }; 그리고 나서 radvd를 시작한다.
# /etc/init.d/radvd start radvd 메시지들이 주기적으로 보내어지고 있는지 확인하기 위해서 radvdump 명령을 이용할
수 있다.
# radvdump Router advertisement from fe80::202:2dff:fe54:d1b2 (hoplimit 255) Received by interface eth1 # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump AdvCurHopLimit: 64 AdvManagedFlag: off AdvOtherConfigFlag: off AdvHomeAgentFlag: off AdvReachableTime: 0 AdvRetransTimer: 0 Prefix fec0:106:1100::/64 AdvValidLifetime: 2592000 AdvPreferredLifetime: 604800 AdvOnLink: on AdvAutonomous: on AdvRouterAddr: off AdvSourceLLAddress: 00 02 2D 54 D1 B2 주목! HA에서 radvd를 사용하고 proc에서 autoconf를 활성화 했을 때, MN에 직접 설정한 주소
이외에 자동으로 IPv6 주소가 설정되지만 무시해도 된다.(which is superfluous)
4.2.4. HA에서 radvd 설정 ¶MN이 home network에 있는지를 알 수 있도록 하기 위해, HA도 RA들을 전송해야만 한다.
HA의 /etc/radv.conf는 다음과 같다.
# cat /etc/radvd.conf interface eth0 { AdvSendAdvert on; MaxRtrAdvInterval 3; MinRtrAdvInterval 1; AdvIntervalOpt off; AdvHomeAgentFlag on; HomeAgentLifetime 10000; HomeAgentPreference 20; AdvHomeAgentInfo on; prefix fec0:106:2700::2/64 { AdvRouterAddr on; AdvOnLink on; AdvAutonomous on; AdvPreferredLifetime 10000; AdvValidLifetime 12000; }; }; radvd 메시지들이 전송되고 있는지 확인하기 위해 radvdump 명령을 이용한다.
# radvdump Router advertisement from fe80::202:2dff:fe54:d11e (hoplimit 255) Received by interface eth0 # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump AdvCurHopLimit: 64 AdvManagedFlag: off AdvOtherConfigFlag: off AdvHomeAgentFlag: on AdvReachableTime: 0 AdvRetransTimer: 0 Prefix fec0:106:2700::2/64 AdvValidLifetime: 12000 AdvPreferredLifetime: 10000 AdvOnLink: on AdvAutonomous: on AdvRouterAddr: on AdvSourceLLAddress: 00 02 2D 54 D1 1E AdvHomeAgentInfo: HomeAgentPreference: 20 HomeAgentLifetime: 1000 # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:90:7D:F3:03:1A inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site (1) inet6 addr: fec0:106:2700::4/64 Scope:Site (2) inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link (3) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:513 errors:89 dropped:89 overruns:0 frame:85 TX packets:140 errors:41 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:56084 (54.7 Kb) TX bytes:19212 (18.7 Kb) Interrupt:3 Base address:0x100 (1) 새롭게(superfluous) 자동으로 얻어진 주소.
/proc/sys/net/ipv6/conf/eth0/autoconf 을 1로 설정하면 MN은 HA의 prefix와 자신의
MAC 주소를 이용해서 새로운 주소를 생성한다. 이 주소가 생기지 않도록 하는 방법은
없는 것 같다.
(2) 직접 설정한 IPv6 주소
(3) 부팅할 때 생성된 link-local 주소
5.1. 준비 ¶이 절 앞의 모든 설정들이 완료되어야 한다. 특히 home network과 visited network에서
MN이 다른 ESSID 값을 갖도록 해야 한다는 사실이 중요하다.
MN에서 mobile-IPv6를 시작하면 "multicasting router solicitation" 메시지들을 볼 수 있다.
# tcpdump -i eth0 -vv ip6 or proto ipv6 ... 13:32:54.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) 13:32:55.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) 13:32:57.681765 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) ... 5.2. 이동 감지 ¶일반적인 이동 감지는 더 이상 양방향 통신이 가능한 default router가 없는 상황을
감지하는 "Neighbor Unreachability Detection"을 통해 이루어진다. 양방향 통신이
가능한 default router가 없어지면, MN은 새로운 default router를 찾아야만 하며,
보통 새로운 네트워크의 default router를 발견한다.
노드 이동중에 무슨 일이 진행되는지를 살펴보기 위해 다음의 명령어들 각각에 대해
터미널을 띄우고 명령을 실행시킨다.
# watch ifconfig eth0 # watch route -A inet6 # tcpdump -i eth0 -vv ip6 or proto ipv6 새로운 네트워크로 이동하는 효과를 주기 위해서 MN에서 다음 명령을 실행하라.
# iwconfig eth1 essid visitnet MN이 새로운 네트워크로 이동하고 나서 "router solicitation"메시지를 보내므로,
이를 수신한 AR이 있으면 자신의 prefix를 이용해 응답할 것이다.
AR로부터 RA를 받은 MN은 수신한 prefix 정보와 자신의 MAC 주소를 이용하여
새로운 IPv6 주소를 할당한다. "ifconfig eth0" 명령을 수행하면, 새로운 IPv6
주소를 볼 수 있다.
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:90:7D:F3:03:1A inet6 addr: fec0:106:1100:0:290:7dff:fef3:31a/64 Scope:Site (1) inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site (2) inet6 addr: fec0:106:2700::4/64 Scope:Site (3) inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link (4) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:854 errors:154 dropped:154 overruns:0 frame:148 TX packets:293 errors:58 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:96536 (94.2 Kb) TX bytes:44664 (43.6 Kb) Interrupt:3 Base address:0x100 (1) AR의 prefix와 자신의 MAC주소를 이용해 생성된 새로운 "foreign" 주소
(2) "Superfluous" home network 주소 (참으로 설정된 HA radvd 메시지와
MN의 autoconf 기능에 의해 생성)
(3) 원래 home address
(4) link-local 주소
거의 동시에 MN은 HA와의 binding update를 수행할 것이다. tcpdump를 수행한 창에서
HA로 보내지는 몇 몇 패킷들을 볼 수 있을 것이다. HA가 Binding update가 보내고 MN으로
부터 응답을 받았는지를 확인하기 위해 HA에서 다음 명령을 수행하라.
# mipdiag -s Mobile IPv6 Statistics NEncapsulations : 0 NDecapsulations : 0 NBindUpdatesRcvd : 0 NBindAcksRcvd : 1 (1) NBindNAcksRcvd : 0 NBindRqsRcvd : 0 NBindUpdatesSent : 1 (2) NBindAcksSent : 0 NBindNAcksSent : 0 NBindRqsSent : 0 NBindUpdatesDropAuth : 0 NBindUpdatesDropInvalid : 0 NBindUpdatesDropMisc : 0 NBindAcksDropAuth : 0 NBindAcksDropInvalid : 0 NBindAcksDropMisc : 0 NBindRqsDropAuth : 0 NBindRqsDropInvalid : 0 NBindRqsDropMisc : 0 (1) binding ACK 하나를 수신
(2) binding UPDATE 하나를 전송
MN에서 binding을 확인하기 위해서는 다음 명령을 이용한다.
# mipdiag -l Mobile IPv6 Binding update list Recipient CN: fec0:106:2700::2 BINDING home address: fec0:106:2700::4 care-of address: fec0:106:1100:0:290:7dff:fef3:31a expires: 936 sequence: 0 state: 1 delay: 3 max delay 32 callback time: 736 HA에서는 -c 옵션을 이용하여 "bindig cache"를 확인할 수 있다.
# mipdiag -c Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type fec0:106:2700::4 fec0:106:1100:0:290:7dff:fef3:31a 971 2 5.3. ping6 ¶MN에서 AR의 eth1(fec0:106:1100::1)로 ping6를 시도해 보자.
# ping6 fec0:106:1100::1 PING fec0:106:1100::1(fec0:106:1100::1) from fec0:106:2700::4 : 56 data bytes 64 bytes from fec0:106:1100::1: icmp_seq=1 ttl=62 time=8.01 ms 64 bytes from fec0:106:1100::1: icmp_seq=2 ttl=62 time=8.02 ms ... tcpdump를 이용해 패킷들이 어떻게 이동하는지를 확인할 수 있다.
12:13:51.789688 fec0:106:1100:0:202:a5ff:fe6f:a08a > fec0:106:2700::2: \ (1) fec0:106:2700::4 > fec0:106:1100::1: icmp6: echo request \ (2) (len 64, hlim 64) (len 104, hlim 255) 12:13:51.797675 fec0:106:2700::2 > fec0:106:1100:0:202:a5ff:fe6f:a08a: \ (3) fec0:106:1100::1 > fec0:106:2700::4: icmp6: echo reply \ (len 64, hlim 62) (len 104, hlim 253) (1) MN의 새로운 IPv6 주소를 가지고 MN에서 HA로 이동하는 패킷
(2) HA로 부터 AR로 이동
(3) AR이 HA에게 응답하고 패킷을 MN에게 터널링한다.
MN에서 다음과 같은 통계 결과를 확인할 수 있다.
# mipdiag -s Mobile IPv6 Statistics NEncapsulations : 56 NDecapsulations : 25 ... 5.4. 커널 IP 라우팅 테이블 ¶MIPv6의 역할중 재미있는(?) 한가지는 default route를 터널로 변경하는 것이다.
새로운 default route가 다음과 같을 것이다.
# route -A inet6 Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface ::/0 :: UD 64 0 0 ip6tnl1 .... 만일 default route이 변경되지 않았다면 수동으로 추가하라.
# ip route ::/0 via dev ip6tnl 5.5. 몇몇 다른 서브넷으로 이동해 보기 ¶셋 이상의 네트워크를 이동하는 상황도 두 개의 네트워크 사이에서의 이동과 다르지 않다.
유념해야 할 사항은 MN이 모든 방문한 네트워크마다 새로운 주소를 할당한다는 사실이다.
몇몇 다른 네트워크 사이를 이동하는 MN
MN이 'visitnet'에서 'visitnet2'로 이동하는 효과를 주기 위해 MN에서 다음
명령을 수행하라.
# iwconfig eth0 essid visitnet2 MN이 'visitnet2'로 이동한 후 할당된 주소들을 다음 명령으로 확인할 수 있다.
# ifconfig eth0 eth1 Link encap:Ethernet HWaddr 00:90:7D:F3:03:1A inet6 addr: fec0:106:1000:0:290:7dff:fef3:31a/64 Scope:Site (1) inet6 addr: fec0:106:1100:0:290:7dff:fef3:31a/64 Scope:Site inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site inet6 addr: fec0:106:2700::4/64 Scope:Site inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1073 errors:212 dropped:212 overruns:0 frame:204 TX packets:371 errors:72 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:120340 (117.5 Kb) TX bytes:56912 (55.5 Kb) Interrupt:3 Base address:0x100 (1) 'visitnet2'에서 새로 할당된 주소
주목! MN이 새로운 네트워크로 이동했을 때, mobile-ipv6를 다시 시작해야
할지도 모른다.
# /etc/init.d/mobile-ip6 restart Stopping Mobile IPv6: OK Starting Mobile IPv6: OK MN이 새로운 'binding update'를 수행한 후, 새로운 'care-of address'를
부여 받는다.
# mipdiag -l Mobile IPv6 Binding update list Recipient CN: fec0:106:2700::2 BINDING home address: fec0:106:2700::4 care-of address: fec0:106:1000:0:290:7dff:fef3:31a expires: 973 sequence: 14 state: 1 delay: 3 max delay 32 callback time: 773 HA에서 갱신된 'binding cache'를 볼 수 있다.
# mipdiag -c Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type fec0:106:2700::4 fec0:106:1000:0:290:7dff:fef3:31a 943 2 5.6. home으로 돌아오기 ¶MN을 home network로 돌아오는 효과를 주기 위해 다음 명령을 수행하라.
# iwconfig eth0 essid homenet HA에서 HA-bit(AdvHomeAgentFlage)을 설정해서 radvd 메시지들을 보내고 있으므로(4.2.4절을 보라)
MN은 자신이 home network으로 돌아온 것을 알 수 있다.
또한, HA의 'binding cache'에 어떠한 정보도 남아 있지 않은 것을 확인함으로서 MN이 home network에 온
것을 알 수 있다.
Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type 5.7. 실시간 응용 실험 - 부드러운 핸드오버 ¶6. 자주 하는 질문 ¶
![]() "다음에 2.6 kernel들을 위한 MIPL 구현의 짧은 정리를 제공한다."
"MIPL 프로젝트는 USAGI 프로젝트와의 협력으로 Mobile IPv6를 위한 커널의 기초를 완성했다.
그 내용은 경로 최적화와 터널링, 정책을 적용할 수 있는 경로 설정이다."
"MIPv6의 시그널링을 처리하고 커널 부분의 동작을 제어하는 사용자 데몬을 작성하고 있으며,
잘 진행되고 있으나, 프로토콜을 어떻게 설계해야 할지가 아직 미지수이다. 그래서 아직
사용자들이 테스트 해 볼 수 있는 수준에는 이르지 못했다. 3월 말까지는 마무리할 계획이다."
A: /proc/sys/conf/net/ipv6/mobility/accept_return_routability 를 이용하라.
'return routability' 와 경로 최적화를 사용하지 않으려면, 0으로 설정하라.
# echo 0 > /proc/sys/..../accept_return_routability
이렇게 하면 MN을 HA와의 터널링을 통해 CN과 통신할 것이다.
A: 주소들을 자동으로 제거하는 방법을 알지 못합니다. 그러나, 수동으로 지우면
됩니다.:
<b># ifconfig eth0 inet6 del <ipv6-address> </b>
A: The host B doesn't know where host A is (B doesn't know where A's net is), so you must add a route entry:
# ip route add fec0:106:2700::/64 via fec0:106:2300::1
or
# route -A inet6 add fec0:106:2700::/64 gw fec0:106:2300::1 dev eth0
<b># route -A inet6 add default gw <ipv6-host> </b>
ip 명령을 이용하면
<b># ip route ::/0 via <ipv6-host> </b>
A: 호스트에서 임의의 한 라우터보다는 이웃의 모든 라우터로부터 응답을 받기 원하기 때문이다.
가능한 모든 정보를 수집해서 최상의 default router를 발견할 수 있는 장점이 있다.
7. 유용한 자원들 ¶
|
Far duller than a serpent's tooth it is to spend a quiet youth. |