PORCH WAN 구간 지원 1

PORCH WAN support 논의

목표는 WAN 건너 원격 서버를 PORCH으로 OS/APP 설치하고 싶다. 과연 PORCH이 WAN 구간에서도 제대로 작동하게 할 수 있는가?

PORCH은 최초 설계 시 WAN 지원을 위해 LAN-specific protocol을 지양하였다. PORCH이 사용하는 protocol을 정리한다.

Protocol lists:

  • bootpc : udp 68, client-side bootstrap protocol (pxeboot) 클라이언트가 udp 68을 source port로 하여 dhcp 요청을 한다.
  • bootps : udp 67, server-side bootstrap protocol (dhcpd) 클라이언트에게 IP를 할당하고, bootstrap image file의 위치를 알려준다.
  • tftp: tcp 69, trivia l file transfer protocol (tftp-hpa) 클라이언트는 bootstrap image를 tftp를 이용해 가져온다. bootstrap image에는 kernel/initrd 위치가 정의되어 있다.
  • http: tcp 80, hypertext transfer protocol (nginx) 클라이언트는 kernel, initrd 파일을 가져와 부팅하고, squashfs 파일을 가져와 설치를 위한 root filesystem으로 마운트한다.

위 과정 중 WAN 구간에서 문제가 되는 protocol은 bootps이다. DHCP는 L2 level protocol이기 때문에 WAN 구간을 거쳐 사용할 수 없다. 나머지 protocol은 WAN 구간에서 문제가 없는 protocol이다. DHCP WAN 지원을 위해 dhcp relay를 이용하기로 했다.

target server --- dhcp relay --- WAN --- PORCH (dhcp server)
            broadcast          unicast

target server는 DHCP request broadcast를 한다. dhcp relay는 DHCP request를 PORCH에 전달한다. PORCH은 target server의 MAC주소가 등록이 되어 있으면 설정된 IP를 보낸다. dhcp relay는 받은 IP정보를 target server에 전달한다. 특별할 것이 없다. 잘 작동할 것이다. 위와 같이 작동되도록 설정만 잘 하면 된다.

PORCH 설정

  1. /etc/dhcp/dhcpd.conf 변경

    당연히 dhcpd.conf파일을 WAN에서도 잘 되도록 수정해야 할 것이다. 두 개의 subnet block을 추가하자. /etc/dhcp/dhcpd.conf

    subnet x.x.x.0 netmask 255.255.255.0 {
    }
    

    이것은 PORCH서버의 서비스 네트워크 대역이다.(보안 상 네트워크 정보는 숨긴다.) WAN으로부터 dhcp request를 받아야 하므로 서비스 네트워크 대역도 listen하기 위해 빈 subnet 정의를 한다.

    subnet y.y.y.0 netmask 255.255.255.0 {
      option routers y.y.y.1;
      option domain-name "";
      option domain-name-servers 164.124.101.2;
      option ntp-servers udam;     # RFC1035 (port 123)
      server-name udam;
      next-server <udam_service_ip>;
      if exists user-class and option user-class = "iPXE" {
        filename "http://<udam_service_ip>/api/fai/boot/";
      } else {
        filename "fai/undionly.kpxe";
      }
    }
    

    위와 같이 target 서버의 subnet 정의를 한다. PORCH은 이 대역의정보를 보내줄 것이다.

  2. /etc/default/isc-dhcp-server

    PORCH에서의 DHCP 기본 설정은 배포망 인터페이스만 listen하는 것이다. WAN 지원을 위해서는 서비스망 인터페이스도 listen해야 한다.

    INTERFACES=”eth0 eth1”

    • eth0: 배포망
    • eth1: 서비스망
  3. 파일 다운로드 URL 수정

    PORCH에서 제공하는 파일들(kernel, initrd, squashfs)의 URL은 기본적으로 배포망 IP로 설정되어 있다. WAN지원을 위해 이것을 서비스망 IP로 변경해야 한다. 한가지 걸리는 문제는 서비스망 IP로 변경되기 때문에 배포망에 있는 서버조차도 PORCH의 서비스망 IP에 접속해 파일들을 가져옴으로써 배포망의 효용성이 떨어진다.그러나 이것은 WAN지원을 위해 희생이 되어도 되는 작은 문제이다.

    1. /srv/tftp/fai/boot.ipxe (chain 라인 수정)
    2. PORCH_HOME/porch/porch/config.py (PORCH_URL 수정)

    위 두 개의 파일을 수정한 후 uwsgi를 restart한다.

    $ sudo systemctl restart uwsgi

시험

  • 기존 배포망에 있던 서버에 대한 OS 배포 시험: 문제 없음 확인
  • WAN 건너편에 있는 서버에 대한 OS 배포 시험: 준비가 안 되어 시험하지 못함

이현우/소철 부장님이 시험해 보고 문제있으면 알려주겠다고 한다.

그리고  난 이 곳을 떠났다…