digraph G { node [ shape=box, fontcolor="#ffffff", color="#40a9e3", style="filled" ] label="IPv4 as a service\nby ungleich.ch" # rankdir=LR # # Merge double edges into single one # concentrate=true # allow edges to subgraphs # compound=true # subgraph cluster_endpoints { # label="IPv6 and IPv4 reachable hosts" client [ label="Notebook, Desktop,\nServer, IoT device" color="#ee1100" ] // notebook [ label="Notebook" color="#ee1100" ] // desktop [ label="Desktop" color="#ee1100" ] // ipv6onlyvm [ label="IPv6 only VM" color="#ee1100" ] # } // subgraph cluster_roadwarrior { // label="Roadwarrior" // notebook [ label="Notebook" color="#ee1100" ] // } # subgraph cluster_internet { # label="The Internet" ipv4internet [ label="IPv4 Internet" shape=oval ] ipv6internet [ label="IPv6 Internet" shape=oval ] # } subgraph cluster_dcl { label="Data Center Light in Switzerland" vpnserver [ label="VPN Server" ] nat64t [ label="NAT64 translator (inbound)" ] nat64tout [ label="NAT64 translator (outbound)" ] } ipv4internet->client [ label="Access via NAT64 translator" style=dashed ] ipv4internet->nat64t [ label="Access via IPv4" ] ipv6internet->client [ label="Access via IPv6" style=dashed ] ipv6internet->vpnserver [ label="Access via VPN server" ] client->ipv4internet [ label="Access IPv4 Internet\nvia 2a0a:e5c0:1e:c001::a.b.c.d/96" style=dashed ] client->nat64tout [ label="IPv4 via IPv6 access" ] nat64tout->ipv4internet [ label="Translate mapped IPv4 to native IPv4" ] client->vpnserver [ label="Connects to" ] nat64t->vpnserver [ label="Translate IPv4 traffic to IPv6" ] vpnserver->client [ label="Route IPv6 network" ] }