Building Dreamhack, part one

Dreamhack is the world’s largest digital festival and holds the official world record as the world’s largest LAN party in the Guinness Book of World Records. Last event (november 2011) the network had 13 292 uniqe devices connected.

The Dreamhack network team is responsible for planning, building, development, operations and teardown of the network. The team consists of 30 people with a great passion for technology from different companies and universities. The team is divided into four subgroups: core, services, access and logistics. I’m a member of the services group which is responsible for the services required in the network.

Part one: building anycast DNS system supporting IPV4 and IPV6
Anycast is a technology where an (anycast) IP is announced on more than one location using a routing protocol. By doing this the routing protocol thinks that it has multiple routes to the (anycast) IP when in fact there are two different endpoints with the same (anycast) IP. The routing protocol will send the client packages to the endpoint with the shortest path from the client. To achieve high availability you need to be able to remove an endpoint service when errors occur. You can do this by removing the specific route to the broken endpoint from the routing table.

 

In the example image above, the client computer’s request to the anycast IP 9.9.9.9 will be routed to the adns server with the IP 2.2.2.2 because that is the shortest path to the anycast IP 9.9.9.9. If the route saying 9.9.9.9 is reachable via 2.2.2.2 is removed the client’s request will be routed to the server adns with IP 1.1.1.1 instead.

To build our anycast DNS infrastructure at Dreamhack we use Debian GNU/Linux, Bind, iptables, ip6tables and quagga with the routing protocol BGP. We have two anycast DNS servers connected to two different Cisco ASR 9000 routers. On the servers we have loopback interfaces that have the anycast IPV4 and IPV6 address configured. We are then using iptables to forward DNS requests from the interface connected to the routers to the loopback interface. On the servers, bind is handling the DNS requests. To achieve high availability we have built a service which checks if a DNS server is unable to answer 5 different DNS request in a row. If it is, the route to that specific DNS server will be removed from the routing table making all the clients’ DNS request go to the other working DNS server.

Dreamhack anycast DNS design.

During Dreamhack winter 2011, me and my colleague Karl Andersson held a lecture where i discuss the Dreamhack anycast DNS implementation. You can find this presentation on Youtube: Dreamarena Orange – Dreamhack Behind the Scenes.

 

2 replies
  1. Karsen
    Karsen says:

    Hello,

    What’s the idea of using loopback aliases instead of physical aliases, for example eth0:0? Also, why forwarding with iptables, kernel will do the job, you don’t need them, why using them?

  2. Elie
    Elie says:

    Hi, I just recently got my CCNA so I’m still learning a lot.

    If I understand correctly from the YouTube video, you use BGP as the routing protocol between the DNS servers running Quagga and the routers? That means you’re using BGP as your interior routing protocol?

    From my basic understanding, BGP is slower to converge and more resource intensive than protocols such as OSPF and EIGRP.

    Could you please explain why you use BGP between the routers and servers instead of something like OSPF or EIGRP?

Comments are closed.