diff --git a/tools/dev/mininet/onos.py b/tools/dev/mininet/onos.py
index 00e4a40..8e163ad 100755
--- a/tools/dev/mininet/onos.py
+++ b/tools/dev/mininet/onos.py
@@ -55,7 +55,6 @@
 from glob import glob
 import time
 from functools import partial
-from re import search
 
 
 ### ONOS Environment
@@ -365,7 +364,7 @@
         args = list( args )
         name = args.pop( 0 )
         topo = kwargs.pop( 'topo', None )
-        nat = kwargs.pop( 'nat', 'nat0' )
+        self.nat = kwargs.pop( 'nat', 'nat0' )
         nodeOpts = kwargs.pop( 'nodeOpts', {} )
         # Default: single switch with 1 ONOS node
         if not topo:
@@ -384,8 +383,8 @@
                             host=partial( ONOSNode, **nodeOpts ),
                             switch=LinuxBridge,
                             controller=None )
-        if nat:
-            self.net.addNAT( nat ).configDefault()
+        if self.nat:
+            self.net.addNAT( self.nat ).configDefault()
         updateNodeIPs( self.env, self.nodes() )
         self._remoteControllers = []
 
@@ -420,32 +419,21 @@
         "Return list of ONOS nodes"
         return [ h for h in self.net.hosts if isinstance( h, ONOSNode ) ]
 
-    def defaultIntf( self ):
-        "Call ip route to determine default interface"
-        result = quietRun( 'ip route | grep default', shell=True ).strip()
-        match = search( r'dev\s+([^\s]+)', result )
-        if match:
-            intf = match.group( 1 )
-        else:
-            warn( "Can't find default network interface - using eth0\n" )
-            intf = 'eth0'
-        return intf
-
-    def configPortForwarding( self, ports=[], intf='', action='A' ):
-        """Start or stop forwarding on intf to all nodes
+    def configPortForwarding( self, ports=[], action='A' ):
+        """Start or stop port forwarding (any intf) for all nodes
+           ports: list of ports to forward
            action: A=add/start, D=delete/stop (default: A)"""
-        if not intf:
-            intf = self.defaultIntf()
+        self.cmd( 'iptables -' + action, 'FORWARD -d', self.ipBase,
+                  '-j ACCEPT' )
         for port in ports:
             for index, node in enumerate( self.nodes() ):
                 ip, inport = node.IP(), port + index
                 # Configure a destination NAT rule
-                cmd = ( 'iptables -t nat -{action} PREROUTING -t nat '
-                        '-i {intf} -p tcp --dport {inport} '
-                        '-j DNAT --to-destination {ip}:{port}' )
-                self.cmd( cmd.format( **locals() ) )
+                self.cmd( 'iptables -t nat -' + action,
+                          'PREROUTING -t nat -p tcp --dport', inport,
+                          '-j DNAT --to-destination %s:%s' % ( ip, port ) )
 
-
+                    
 class ONOSSwitchMixin( object ):
     "Mixin for switches that connect to an ONOSCluster"
     def start( self, controllers ):
