anchor.diff:        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 ${nodes.router.config.networking.ifaces.eth1.ipAddress}",
  +      $router->waitForJob("nat");
  +      $router->succeed(
             "iptables -t nat -N MINIUPNPD",
             "iptables -t nat -A PREROUTING -i eth1 -j MINIUPNPD",
             "echo 1 > /proc/sys/net/ipv4/ip_forward",
  
positive.code:       );
  
        # Create the torrent.
        $tracker->mustSucceed("mkdir /tmp/data");
        $tracker->mustSucceed("cp ${file} /tmp/data/test.tar.bz2");
        $tracker->mustSucceed("transmission-create /tmp/data/test.tar.bz2 -t http://tracker:6969/announce -o /tmp/test.torrent");
        $tracker->mustSucceed("chmod 644 /tmp/test.torrent");
  
        # Start the tracker.  !!! use a less crappy tracker
        $tracker->mustSucceed("bittorrent-tracker --port 6969 --dfile /tmp/dstate >&2 &");
        $tracker->waitForOpenPort(6969);
  
        # Start the initial seeder.
        my $pid = $tracker->mustSucceed("transmission-cli /tmp/test.torrent -M -w /tmp/data >&2 & echo \$!");
  
        # Now we should be able to download from the client behind the NAT.
        $tracker->waitForJob("httpd");
        $client1->mustSucceed("transmission-cli http://tracker/test.torrent -w /tmp >&2 &");
        $client1->waitForFile("/tmp/test.tar.bz2");
        $client1->mustSucceed("cmp /tmp/test.tar.bz2 ${file}");
  
        # Bring down the initial seeder.
        $tracker->mustSucceed("kill -9 $pid");
  
        # Now download from the second client.  This can only succeed if
        # the first client created a NAT hole in the router.
        $client2->mustSucceed("transmission-cli http://tracker/test.torrent -M -w /tmp >&2 &");
        $client2->waitForFile("/tmp/test.tar.bz2");
        $client2->mustSucceed("cmp /tmp/test.tar.bz2 ${file}");
      '';
    
  }
  
negative.code: 
        router = 
          { config, pkgs, ... }:
          { environment.systemPackages = [ pkgs.miniupnpd ];
            virtualisation.vlans = [ 1 2 ];
            networking.nat.enable = true;
            networking.nat.internalIPs = "192.168.2.0/24";
            networking.nat.externalInterface = "eth1";
          };
  
        client1 = 
  