티스토리 뷰

OOR은 기존에 LISP의 xTR를 구현했던 오픈소스 프로젝트였던 LispMob에서 확장된, 오픈소스 소프트웨어 프로젝트이다.

기존에 LispMob이 단순히 xTR의 기능을 구현했던것과 비교하면, OOR은 SDN 환경에서 overlay기반의 네트워크 가상화를 실현하기 위한 도구로써 목표를 바꾼것으로 보인다.


OOR에 관련된 자세한 내용은 http://www.openoverlayrouter.org/ 홈페이지에서 확인할 수 있으며, 매뉴얼들 및 유즈케이스가 공개되어 있다. 


OOR을 xTR로 동작시키기 위해서 물리 머신에 설치하는 것이 좋겠지만, 간단한 테스트 용도로 사용하기 위해서는 가상 머신을 이용하는 것도 좋은 방법이라 생각한다. 


VirtualBox에 Ubuntu를 설치하는 하였다고 가정하고 문서를 서술 하도록 하겠다.

사용된 우분투 버전은 16.04.1이다.

이번 포스팅에서는 Mobile Node(MN)으로써 동작하기 위한 OOR설정을 다루도록 하겠다. 

다음에 시간이 된다면 xTR 또는 RTR 모드로 OOR을 동작시키는 방법에 대해서도 포스팅 하도록 할 예정이다.


Mobile 노드로 OOR을 구성하기 위해서는 별도의 네트워크 카드 설정이 필요 없다. 

이번 포스팅에서는 Host OS에서 터미널(SSH)을 이용하여 OOR VM에 접속 하도록 하기 위해서, VirtualBox 네트워크 설정에서 Host-only network interface를 추가 하였다. 

OOR을 설치 하기전, Network Interface 설정은 다음과 같다. 


enp0s3    Link encap:Ethernet  HWaddr 08:00:27:3a:ef:d5

          inet addr:192.168.56.10  Bcast:192.168.56.255  Mask:255.255.255.0

          inet6 addr: fe80::66d8:1977:53cc:b365/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:107 errors:0 dropped:0 overruns:0 frame:0

          TX packets:143 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:18798 (18.7 KB)  TX bytes:22019 (22.0 KB)


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:65536  Metric:1

          RX packets:387 errors:0 dropped:0 overruns:0 frame:0

          TX packets:387 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1

          RX bytes:32804 (32.8 KB)  TX bytes:32804 (32.8 KB)


주의) VirtualBox를 이용하여 VM 2대를 라우팅이 가능한 gateway 또는 스위치 노드가 없이 구성한다면, Gateway를 설정하지 말자. 

VirtualBox의 기본 호스트머신의 주소 (예, 192.168.56.1)을 gateway로 설정하게 되면 패킷이 전송되지 않는다.

ARP를 사용하여 가상 머신들 사이에 broadcast를 사용하도록 두면 된다.

만약 OVS 와 같은 가운데 라우팅 장치를 둘 경우에만 gateway주소를 사용하자. 


준비사항

OOR을 설치 및 구동하기 위해서 필요한 소프트웨어들은 다음과 같다. 


  • 리눅스 호스트 (a Linux hosts)
  • C 컴파일러. 일반적으로 GCC (a C compiler (tested with gcc))
  • GNU make
  • git, unless you use a tarball
  • libConfuse
  • gengetopt
  • libcap v2+
  • libzmq v3
  • libxml2

Ubuntu의 apt-get을 이용하여 쉽게 위에 도구들과 라이브러리를 다운로드 받을 수 있다.
lib들의 경우 정확한 에러가 나는 경우, dev버전을 다운 설치하여 해결 할 수 있다.

1. OOR 소스코드 다운 받기
OOR은 소스코드는 오픈소스로 github에 공개되어 있으며, git이용하여 다운로드 받을 수 있다.

git clone git://github.com/OpenOverlayRouter/oor

2. OOR 설치하기
OOR의 설치는 굉장히 쉽다. 위에 언급한 도구들이 정상적으로 설치되어 있다는 가정하에 다음 명령으로 설치 할 수 있다.

make
sudo make install


이 명령을 통해 OOR을 설치하게되면, /usr/local/sbin에 OOR이 설치 되게 된다.


3. OOR 실행하기

OOR을 구동하기 위해 가장 처음으로 해야 할 작업은 OOR의 설정파일을 /etc 폴더 아래에 두는 것이다.

OOR 설정 파일은 /oor/oor/oor.conf.example을 oor.conf로 이름을 바꾸어 넣어주면 된다.


sudo cp /oor/oor/oor.conf.example /etc/oor.conf


OOR을 실제 구동하기 전, /etc/sysctl.conf를 변경해 줄 필요가 있다.

이것은 리눅스 커널에 관련하여 OOR이 사용해야 하는 네트워크 기능들을 커널에서 처리 할 수 있도록 하기 위함이다.

예를들어, net.ipv4.conf.default.rp_filter가 설정되어 있다면, 호스트의 기본 네트워크 인터페이스 다른 ip주소가 들어올 경우 drop된다. 

다음과 같이 설정하도록 하자. 


net.ipv4.conf.default.rp_filter=0

net.ipv4.conf.all.rp_filter=0

net.ipv4.ip_forward=1

net.ipv6.conf.all.forwarding=1  


설정 후 VM을 재부팅 하여야 한다. 


oor 명령을 이용하여 실행하면, oor이 구동되지만 아직 설정을 해주지 않아 error메세지를 보게 될 것이다.


추가적으로 Rloc으로 사용할 인터페이스를 host의 default gateway로 설정되어있는지 확인하길 바란다. 


4. oor.conf 설정하기

