digraph G { node [ shape="box"]; rankdir="TB"; # ORDER OF CREATION IS IMPORTANT FOR ORDERING! v6host1 [ label="IPv6 only host" rank="source" ]; dnsserver [ label="DNS64 DNS server" ]; authdns [ label="DNS server\nfor example.com" ]; nat64 [ label="NAT64 translator" ]; v4host1 [ label="IPv4 host: 192.0.2.0" ]; subgraph sdns64 { label="DNS request"; dnsserver; authdns; } subgraph snat64 { label="NAT64 translation"; nat64; v4host1; } v6host1->dnsserver [ label="ipv4onlyhost.example.com:\nAAAA?" ] ; dnsserver->v6host1 [ label="AAAA\n64:ff9b::c000:200" ]; dnsserver->authdns [ label="ipv4onlyhost.example.com:\nAAAA?" ]; dnsserver->authdns [ label="ipv4onlyhost.example.com:\nA?" ]; authdns->dnsserver [ label="NO AAAA record"]; authdns->dnsserver [ label="A: 192.0.2.0"]; v6host1->nat64 [ label="Packet for\n64:ff9b::c000:200 tcp port 80" ]; nat64->v4host1 [ label="Packet for\n192.0.2.0 tcp port 80" ]; }