<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: hairpin nat many vlans in Spark Firewall (SMB)</title>
    <link>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262851#M13418</link>
    <description>&lt;P&gt;I think I saw post about this before, will see if I can find it.&lt;/P&gt;</description>
    <pubDate>Fri, 14 Nov 2025 04:12:50 GMT</pubDate>
    <dc:creator>the_rock</dc:creator>
    <dc:date>2025-11-14T04:12:50Z</dc:date>
    <item>
      <title>hairpin nat many vlans</title>
      <link>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262850#M13417</link>
      <description>&lt;P&gt;Hi!&lt;/P&gt;&lt;P&gt;Accroding to &lt;A title="sk110019" href="https://support.checkpoint.com/results/sk/sk110019" target="_blank" rel="noopener"&gt;sk110019&lt;/A&gt;&lt;/P&gt;&lt;P&gt;I create Destination NAT, that I can see oryginally no NATed public IP accessing from Internet to forwarding my web server and this is fine and working simple.&lt;/P&gt;&lt;P&gt;How can I construct a hairpin NAT rule in the following scenario where we need to access from multiple VLANs to a web server where he is place in a different VLAN using a public IP address, but so that the web server logs must show the original IP private address of workstations.&lt;/P&gt;&lt;P&gt;I've try configure hairpin nat rule but only what I can get is all traffic from example vlan is hidden behind gateway and show on logs web server gateway ip address.&lt;/P&gt;&lt;P&gt;Any ideas how to get resolve this scenario?&lt;/P&gt;</description>
      <pubDate>Fri, 14 Nov 2025 02:47:22 GMT</pubDate>
      <guid>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262850#M13417</guid>
      <dc:creator>Askey_oot</dc:creator>
      <dc:date>2025-11-14T02:47:22Z</dc:date>
    </item>
    <item>
      <title>Re: hairpin nat many vlans</title>
      <link>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262851#M13418</link>
      <description>&lt;P&gt;I think I saw post about this before, will see if I can find it.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Nov 2025 04:12:50 GMT</pubDate>
      <guid>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262851#M13418</guid>
      <dc:creator>the_rock</dc:creator>
      <dc:date>2025-11-14T04:12:50Z</dc:date>
    </item>
    <item>
      <title>Re: hairpin nat many vlans</title>
      <link>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262921#M13429</link>
      <description>&lt;P&gt;I found below:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.checkpoint.com/t5/Security-Gateways/NAT-Loopback-Hairpin-NAT/m-p/238179" target="_blank"&gt;https://community.checkpoint.com/t5/Security-Gateways/NAT-Loopback-Hairpin-NAT/m-p/238179&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.checkpoint.com/t5/General-Topics/Hairpin-NAT-is-not-working/m-p/207912" target="_blank"&gt;https://community.checkpoint.com/t5/General-Topics/Hairpin-NAT-is-not-working/m-p/207912&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This AI answer seems pretty decent to me:&lt;/P&gt;
