anchor.diff:    testScript =
       ''
         startAll;
  +
  +      # Enable NAT on the router and start miniupnpd.
  +      $router->mustSucceed(
  +          "iptables -t nat -F",
  +          "iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.0/24 -j ACCEPT",
  +          "iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.3", # !!! ugly
  +          "iptables -t nat -N MINIUPNPD",
  +          "iptables -t nat -A PREROUTING -i eth1 -j MINIUPNPD",
  +          "echo 1 > /proc/sys/net/ipv4/ip_forward",
  +          "miniupnpd -f ${miniupnpdConf}"
  +      );
   
         # Create the torrent.
         $tracker->mustSucceed("mkdir /tmp/data");
  
positive.code:       $tracker->waitForOpenPort(6969);
  
        # Start the initial seeder.
        $tracker->mustSucceed("transmissioncli /tmp/test.torrent -M -w /tmp/data >&2 &");
  
        # Now we should be able to download from the client.
        $tracker->waitForJob("httpd");
        $client->mustSucceed("transmissioncli http://tracker/test.torrent -M -w /tmp >&2 &");
        $client->waitForFile("/tmp/test.tar.bz2");
        $client->mustSucceed("cmp /tmp/test.tar.bz2 ${file}");
      '';
    
  }
  
negative.code:           services.httpd.documentRoot = "/tmp";
          };
  
        router = 
          { config, pkgs, ... }:
          { environment.systemPackages = [ pkgs.iptables pkgs.miniupnpd ];
            virtualisation.vlans = [ 1 2 ];
          };
  
        client1 = 
          { config, pkgs, ... }:
          { environment.systemPackages = [ pkgs.transmission ];
            virtualisation.vlans = [ 2 ];
            networking.defaultGateway = "192.168.2.3"; # !!! ugly
          };
  
        client2 = 
          { config, pkgs, ... }:
          { environment.systemPackages = [ pkgs.transmission ];
          };
  