diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
index 9b611a6..5418ef9 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
@@ -20,6 +20,7 @@
 from tempest.common import waiters
 from tempest import config
 from tempest.lib.common import api_version_utils
+from tempest.lib.common import ssh
 from tempest.lib.common.utils.linux import remote_client
 from tempest.lib.common.utils import test_utils
 from tempest.lib import exceptions as lib_exc
@@ -196,9 +197,23 @@
         dest.validate_authentication()
 
     def verify_l3_connectivity(self, source_ip, private_key,
-                               destination_ip, conn_expected=True, timeout=15):
-        remote = self.get_remote_client(source_ip, private_key=private_key)
-        remote.validate_authentication()
+                               destination_ip, conn_expected=True, timeout=15,
+                               jump_host_ip=None, jump_host_key=None):
+        if jump_host_ip:
+            jump_host_key = jump_host_key or private_key
+            jump_client = self.get_remote_client(jump_host_ip,
+                                                 private_key=jump_host_key)
+            # TODO(mkarpin): add ability to pass proxy client to
+            # get_remote_client
+            remote = ssh.Client(source_ip, "cirros",
+                                ssh_key_type="ecdsa",
+                                pkey=private_key,
+                                proxy_client=jump_client.ssh_client)
+            remote.test_connection_auth()
+        else:
+            remote = self.get_remote_client(source_ip,
+                                            private_key=private_key)
+            remote.validate_authentication()
 
         output = remote.exec_command('ip route')
         LOG.debug("Routing table on %s is %s", source_ip, output)
diff --git a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy_hybrid.py b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy_hybrid.py
index 5e07f7c..db95ff0 100644
--- a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy_hybrid.py
+++ b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy_hybrid.py
@@ -200,6 +200,8 @@
             cls.r1['id'], subnet_id=cls.subnetB['id'])
 
         cls.keypair = cls.create_keypair()
+        cls.snat_check_ip = (cls.r1["external_gateway_info"]
+                                   ["external_fixed_ips"][0]["ip_address"])
 
         cls.bmA1, cls.bmA1_ip, cls.bmA1_fip = cls.create_server(
             key_name=cls.keypair['name'],
@@ -312,6 +314,18 @@
             self.vmB1_fip, self.keypair['private_key'],
             self.vmB2_ip, conn_expected=True, timeout=self.ping_timeout)
 
+    def _test_connectivity_vma2_snat(self):
+        self.verify_l3_connectivity(
+            self.vmA2_ip, self.keypair['private_key'],
+            self.snat_check_ip, conn_expected=True, timeout=self.ping_timeout,
+            jump_host_ip=self.vmA1_fip)
+
+    def _test_connectivity_vmb2_snat(self):
+        self.verify_l3_connectivity(
+            self.vmB2_ip, self.keypair['private_key'],
+            self.snat_check_ip, conn_expected=True, timeout=self.ping_timeout,
+            jump_host_ip=self.vmB1_fip)
+
 
 class BaremetalMultitenancyHybridGeneveGeneve(
         BaremetalMultitenancyHybridBase):
@@ -375,6 +389,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('b1e2df03-cc7a-4c2d-a8f7-ab18b4b441c9')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('f9c68b0c-09d2-4e9a-8a7d-0b26adad6426')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVxlanVxlan(
         BaremetalMultitenancyHybridBase):
@@ -438,6 +460,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('3a99c17b-8007-494a-b834-17f9a498abf8')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('ae196bec-7560-4c61-b895-89741ea39ce3')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVlanVlan(
         BaremetalMultitenancyHybridBase):
@@ -501,6 +531,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('44a110ce-266e-4f15-8aea-9468d0007cbb')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('94ed2725-7d75-4066-b985-a489414bc318')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVlanGeneve(
         BaremetalMultitenancyHybridBase):
@@ -564,6 +602,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('2c4fa154-b407-4cfa-b007-7668bd8436ac')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('dd09381b-452a-4979-9e77-4017155bf080')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridGeneveVlan(
         BaremetalMultitenancyHybridBase):
@@ -627,6 +673,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('5e6a0cbe-180d-4df9-b7b2-af20742c41ad')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('a64b1f48-c009-47c5-a907-8923d9d7952f')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridGeneveVxlan(
         BaremetalMultitenancyHybridBase):
@@ -690,6 +744,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('444794a7-dd67-4693-ab7e-7b3b6e95fa32')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('4e8828ba-d0e9-4b24-a170-90824581c12a')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVxlanGeneve(
         BaremetalMultitenancyHybridBase):
@@ -753,6 +815,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('b13665b2-1fe4-417a-8e0c-1af523e62aea')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('0e0d4592-dc77-4026-8b46-46f4040bf7ee')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVxlanVlan(
         BaremetalMultitenancyHybridBase):
@@ -816,6 +886,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('eba44471-36b4-408e-af61-6e365674b868')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('e759ed80-5137-44c5-86e8-e49191afbe62')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridVlanVxlan(
         BaremetalMultitenancyHybridBase):
@@ -879,6 +957,14 @@
     def test_connectivity_vmb1_vmb2(self):
         self._test_connectivity_vmb1_vmb2()
 
+    @decorators.idempotent_id('4fa0b40f-5048-4720-9019-c269a127f918')
+    def test_connectivity_vma2_snat(self):
+        self._test_connectivity_vma2_snat()
+
+    @decorators.idempotent_id('8e865d32-a831-4c3d-87b0-2fc2a9c445ed')
+    def test_connectivity_vmb2_snat(self):
+        self._test_connectivity_vmb2_snat()
+
 
 class BaremetalMultitenancyHybridBaseBM(
         BaremetalMultitenancyHybridBase):