oor 설정을 위해서, oor이 사용하는 네트워크 interface의 주소는 192.168.56.10 (enp0s8)을 사용할 것이다.

VM에서 사용할 EID 주소는 1.1.1.1로 설정 할 것이다.


MN (lisp-tun인터페이스에 EID/RLOC이 1:1 로 바인딩되는 경우)는 다음과 같은 내용만 설정해주면된다. 

필요 없는 설정은 #이용하여 코멘트 처리를 하면 구동되는 oor을 볼 수 있다.


operating-mode         = MN


encapsulation          = LISP


#만약 NAT를 사용한다면 on

nat_traversal_support  = off 


#Database는 현재 mn 또는 xTR에서 routing 할 수 있는 EID를 설정하는 것으로, rloc-address 또는 rloc-iface 둘중 하나만 설정하면 된다. 

database-mapping {

    eid-prefix          = 1.1.1.1/32

    iid                 = 0

    rloc-address {

        address         = 192.168.56.10

        priority        = 1

        weight          = 1

    }

}


$sudo oor을 통해 oor을 구동한뒤, ip addr을 넣을 경우 다음과 같은 설정을 볼 수 있다.

oor을 구동 시키지 않았을 떄, 1.1.1.1로 ping을 보내면 가지 않지만 지금은 ping이 전송되는걸 확인 할 수 있다.


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 08:00:27:ae:0b:35 brd ff:ff:ff:ff:ff:ff

    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3

       valid_lft 84380sec preferred_lft 84380sec

    inet6 fe80::c87b:16c8:b400:331c/64 scope link

       valid_lft forever preferred_lft forever

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 08:00:27:3a:ef:d5 brd ff:ff:ff:ff:ff:ff

    inet 192.168.56.10/24 brd 192.168.56.255 scope global enp0s8

       valid_lft forever preferred_lft forever

    inet 192.168.56.101/24 brd 192.168.56.255 scope global secondary dynamic enp0s8

       valid_lft 802sec preferred_lft 802sec

    inet6 fe80::953a:d2e9:71ea:edf6/64 scope link

       valid_lft forever preferred_lft forever

16: lispTun0: <POINTOPOINT,UP,LOWER_UP> mtu 1440 qdisc pfifo_fast state UNKNOWN group default qlen 500

    link/none

    inet 1.1.1.1/32 scope global lispTun0

       valid_lft forever preferred_lft forever




5. VM 2대를 이용하여 LISP Overlay 네트워크 구성하기

이전에 사용한 VM을 복사하여 새로운 VM을 만들었다. 

기본의 구성은 동일하고, IP 주소는 192.168.56.11으로 설정하였다. 

VM2의 EID는 2.2.2.2/32로 설정할 것이다. 

VM을 복사할 때, 혹시 모를 충돌을 대비하여 네트워크 인터페이스들의 MAC주소를 바꿔주는걸 잊지 말자.

대부분의 설정 파일은 VM1과 동일하게 설정하면된다. EID와 RLOC 주소만 제대로 설정해 주자.


operating-mode         = MN


encapsulation          = LISP


#만약 NAT를 사용한다면 on

nat_traversal_support  = off 


#Database는 현재 mn 또는 xTR에서 routing 할 수 있는 EID를 설정하는 것으로, rloc-address 또는 rloc-iface 둘중 하나만 설정하면 된다. 

database-mapping {

    eid-prefix          = 2.2.2.2/32

    iid                 = 1

    rloc-address {

        address         = 192.168.56.11

        priority        = 1

        weight          = 1

    }

}



추가적으로 현재 VM1과 VM2를 EID/RLOC mapping 정보가 필요하다.

하지만 MS/MR이 현재 없는 상황이므로, static map-cache를 등록해주도록 하겠다.

map-database는 자신이 hosting 하고 있는 EID 정보를 담고 있다면, map-cache는 외부에 위치한 lisp-site의 정보 매핑 정보를 담고 있다.

oor.conf 파일을 다음과 같이 설정하자.


VM1의 oor.conf (RLOC: 192.168.56.10, EID:1.1.1.1)


static-map-cache {

    eid-prefix          = 2.2.2.2

    iid                 = 1

    rloc-address {

        address         = 192.168.56.11

        priority        = 1

        weight          = 255

    }

}


VM2의 oor.conf (RLOC: 192.168.56.11, EID:2.2.2.2)


static-map-cache {

    eid-prefix          = 1.1.1.1

    iid                 = 1

    rloc-address {

        address         = 192.168.56.10

        priority        = 1

        weight          = 255

    }

}


만약 LISP MS/MR을 가지고 있다면, 이 과정은 필요 하지 않다. 


주의)

더불어 임의적으로 MS/MR을 사용하는경우, Map-notify 메세지를 수신 하지 못하면 설정한 map-cache 정보가날라간다.

패킷이 4~5개 가다가 더이상 가지 않는것을 볼 수 있다. 


주의) 

iid값은 동인하게 설정하도록하자. 

기본적으로 LISP 표준에는 포함되어 있지 않지만, OOR에서 VXLAN-GRE를 통한 encapsulation을 지원하면서 새롭게 추가된 필드이다. 

테스트를 해봐야 OOR이 아닌 다른 MS/MR을 사용시, 문제가 될 요지가 충분해 보인다.


7. 결과

위의 과정을 통해 VM이 제대로 설정되었다면, 각 VM에서 EID를 사용하여 통신이 가능하다.

아래는 LISP의 log 메세지.  (sudo oor -f /etc/oor.conf -d 3 으로 실행 한 경우)



tcpdump를 이용하여 4342포트를 이용하여, 제대로 메세지가 encap/decap되어 전송됨을 확인 할 수 있다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30