나만의 ASN 갖기

/ , , , ,
简体中文한국어
요약 ·
개인이 ASN을 발급받고 자신의 IP 대역을 인터넷 전체에 광고하는 방법.

ASN이라는 개념을 제대로 처음 배운 곳은 COMP3331 수업이었습니다. 하지만 어릴 때부터 프록시와 서버, IP를 만지던 저에게는 딱딱한 수업 속 정의보다 익숙한 장면이 있었습니다. IP의 상세 정보를 조회할 때 가장 먼저 보이는 것이 바로 ASN이었거든요. 예를 들어 AS13335는 Cloudflare, AS15169는 Google입니다.

ASN과 BGP

인터넷은 독립적으로 운영되는 수많은 네트워크가 서로 연결된 구조입니다. 각 네트워크를 자율 시스템(Autonomous System)이라고 하며, ASN은 그 식별 번호입니다. 통신사, 대학, 클라우드 사업자, CDN은 각각 하나 이상의 자율 시스템을 운영합니다.

자율 시스템은 BGP로 정보를 교환합니다. 제가 가진 IP 대역을 업스트림에 알리면, 업스트림은 이웃 네트워크에 전달하고, 그 정보가 차례로 퍼져 나갑니다. 그러면 전 세계 라우터가 해당 대역으로 향하는 트래픽을 어느 쪽으로 보내야 할지 알게 됩니다. IP 조회에서 보이는 ASN은 보통 그 대역을 BGP로 광고하는 자율 시스템의 번호입니다.

ASN은 ISP나 대기업만을 위한 것이 아닙니다. 개인이나 조직도 적절한 절차를 거치면 신청할 수 있습니다. 내 이름으로 등록된 ASN을 갖고, IP를 조회했을 때 내 이름이 나오며, 그 IP의 주인이 될 수 있다니 매력적이지 않나요?

AS198734의 WHOIS 기록과 화면에 21이 표시된 ASCII 컴퓨터 그림
나에게 주는 21번째 생일 선물

신청

ASN과 IP 주소를 관리하는 기관은 전 세계에 다섯 곳이며, 지역 인터넷 등록 기관(RIR)이라고 합니다. ARIN은 북미, RIPE NCC는 유럽·중동·중앙아시아 일부, APNIC은 아시아·태평양, LACNIC은 라틴아메리카, AFRINIC은 아프리카를 담당합니다. 보통 해당 지역의 RIR에 신청하며, 네트워크도 그 지역에 실제 거점을 두고 있어야 합니다.

신청 조건과 비용은 RIR마다 꽤 다릅니다.

RIPE의 정식 회원은 LIR이라고 합니다. 농담 삼아 ‘프리미엄 회원’이라고도 하는데, 연회비는 1550유로이고 가입할 때 1000유로를 추가로 냅니다. 다만 LIR이 스폰서가 되어 비회원 개인이나 조직의 신청을 대행할 수도 있습니다. 개인에게는 이 방법이 가장 일반적입니다.

APNIC의 정식 회원은 첫해 약 1,680호주 달러, 이후 매년 1,180호주 달러를 냅니다. 신규 회원에게는 IPv4 /24와 IPv6 /48과 ASN 하나가 할당됩니다. 신원 확인 서류와 회사 등록·사업 운영 증명이 필요하고, 심사는 한두 주 걸립니다. IPv4는 이미 고갈되어 주소 자원을 받으려면 대기해야 합니다. 기존 회원이 고객의 신청을 대행할 수도 있지만, 이런 스폰서는 RIPE보다 적고 비용 면에서도 유리하지 않습니다.

ARIN은 ASN에 연간 요금을 부과하며, 네트워크가 북미에 있어야 합니다. LACNIC과 AFRINIC은 더 먼 지역이라 사실상 고려 대상이 아니었습니다.

저는 결국 RIPE를 선택했습니다. 신청하기 가장 쉽고 가장 저렴했기 때문입니다. APNIC도 신청할 수 있지만 더 많은 서류를 제공해야 하고 심사 기간도 더 깁니다. 또한 RIPE는 많은 설정을 매우 편리한 LIR Portal에서 처리할 수 있는 반면, APNIC은 많은 설정을 메일과 티켓으로만 처리해야 합니다.

절차

개인에게는 스폰서를 찾아 ASN을 신청하는 것이 가장 경제적입니다.

RIPE ASN 스폰서를 검색하면 이런 서비스를 제공하는 곳이 여럿 나옵니다. 보통 호스팅 업체나 소규모 네트워크 사업자, 네트워크 애호가로, 자신도 RIPE 회원이어서 LIR 계정을 갖고 있습니다. 그 계정으로 ASN과 IP 주소 신청을 도와주며, 대개 소액의 연회비를 받습니다.

제 스폰서는 Soha Jin 님이었고, 신청도 도와주셨습니다. 제출부터 ASN 발급까지 하루 이틀밖에 걸리지 않았습니다.

스폰서에게 필요한 자료는 많지 않습니다. 신원 확인 서류, 주소, 네트워크 악용 신고(abuse)를 받을 이메일, 업스트림 두 곳의 ASN, 그리고 네트워크가 유럽에 거점을 둔다는 증명입니다. 신청서에 업스트림을 적어야 하므로 미리 찾아두어야 합니다. 저는 유럽 데이터센터에 있는 VPS 한 대를 증명으로 썼습니다.