@@ -889,9 +975,9 @@
                      ( r1 ) ------- netB --------
                        |              |       |
     --------- netA ------------    (bmB1)   (bmB2)
-            |        |              fipB1
+            |        |              fipbmB1
           (bmA1)   (bmA2)
-         fipbmA
+         fipbmA1
 
     * Test can ping fips fipbmA, fipA1, fipB1
     * Test each VM can reach other VMs via FIPs
@@ -942,6 +1028,8 @@
             cls.r1['id'], subnet_id=cls.subnetB['id'])
 
         cls.keypair = cls.create_keypair()
+        cls.snat_check_ip = (cls.r1["external_gateway_info"]
+                                   ["external_fixed_ips"][0]["ip_address"])
 
         cls.bmA1, cls.bmA1_ip, cls.bmA1_fip = cls.create_server(
             key_name=cls.keypair['name'],
@@ -1008,6 +1096,18 @@
             self.bmA1_fip, self.keypair['private_key'],
             self.bmB2_ip, conn_expected=True, timeout=self.ping_timeout)
 
+    def _test_connectivity_bma2_snat(self):
+        self.verify_l3_connectivity(
+            self.bmA2_ip, self.keypair['private_key'],
+            self.snat_check_ip, conn_expected=True, timeout=self.ping_timeout,
+            jump_host_ip=self.bmA1_fip)
+
+    def _test_connectivity_bmb2_snat(self):
+        self.verify_l3_connectivity(
+            self.bmB2_ip, self.keypair['private_key'],
+            self.snat_check_ip, conn_expected=True, timeout=self.ping_timeout,
+            jump_host_ip=self.bmB1_fip)
+
 
 class BaremetalMultitenancyHybridBaseBMGeneveGeneve(
         BaremetalMultitenancyHybridBaseBM):
@@ -1039,6 +1139,14 @@
     def test_connectivity_bma1_bmb2(self):
         self._test_connectivity_bma1_bmb2()
 
+    @decorators.idempotent_id('3ad949e2-2fd2-42d9-bace-e0c1aab5d21d')
+    def test_connectivity_bma2_snat(self):
+        self._test_connectivity_bma2_snat()
+
+    @decorators.idempotent_id('cb2a0a0c-1b3b-4a72-8e11-051b3e6cd578')
+    def test_connectivity_bmb2_snat(self):
+        self._test_connectivity_bmb2_snat()
+
 
 class BaremetalMultitenancyHybridBaseBMVxlanVxlan(
         BaremetalMultitenancyHybridBaseBM):
@@ -1070,6 +1178,14 @@
     def test_connectivity_bma1_bmb2(self):
         self._test_connectivity_bma1_bmb2()
 
+    @decorators.idempotent_id('0b9ae8ad-e566-49c6-92a5-64b3a86189c7')
+    def test_connectivity_bma2_snat(self):
+        self._test_connectivity_bma2_snat()
+
+    @decorators.idempotent_id('58e9878a-57fd-40d5-aeee-7200d799b059')
+    def test_connectivity_bmb2_snat(self):
+        self._test_connectivity_bmb2_snat()
+
 
 class BaremetalMultitenancyHybridBaseBMVlanVlan(
         BaremetalMultitenancyHybridBaseBM):
@@ -1101,6 +1217,14 @@
     def test_connectivity_bma1_bmb2(self):
         self._test_connectivity_bma1_bmb2()
 
+    @decorators.idempotent_id('0061ced9-1099-401b-a418-6acd6d5b0e9a')
+    def test_connectivity_bma2_snat(self):
+        self._test_connectivity_bma2_snat()
+
+    @decorators.idempotent_id('7f689624-3e59-4bca-818c-affbb414d1b8')
+    def test_connectivity_bmb2_snat(self):
+        self._test_connectivity_bmb2_snat()
+
 
 class BaremetalMultitenancyHybridBaseBMGeneveVLAN(
         BaremetalMultitenancyHybridBaseBM):
@@ -1132,6 +1256,14 @@
     def test_connectivity_bma1_bmb2(self):
         self._test_connectivity_bma1_bmb2()
 
+    @decorators.idempotent_id('7f0b6589-b535-425b-9880-b0c15c6b3b64')
+    def test_connectivity_bma2_snat(self):
+        self._test_connectivity_bma2_snat()
+
+    @decorators.idempotent_id('cede7117-18a6-4dca-ad2f-d68aec450cc0')
+    def test_connectivity_bmb2_snat(self):
+        self._test_connectivity_bmb2_snat()
+
 
 class BaremetalMultitenancyHybridBaseBMGeneveVXLAN(
         BaremetalMultitenancyHybridBaseBM):
@@ -1162,3 +1294,11 @@
     @decorators.idempotent_id('388a695f-c289-4d09-878b-1dc7d2b822ac')
     def test_connectivity_bma1_bmb2(self):
         self._test_connectivity_bma1_bmb2()
+
+    @decorators.idempotent_id('10e5429d-7534-4a65-b0ec-a1e4e0111ab5')
+    def test_connectivity_bma2_snat(self):
+        self._test_connectivity_bma2_snat()
+
+    @decorators.idempotent_id('c2811a5b-cf2b-48c4-a33f-c844855d89be')
+    def test_connectivity_bmb2_snat(self):
+        self._test_connectivity_bmb2_snat()
