digraph G { node [ shape=box ] rankdir=LR; label="GeoDNS\nAnswering DNS based on Source IP of the clients\nUsually different IPs per Pop" geodns [ label="DNS server with GeoDNS policies enabled" shape=oval ] subgraph cluster_pop1 { label="Pop 1" router1 [ label="Our router" ]; upstreamrouter1 [ label="Upstream router" ]; router1->upstreamrouter1 [ label="Announces A.B.1.D/24" ] } clients1 [ label="Client set 1" ] clients1->geodns [ label="Q: Where is domain example.com?" ] geodns->clients1 [ label="A: On an IP of Pop 1" ] clients1->router1 [ label="Using Pop 1 via pop specific IPs" ] subgraph cluster_pop2 { label="Pop 2" router2 [ label="Our router" ]; upstreamrouter2 [ label="Upstream router" ]; router2->upstreamrouter2 [ label="Announces A.B.2.D/24" ] } clients2 [ label="Client set 2" ] clients2->geodns [ label="Q: Where is domain example.com?" ] geodns->clients2 [ label="A: On an IP of Pop 2" ] clients2->router2 [ label="Using Pop 2 via pop specific IPs" ] subgraph cluster_pop3 { label="Pop 3" router3 [ label="Our router" ]; upstreamrouter3 [ label="Upstream router" ]; router3->upstreamrouter3 [ label="Announces A.B.3.D/24" ] } clients3 [ label="Client set 3" ] clients3->geodns [ label="Q: Where is domain example.com?" ] geodns->clients3 [ label="A: On an IP of Pop 3" ] clients3->router3 [ label="Using Pop 3 via pop specific IPs" ] }