&lt;P data-start="311" data-end="585"&gt;There are three practical ways to solve this depending on what you can change in your environment. I’ll explain why the gateway SNATs, show the Check Point NAT approach to &lt;EM data-start="483" data-end="493"&gt;preserve&lt;/EM&gt; the original client IP, and then give two safer/cleaner alternatives (and their tradeoffs).&lt;/P&gt;
&lt;HR data-start="587" data-end="590" /&gt;
&lt;H1 data-start="592" data-end="628"&gt;Why the server sees the gateway IP&lt;/H1&gt;
&lt;P data-start="629" data-end="692"&gt;When an internal client connects to the server’s &lt;STRONG data-start="678" data-end="688"&gt;public&lt;/STRONG&gt; IP:&lt;/P&gt;
&lt;UL data-start="693" data-end="1261"&gt;
&lt;LI data-start="693" data-end="766"&gt;
&lt;P data-start="695" data-end="766"&gt;The gateway destination-NATs the destination to the internal server IP.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="767" data-end="924"&gt;
&lt;P data-start="769" data-end="924"&gt;If the server replies &lt;EM data-start="791" data-end="801"&gt;directly&lt;/EM&gt; to the client’s private IP (not via the gateway) the TCP conversation breaks (client expected replies from the public IP).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="925" data-end="1261"&gt;
&lt;P data-start="927" data-end="1261"&gt;To make replies return through the gateway (so it can reverse the destination NAT), the gateway often performs source NAT (hide/SNAT) of the client to the gateway IP. That guarantees the server’s reply goes back to the gateway, which then reverses NAT and sends it to the client — but now the server sees the gateway IP as the source.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1263" data-end="1396"&gt;This behavior and the SK that documents NAT loopback for Check Point are described in SK110019. &lt;SPAN class="" data-state="closed"&gt;&lt;SPAN class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]" data-testid="webpage-citation-pill"&gt;&lt;A class="flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!" href="https://support.checkpoint.com/results/sk/sk110019?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;&lt;SPAN class="relative start-0 bottom-0 flex h-full w-full items-center"&gt;&lt;SPAN class="flex h-4 w-full items-center justify-between overflow-hidden"&gt;&lt;SPAN class="max-w-[15ch] grow truncate overflow-hidden text-center"&gt;Check Point Support&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR data-start="1398" data-end="1401" /&gt;
&lt;H1 data-start="1403" data-end="1473"&gt;Option A — Keep the original client IP (Manual NAT + proper routing)&lt;/H1&gt;
&lt;P data-start="1474" data-end="1626"&gt;This is the approach that &lt;EM data-start="1500" data-end="1505"&gt;can&lt;/EM&gt; preserve original client IPs in server logs — but only if the server’s routing forces replies back through the firewall.&lt;/P&gt;
&lt;P data-start="1628" data-end="1680"&gt;Steps (Check Point / SmartConsole manual NAT style):&lt;/P&gt;
&lt;OL data-start="1682" data-end="2598"&gt;
&lt;LI data-start="1682" data-end="1809"&gt;
&lt;P data-start="1685" data-end="1809"&gt;Keep your existing external→internal static NAT that publishes the server on the public IP (so Internet users keep working).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="1811" data-end="2344"&gt;
&lt;P data-start="1814" data-end="1933"&gt;Add a &lt;STRONG data-start="1820" data-end="1834"&gt;Manual NAT&lt;/STRONG&gt; rule (place it above the automatic/Global rules) to handle internal clients hitting the public IP:&lt;/P&gt;
&lt;UL data-start="1937" data-end="2227"&gt;
&lt;LI data-start="1937" data-end="2031"&gt;
&lt;P data-start="1939" data-end="2031"&gt;Original Source: &lt;CODE data-start="1956" data-end="1981"&gt;&amp;lt;internal_VLAN_subnets&amp;gt;&lt;/CODE&gt; (or an object group containing all VLAN networks)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="2035" data-end="2082"&gt;
&lt;P data-start="2037" data-end="2082"&gt;Original Destination: &lt;CODE data-start="2059" data-end="2082"&gt;&amp;lt;public_IP_of_server&amp;gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="2086" data-end="2137"&gt;
&lt;P data-start="2088" data-end="2137"&gt;Translated Destination: &lt;CODE data-start="2112" data-end="2137"&gt;&amp;lt;internal_IP_of_server&amp;gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="2141" data-end="2227"&gt;
&lt;P data-start="2143" data-end="2227"&gt;Translated Source: &lt;STRONG data-start="2162" data-end="2174"&gt;Original&lt;/STRONG&gt; (i.e. &lt;EM data-start="2181" data-end="2189"&gt;do not&lt;/EM&gt; change the source) — this is the key.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="2232" data-end="2344"&gt;In SmartConsole the Translated Source column should be set to &lt;STRONG data-start="2294" data-end="2306"&gt;Original&lt;/STRONG&gt; or “No translation” for that traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="2346" data-end="2598"&gt;
&lt;P data-start="2349" data-end="2448"&gt;Make sure the server’s return path to those internal VLANs goes &lt;EM data-start="2413" data-end="2435"&gt;through the firewall&lt;/EM&gt;. Concretely:&lt;/P&gt;
&lt;UL data-start="2452" data-end="2598"&gt;
&lt;LI data-start="2452" data-end="2502"&gt;
&lt;P data-start="2454" data-end="2502"&gt;Server default gateway must be the firewall (or)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="2506" data-end="2598"&gt;
&lt;P data-start="2508" data-end="2598"&gt;Add static routes on the server for each client VLAN pointing to the firewall as next-hop.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-start="2600" data-end="3105"&gt;Why this works: the request arrives at the gateway, destination-NAT translates to the server IP while keeping client source intact; the server replies to the client IP but because the server sends the packets to the firewall (via its gateway or a specific route), replies will traverse the firewall and be handled in the same connection tracking entry — the gateway reverses destination NAT and the client sees responses from the expected public IP while the server saw the original client IP in its logs.&lt;/P&gt;
&lt;P data-start="3107" data-end="3115"&gt;Caveats:&lt;/P&gt;
&lt;UL data-start="3116" data-end="3624"&gt;
&lt;LI data-start="3116" data-end="3402"&gt;
&lt;P data-start="3118" data-end="3402"&gt;If the server has a direct route back to a client subnet (i.e., not via the firewall), replies will bypass the firewall and the TCP session will fail. That’s the usual reason admins see gateway IP logged: to force replies back through the gateway the gateway performs SNAT by default.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="3403" data-end="3550"&gt;
&lt;P data-start="3405" data-end="3550"&gt;If you have many VLANs, you must ensure the server has routes for all of them via the firewall (or the firewall is the server’s default gateway).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="3551" data-end="3624"&gt;
&lt;P data-start="3553" data-end="3624"&gt;You must place the Manual NAT rule correctly (above auto/Global rules).&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="3626" data-end="3755"&gt;Relevant Check Point doc and community posts describing both SK110019 and user experiences. &lt;SPAN class="" data-state="closed"&gt;&lt;SPAN class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]" data-testid="webpage-citation-pill"&gt;&lt;A class="flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!" href="https://support.checkpoint.com/results/sk/sk110019?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;&lt;SPAN class="relative start-0 bottom-0 flex h-full w-full items-center"&gt;&lt;SPAN class="flex h-4 w-full items-center justify-between"&gt;&lt;SPAN class="max-w-[15ch] grow truncate overflow-hidden text-center"&gt;Check Point Support&lt;/SPAN&gt;&lt;SPAN class="-me-1 flex h-full items-center rounded-full px-1 text-[#8F8F8F]"&gt;+1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR data-start="3757" data-end="3760" /&gt;
&lt;H1 data-start="3762" data-end="3832"&gt;Option B — Split-horizon (internal) DNS — recommended where feasible&lt;/H1&gt;
&lt;P data-start="3833" data-end="4024"&gt;Instead of forcing hairpin NAT, configure internal DNS so the public hostname resolves to the &lt;STRONG data-start="3927" data-end="3950"&gt;server’s private IP&lt;/STRONG&gt; for internal clients (per VLAN if needed). That is the cleanest solution:&lt;/P&gt;
&lt;UL data-start="4026" data-end="4217"&gt;
&lt;LI data-start="4026" data-end="4083"&gt;
&lt;P data-start="4028" data-end="4083"&gt;Clients access the server via internal IP (no hairpin).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="4084" data-end="4135"&gt;
&lt;P data-start="4086" data-end="4135"&gt;No NAT translation for internal→internal traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="4136" data-end="4177"&gt;
&lt;P data-start="4138" data-end="4177"&gt;Server logs contain the real client IP.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="4178" data-end="4217"&gt;
&lt;P data-start="4180" data-end="4217"&gt;No special NAT or routing gymnastics.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="4219" data-end="4229"&gt;Tradeoffs:&lt;/P&gt;
&lt;UL data-start="4230" data-end="4436"&gt;
&lt;LI data-start="4230" data-end="4298"&gt;
&lt;P data-start="4232" data-end="4298"&gt;You need to manage internal DNS views (or per-VLAN DNS overrides).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="4299" data-end="4436"&gt;
&lt;P data-start="4301" data-end="4436"&gt;If you have many VLANs or multiple DNS servers that’s additional administrative work, but it’s the most robust and performant solution.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="4438" data-end="4585"&gt;Many shops prefer split-horizon DNS specifically to avoid hairpin compromises (it’s the usual best practice). &lt;SPAN class="" data-state="closed"&gt;&lt;SPAN class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]" data-testid="webpage-citation-pill"&gt;&lt;A class="flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!" href="https://serverfault.com/questions/55611/loopback-to-forwarded-public-ip-address-from-local-network-hairpin-nat?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;&lt;SPAN class="relative start-0 bottom-0 flex h-full w-full items-center"&gt;&lt;SPAN class="flex h-4 w-full items-center justify-between overflow-hidden"&gt;&lt;SPAN class="max-w-[15ch] grow truncate overflow-hidden text-center"&gt;Server Fault&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR data-start="4587" data-end="4590" /&gt;
&lt;H1 data-start="4592" data-end="4669"&gt;Option C — Accept SNAT and map logs back (if you cannot change routing/DNS)&lt;/H1&gt;
&lt;P data-start="4670" data-end="4794"&gt;If you cannot change DNS or the server routing, you may be forced to accept SNAT (server will see gateway IP). In that case:&lt;/P&gt;
&lt;UL data-start="4795" data-end="5359"&gt;
&lt;LI data-start="4795" data-end="4836"&gt;
&lt;P data-start="4797" data-end="4836"&gt;Keep the hairpin SNAT for connectivity.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="4837" data-end="5359"&gt;
&lt;P data-start="4839" data-end="4949"&gt;Correlate logs on the firewall (or use X-Forwarded-For at the webserver/proxy) to recover original client IPs:&lt;/P&gt;
&lt;UL data-start="4952" data-end="5359"&gt;
&lt;LI data-start="4952" data-end="5106"&gt;
&lt;P data-start="4954" data-end="5106"&gt;Put a reverse proxy (or web server) that inserts &lt;CODE data-start="5003" data-end="5020"&gt;X-Forwarded-For&lt;/CODE&gt; with original client IP (the proxy sits in front of the webserver and is not SNATed).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5109" data-end="5206"&gt;
&lt;P data-start="5111" data-end="5206"&gt;Have the gateway forward actual client IPs via an HTTP header (if you can place a proxy or LB).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5209" data-end="5359"&gt;
&lt;P data-start="5211" data-end="5359"&gt;On Check Point, you can also log NAT translations and correlate firewall logs to server logs to map gateway IP connections back to original clients.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="5361" data-end="5371"&gt;Tradeoffs:&lt;/P&gt;
&lt;UL data-start="5372" data-end="5494"&gt;
&lt;LI data-start="5372" data-end="5431"&gt;
&lt;P data-start="5374" data-end="5431"&gt;Adds components (proxy, LB) or more log correlation work.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5432" data-end="5494"&gt;
&lt;P data-start="5434" data-end="5494"&gt;Not as clean as preserving IP in the web server access logs.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="5496" data-end="5663"&gt;Community notes call this the typical "disadvantage" of hairpin NAT — connectivity works but server loses the original source IP. &lt;SPAN class="" data-state="closed"&gt;&lt;SPAN class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]" data-testid="webpage-citation-pill"&gt;&lt;A class="flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!" href="https://community.checkpoint.com/t5/Security-Gateways/Hairpin-NAT-alternatives/td-p/244026?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;&lt;SPAN class="relative start-0 bottom-0 flex h-full w-full items-center"&gt;&lt;SPAN class="flex h-4 w-full items-center justify-between"&gt;&lt;SPAN class="max-w-[15ch] grow truncate overflow-hidden text-center"&gt;Check Point CheckMates&lt;/SPAN&gt;&lt;SPAN class="-me-1 flex h-full items-center rounded-full px-1 text-[#8F8F8F]"&gt;+1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR data-start="5665" data-end="5668" /&gt;
&lt;H1 data-start="5670" data-end="5723"&gt;Example SmartConsole manual NAT rule (illustrative)&lt;/H1&gt;
&lt;P data-start="5724" data-end="5779"&gt;(You don’t need to match labels exactly, just the idea)&lt;/P&gt;
&lt;P data-start="5781" data-end="5832"&gt;Manual NAT rule (placed above automatic NAT rules):&lt;/P&gt;
&lt;UL data-start="5834" data-end="6092"&gt;
&lt;LI data-start="5834" data-end="5908"&gt;
&lt;P data-start="5836" data-end="5908"&gt;Original Source: &lt;CODE data-start="5853" data-end="5869"&gt;VLANs_Networks&lt;/CODE&gt; (e.g. 10.10.0.0/16, 10.20.0.0/16, …)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5909" data-end="5962"&gt;
&lt;P data-start="5911" data-end="5962"&gt;Original Destination: &lt;CODE data-start="5933" data-end="5951"&gt;Server_Public_IP&lt;/CODE&gt; (object)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5963" data-end="5988"&gt;
&lt;P data-start="5965" data-end="5988"&gt;Service: &lt;CODE data-start="5974" data-end="5986"&gt;HTTP/HTTPS&lt;/CODE&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="5989" data-end="6036"&gt;
&lt;P data-start="5991" data-end="6036"&gt;Translated Destination: &lt;CODE data-start="6015" data-end="6034"&gt;Server_Private_IP&lt;/CODE&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6037" data-end="6092"&gt;
&lt;P data-start="6039" data-end="6092"&gt;Translated Source: &lt;STRONG data-start="6058" data-end="6070"&gt;Original&lt;/STRONG&gt; ← &lt;EM data-start="6074" data-end="6092"&gt;do not hide/SNAT&lt;/EM&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="6094" data-end="6106"&gt;Then verify:&lt;/P&gt;
&lt;UL data-start="6107" data-end="6259"&gt;
&lt;LI data-start="6107" data-end="6177"&gt;
&lt;P data-start="6109" data-end="6177"&gt;&lt;CODE data-start="6109" data-end="6129"&gt;fw ctl zdebug drop&lt;/CODE&gt; / logs for NAT if you have connection problems.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6178" data-end="6259"&gt;
&lt;P data-start="6180" data-end="6259"&gt;Ensure server gateway = firewall (or static routes for all VLANs via firewall).&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;HR data-start="6261" data-end="6264" /&gt;
&lt;H1 data-start="6266" data-end="6313"&gt;Short checklist you can run through right now&lt;/H1&gt;
&lt;OL data-start="6314" data-end="6826"&gt;
&lt;LI data-start="6314" data-end="6382"&gt;
&lt;P data-start="6317" data-end="6382"&gt;Create manual NAT rule as shown (Translated Source = Original).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6383" data-end="6494"&gt;
&lt;P data-start="6386" data-end="6494"&gt;Ensure server routes to all client VLANs via the firewall (server default gateway is firewall is easiest).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6495" data-end="6538"&gt;
&lt;P data-start="6498" data-end="6538"&gt;Install policy and test from one VLAN.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6539" data-end="6717"&gt;
&lt;P data-start="6542" data-end="6717"&gt;If server still sees gateway IP, check server routing (it is replying directly to client). If replies bypass the firewall you’ll need to add routes or use split-horizon DNS.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="6718" data-end="6826"&gt;
&lt;P data-start="6721" data-end="6826"&gt;If you cannot change routes/DNS, consider reverse proxy + X-Forwarded-For or server-side log correlation.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Sat, 15 Nov 2025 00:19:12 GMT</pubDate>
      <guid>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/262921#M13429</guid>
      <dc:creator>the_rock</dc:creator>
      <dc:date>2025-11-15T00:19:12Z</dc:date>
    </item>
    <item>
      <title>Re: hairpin nat many vlans</title>
      <link>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/263057#M13446</link>
      <description>&lt;P&gt;The hairpin NAT rules are necessary to force the traffic through the gateway so NAT can be performed on all packets in the connection.&lt;BR /&gt;Unless the VLANs terminate directly on the firewall AND the firewall is the default route for all affected VLANs, I don't see how you can achieve this.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Nov 2025 15:42:32 GMT</pubDate>
      <guid>https://community.checkpoint.com/t5/Spark-Firewall-SMB/hairpin-nat-many-vlans/m-p/263057#M13446</guid>
      <dc:creator>PhoneBoy</dc:creator>
      <dc:date>2025-11-17T15:42:32Z</dc:date>
    </item>
  </channel>
</rss>

