diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index fdda358..80994e2 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -582,8 +582,15 @@
             # hostname
             self.nodes[_name]['shortname'] = \
                 _nodes[_name]['addresses']['hostname']['address']
+            # internal
             self.nodes[_name]['internalip'] = \
                 _nodes[_name]['addresses']['internalip']['address']
+            # alternate
+            if self.env_config.force_node_network is not None:
+                iIP = self.nodes[_name]['internalip']
+                # use last number
+                aIP = self.env_config.force_node_network + iIP.split('.')[-1]
+                self.nodes[_name]["altip"] = aIP
             self.nodes[_name]['node_group'] = None
             self.nodes[_name]['labels'] = _labels
             self.nodes[_name]['roles'] = _roles
@@ -694,7 +701,9 @@
     ):
         _u = self.env_config.kube_node_user
         _k = self.env_config.kube_node_keypath
-        _h = self.nodes[node]['internalip']
+
+        _n = self.nodes[node]
+        _h = _n['altip'] if "altip" in _n else _n['internalip']
         _p = 22
         if self.kube.is_local or self.kube.config.ssh_direct:
             logger.debug("Getting shell with no port forward")
@@ -1105,13 +1114,21 @@
             _ds_results[_n] = _v
         return _ds_results
 
-    def exec_on_labeled_pods_and_ns(self, label_str, cmd, _args=None, ns=None):
+    def exec_on_labeled_pods_and_ns(
+        self,
+        label_str,
+        cmd,
+        _args=None,
+        ns=None,
+        silent=False
+    ):
         if not ns:
             ns = self._namespace
         _results = self.exec_cmd_on_pods(
             self.kube.list_pods(ns, label_str=label_str),
             cmd,
-            _args=_args
+            _args=_args,
+            silent=silent
         )
         _pod_results = {}
         for _, _p, _v in _results:
@@ -1123,7 +1140,8 @@
         pod_list,
         cmd,
         _args=None,
-        is_script=False
+        is_script=False,
+        silent=False
     ):
         def _kube_exec_on_pod(plist):
             return [
@@ -1183,7 +1201,8 @@
         _results = []
         self.not_responded = []
         # create result list
-        _progress = Progress(len(_plist))
+        if not silent:
+            _progress = Progress(len(_plist))
         ret = pool.imap_unordered(_kube_exec_on_pod, _plist)
 
         for ii in enumerate(ret, start=1):
@@ -1191,9 +1210,11 @@
                 self.not_responded.append(ii[1][0])
             else:
                 _results.append(ii[1])
-            _progress.write_progress(ii[0])
+            if not silent:
+                _progress.write_progress(ii[0])
 
-        _progress.end()
+        if not silent:
+            _progress.end()
         pool.close()
         pool.join()
         logger_cli.debug(