승인되면 RIPE 데이터베이스에 몇 가지 객체가 생깁니다. aut-num은 ASN을 나타내며, maintainer, 연락처, organisation 객체도 만들어집니다. 이후 정보를 수정할 때는 maintainer를 사용합니다.

ASN만으로는 부족하고, 광고할 IP 주소도 필요합니다. 일반적으로 IPv4 광고가 받아들여지는 최소 대역은 /24이고, IPv6는 /48입니다. 이보다 작은 주소 대역은 대부분의 네트워크에서 필터링됩니다. IPv4는 부족하고 비싸기 때문에 스폰서는 대개 IPv6 블록을 함께 제공합니다. 제가 받은 것은 /44이며, ASN과 거의 동시에 할당받았습니다.

업스트림 찾기

관리 기관에 신청하고 비용을 내는 일 외에 더 중요한 것은 BGP 세션을 제공할 수 있는 업스트림을 찾아 IP를 광고하는 것입니다. 저는 당시 세 곳을 찾았습니다.

첫 번째는 Vultr입니다. 클라우드 서버에서 무료로 BGP 세션을 맺을 수 있고, 상대편은 Vultr의 사설 ASN(AS64515)을 사용합니다. 앞서 언급한 유럽 VPS도 이곳에 두어, 유럽 거점 증명과 첫 업스트림으로 함께 사용했습니다. LOA 외에는 특별한 조건이 없어 첫 IP 트랜짓 사업자로 이용하기에 좋았습니다.

두 번째는 Misaka Network입니다. BGP 세션 개설 시 수십 달러 정도의 초기 비용을 한 번 냅니다.

세 번째는 BuyVM인데, 가장 저렴했습니다. 최저 요금제는 2.5달러로 트래픽이 무제한이고 무료 BGP 세션도 제공합니다. 지원 티켓으로 신청하면 되며, 수동으로 추가하는 프리픽스에는 LOA가 필요합니다.

BGP 세션을 제공하는 사업자는 더 많습니다. bgp.services라는 목록에는 BGP를 지원하는 요금제와 세션 추가 비용이 정리되어 있으니, 조건에 맞는 곳을 찾아볼 수 있습니다.

BIRD로 경로 광고하기

업스트림을 구했다면 서버에서 라우팅 소프트웨어를 실행해 BGP 세션을 맺으면 됩니다. 이런 IP 트랜짓은 VPS 사업자가 제공하는 경우가 많으므로, Linux에서 BIRD 2를 쓰는 것이 편리합니다.

BASH
apt install bird2

먼저 광고할 주소를 서버 자체에 설정합니다. 서버가 한 대라면 lo에 설정하면 되고, 외부 네트워크 인터페이스에는 설정하지 않습니다.

BASH
ip addr add 2a0e:aa07:e0a0::1/128 dev lo

다음은 /etc/bird/bird.conf입니다. 다음은 IPv6만 광고하는 최소 설정입니다. 이웃 주소, ASN, 비밀번호는 업스트림이 제공하며, 여기서는 예시 값을 사용했습니다.

TEXT
router id 203.0.113.10;

protocol device {
}

protocol static announce_v6 {
    ipv6;
    route 2a0e:aa07:e0a0::/44 reject;
}

protocol bgp upstream_v6 {
    local as 198734;
    neighbor 2001:db8:ffff::1 as 64515;
    multihop 2;
    password "your-password";

    ipv6 {
        import none;
        export where net ~ [ 2a0e:aa07:e0a0::/44+ ];
    };
}

protocol static에는 광고할 프리픽스를 적습니다. reject를 지정하면 라우팅 테이블에 경로를 두면서 실제 트래픽은 전달하지 않게 할 수 있습니다. protocol bgp에서 local as는 제 ASN이고, neighbor는 업스트림의 주소와 ASN입니다. 클라우드 서버에서는 보통 multihop 세션을 쓰므로 업스트림이 제공한 값에 맞춥니다. 저는 프리픽스를 광고하기만 하면 되고 업스트림의 경로표는 필요하지 않아 import none으로 두었습니다. 기본 라우트나 전체 테이블을 받고 싶다면 import를 수정하고 protocol kernel을 추가하면 됩니다.

수정한 뒤 BIRD를 다시 로드하고 세션 상태를 확인합니다.

BASH
birdc configure
birdc show protocols
birdc show route export upstream_v6

show protocols에서 세션 상태가 Established라면 연결된 것입니다. show route export로 실제 업스트림에 보내는 경로를 확인할 수 있습니다. 연결되지 않는다면 이웃에 ping이 통하는지, 업스트림이 multihop을 요구하는지, 방화벽이 179번 포트를 막고 있는지 확인합니다.

업스트림은 보통 프리픽스에 해당하는 IRR route6 객체와 RPKI ROA가 있는지도 확인합니다. RIPE에 미리 마련해 두어야 하며, 스폰서가 제공한 주소 블록이라면 생성을 부탁해야 할 수 있습니다.

프리픽스를 광고한 뒤 몇 시간이 지나면 bgp.tools에서 자신의 ASN을 검색할 수 있습니다. 전파가 느린 업스트림은 며칠 걸리기도 합니다. 이후 제 IP를 조회하면 가장 먼저 보이는 것이 바로 제 ASN입니다.

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...