<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[KlarVPN]]></title><description><![CDATA[Online privacy, explained simply. Explore VPN guides, safer browsing tips, and KlarVPN updates to help you take control of your digital privacy.]]></description><link>https://klarvpn.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69a5d339e8e1f9df72cefe01/e177a792-75c2-49b7-99cc-c0adf0c934b6.png</url><title>KlarVPN</title><link>https://klarvpn.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Nov 2026 19:00:25 GMT</lastBuildDate><atom:link href="https://klarvpn.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Android Private DNS vs. VPN DNS: Which Resolver Is Your Phone Actually Using?]]></title><description><![CDATA[Understand Android Private DNS, VPN DNS and browser Secure DNS, then test which resolver handles your queries without mistaking changes for leaks.]]></description><link>https://klarvpn.hashnode.dev/android-private-dns-vs-vpn-dns-which-resolver-is-your-phone-actually-using</link><guid isPermaLink="true">https://klarvpn.hashnode.dev/android-private-dns-vs-vpn-dns-which-resolver-is-your-phone-actually-using</guid><category><![CDATA[Android]]></category><category><![CDATA[dns]]></category><category><![CDATA[privacy]]></category><category><![CDATA[networking]]></category><category><![CDATA[vpn]]></category><category><![CDATA[cybersecurity]]></category><dc:creator><![CDATA[Farrukh Tariq]]></dc:creator><pubDate>Fri, 13 Nov 2026 10:59:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a5d339e8e1f9df72cefe01/5f206993-527e-4294-9d9a-3f429d67c6ff.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your VPN is connected, but a browser DNS test reports a resolver you did not expect.</p>
<p>You check Android’s settings and find a custom Private DNS hostname. Then you open your browser settings and discover another option: Secure DNS.</p>
<p>Which one is handling your queries?</p>
<p><strong>Android’s Private DNS setting, a VPN’s DNS configuration and a browser’s resolver settings can all affect DNS behaviour. A resolver name in a test result does not, by itself, establish whether the query travelled outside the VPN tunnel.</strong></p>
<p>To investigate, separate three questions:</p>
<ol>
<li>Which resolver handles the query?</li>
<li>Is the connection to that resolver encrypted?</li>
<li>Which route carries that connection?</li>
</ol>
<p>Each question requires different evidence.</p>
<h2>Private DNS and a VPN solve different problems</h2>
<p>DNS translates names into records that applications use to locate services.</p>
<p>Android’s Private DNS setting concerns DNS resolution. Google’s Android Help documentation lists three options: Off, Automatic and Private DNS provider hostname.</p>
<p>Private DNS does not provide a general-purpose tunnel for the rest of your app traffic.</p>
<p>A VPN establishes a separate network connection and can configure both routes and DNS servers for traffic within its scope.</p>
<p>Android’s <code>VpnService.Builder</code> API reflects this distinction. It provides methods for adding routes and a separate <code>addDnsServer()</code> method for DNS configuration. Its documentation says that if no DNS server is specified, servers from the default network are used.</p>
<p>Consequently, “VPN connected” does not tell you everything about resolver selection.</p>
<p>It also does not mean the resolver must have the VPN provider’s name. A VPN service can use other resolver infrastructure.</p>
<h2>Your browser introduces another variable</h2>
<p>Some browsers perform DNS resolution through their own secure resolver configuration.</p>
<p>Google’s Chrome documentation distinguishes automatic Secure DNS from choosing a custom provider. It describes fallback to an unencrypted lookup when automatic mode encounters a resolution problem, while a custom-provider configuration does not use that same fallback.</p>
<p>Those are browser settings. They should not be treated as interchangeable with Android’s Private DNS setting.</p>
<p>Google also documents that Chrome can use its internal resolver instead of Android’s operating-system resolver.</p>
<p>That means a browser-based DNS test describes the lookups triggered by that browser under its current configuration. It does not automatically describe every other application on the phone.</p>
<p>A terminal lookup can differ too. The result depends on the tool, its resolver implementation and any explicitly selected server.</p>
<h2>Resolver selection is different from tunnel routing</h2>
<p>Consider this hypothetical result:</p>
<ul>
<li>A website sees your VPN exit IP.</li>
<li>Its DNS test reports a public resolver.</li>
<li>That resolver differs from the one you expected the VPN to use.</li>
</ul>
<p>One possible explanation is that the browser selected its own resolver and reached it through the VPN.</p>
<p>Another is that the browser or resolver connection followed a route outside the VPN.</p>
<p>The resolver name alone cannot distinguish those possibilities.</p>
<p>For this investigation, define the concern precisely:</p>
<ul>
<li><strong>Unexpected resolver:</strong> A different organisation handles the lookup than you intended.</li>
<li><strong>Tunnel bypass:</strong> DNS-related traffic travels outside the VPN route you intended.</li>
<li><strong>Unencrypted DNS transport:</strong> The resolver exchange lacks its own transport encryption.</li>
</ul>
<p>These conditions can overlap, but they are not equivalent.</p>
<p>For example, DNS without its own encryption can still be carried inside an encrypted VPN tunnel. Conversely, an encrypted DNS connection can travel outside that tunnel.</p>
<h2>Record the configuration before changing it</h2>
<p>For the <a href="https://www.klarvpn.com/download/vpn-for-android"><strong>VPN for Android</strong></a> involved in your test, record the app version, selected location, DNS options and any app exclusions.</p>
<p>Also note:</p>
<ul>
<li>Phone model and Android version.</li>
<li>Wi-Fi or mobile data.</li>
<li>Android Private DNS mode.</li>
<li>Configured provider hostname, if present.</li>
<li>Browser name, version and Secure DNS mode.</li>
<li>Whether the phone has a work profile or management policy.</li>
</ul>
<p>Write down the intended result as well.</p>
<p>For example:</p>
<blockquote>
<p>Browser queries should use the resolver selected in Android settings, and the resolver connection should travel through the VPN.</p>
</blockquote>
<p>That gives you a configuration to investigate. “The DNS test should look right” does not.</p>
<h2>Compare one variable at a time</h2>
<p>Use the same network, browser and DNS test service throughout the initial comparison.</p>
<p>A useful sequence is:</p>
<table>
<thead>
<tr>
<th>Test</th>
<th>VPN</th>
<th>Android Private DNS</th>
<th>Browser Secure DNS</th>
</tr>
</thead>
<tbody><tr>
<td>A</td>
<td>Disconnected</td>
<td>Automatic</td>
<td>Off</td>
</tr>
<tr>
<td>B</td>
<td>Connected</td>
<td>Automatic</td>
<td>Off</td>
</tr>
<tr>
<td>C</td>
<td>Connected</td>
<td>Provider hostname</td>
<td>Off</td>
</tr>
<tr>
<td>D</td>
<td>Connected</td>
<td>Same as C</td>
<td>Custom provider</td>
</tr>
</tbody></table>
<p>This sequence separates the effect of connecting the VPN, changing Android’s resolver preference and changing the browser’s resolver preference.</p>
<p>Run a state only where you control the settings and have a valid configuration for it. Do not override workplace policies for the experiment.</p>
<p>The disconnected state is a baseline observation. Use ordinary test traffic rather than sensitive activity.</p>
<p>For each state, record:</p>
<ul>
<li>Whether the VPN reports connected.</li>
<li>Whether fresh lookups succeed.</li>
<li>The resolver identities reported by the test.</li>
<li>The public IP observed by the website.</li>
<li>Any browser or Android error.</li>
<li>The time of the test.</li>
</ul>
<p>“Browser Secure DNS off” means that browser feature is disabled. It does not establish that Android’s DNS exchange is unencrypted.</p>
<h2>Use fresh lookups</h2>
<p>An old results page is not a new measurement.</p>
<p>DNS caches can also make a configuration change appear to have no effect. Prefer a test that generates fresh, unique lookup names, and follow its instructions for starting another run.</p>
<p>Repeat each state before drawing a conclusion.</p>
<p>If a result changes only once, record it as an observation to reproduce. Avoid building an explanation around a single inconsistent run.</p>
<h2>Understand what the test observes</h2>
<p>Many browser DNS tests trigger queries for names beneath a domain the test operator controls. The operator then observes which resolver infrastructure contacts its authoritative DNS servers.</p>
<p>That is useful evidence about the resolution chain.</p>
<p>It is not a complete recording of the connection from your phone to the resolver.</p>
<p>Forwarding arrangements can also mean the infrastructure observed by the test differs from the server first contacted by your device. Reported locations are not reliable evidence of the packet route.</p>
<p>A resolver appearing in another country is therefore a reason to inspect the configuration, not a complete leak diagnosis.</p>
<h2>For developers: inspect network properties carefully</h2>
<p>Android exposes DNS-related information through <code>LinkProperties</code>.</p>
<p>Relevant methods include:</p>
<ul>
<li><code>getDnsServers()</code></li>
<li><code>isPrivateDnsActive()</code></li>
<li><code>getPrivateDnsServerName()</code></li>
</ul>
<p>These describe the network represented by that <code>LinkProperties</code> object. They are not a universal summary of all DNS activity on the device.</p>
<p>The API documentation also distinguishes an active Private DNS configuration with a provider hostname from opportunistic mode, where Private DNS can be active without a configured hostname.</p>
<p>Record which network you inspected and when. A snapshot taken before a VPN transition may not represent the network used afterward.</p>
<p>Most importantly, network configuration does not prove that a browser with its own resolver used those settings. Combine configuration observations with the behaviour of the application you are testing.</p>
<h2>When lookups fail after a setting change</h2>
<p>A failed lookup can tell you that a combination is not working. It does not immediately identify why.</p>
<p>If resolution stops after entering a Private DNS hostname, check the hostname and whether that resolver is reachable under the current network and VPN configuration.</p>
<p>If only the browser fails after selecting a custom Secure DNS provider, investigate that browser configuration first.</p>
<p>Change one setting back and repeat the test. Preserve the error message before making further changes.</p>
<p>Avoid permanently disabling encrypted DNS simply because doing so restores browsing. First establish which component failed and what protection the alternative configuration provides.</p>
<h2>When you need stronger routing evidence</h2>
<p>If your main concern is tunnel bypass, a resolver list may not be enough.</p>
<p>You may need traffic observations on a network you control, VPN diagnostics, or a controlled test environment that can correlate resolver connections with tunnel activity.</p>
<p>Be careful with Android packet-capture apps: some use the VPN interface themselves. Starting one can replace or interfere with the VPN you intended to inspect, changing the experiment.</p>
<p>Encrypted DNS also limits what a capture reveals. A connection on port 443 is not automatically DNS over HTTPS, and the absence of readable DNS queries does not prove that no DNS traffic occurred.</p>
<p>Match the evidence to the claim you want to make.</p>
<h2>End with a specific finding</h2>
<p>A useful conclusion might be:</p>
<blockquote>
<p>The browser test reports a different resolver after I enable its custom Secure DNS provider. The website still sees the VPN exit IP. I have confirmed a resolver change, but I have not established the route to that resolver.</p>
</blockquote>
<p>Or:</p>
<blockquote>
<p>Fresh lookups fail only when the configured Private DNS hostname and the VPN are both active. Returning Private DNS to Automatic restores resolution in repeated tests.</p>
</blockquote>
<p>Both findings identify the next investigation.</p>
<p>Start with the application, record the settings, compare fresh results and separate resolver choice from routing. That is how an unexpected DNS result becomes a problem you can actually diagnose.</p>
]]></content:encoded></item><item><title><![CDATA[What Happens to Your iPhone’s VPN When You Switch from Wi-Fi to Mobile Data?]]></title><description><![CDATA[Learn how iPhone VPNs handle Wi-Fi-to-cellular switches, test reconnection, and distinguish connection pauses from possible leaks.]]></description><link>https://klarvpn.hashnode.dev/what-happens-to-your-iphone-s-vpn-when-you-switch-from-wi-fi-to-mobile-data</link><guid isPermaLink="true">https://klarvpn.hashnode.dev/what-happens-to-your-iphone-s-vpn-when-you-switch-from-wi-fi-to-mobile-data</guid><category><![CDATA[networking]]></category><category><![CDATA[iOS]]></category><category><![CDATA[privacy]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[vpn]]></category><dc:creator><![CDATA[Farrukh Tariq]]></dc:creator><pubDate>Tue, 10 Nov 2026 11:55:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a5d339e8e1f9df72cefe01/6067f868-9c2a-4c00-bf0b-911aa980e119.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You leave home while a page is loading on your iPhone. Wi-Fi disappears, mobile data takes over, and the page stalls. Your VPN briefly shows “Reconnecting” before the connection returns.</p>
<p>Did the VPN fail? Did the request escape the tunnel? Or did the phone simply need time to establish a working connection over a different network?</p>
<p><strong>Switching from Wi-Fi to mobile data changes the network carrying your VPN connection. Depending on the VPN implementation and configuration, the tunnel may adapt or reconnect. A pause alone does not establish that traffic bypassed it.</strong></p>
<p>To understand the transition, separate three things: the underlying network, the VPN tunnel and the application request.</p>
<h2>Your phone changes networks beneath the tunnel</h2>
<p>A VPN connection depends on an underlying internet connection.</p>
<p>At home, the phone reaches the VPN server through your Wi-Fi network and its internet provider. After the switch, it reaches the server through your mobile carrier.</p>
<p>The network path changes. The phone’s addressing, gateway and available connectivity can change with it.</p>
<p>The VPN must accommodate that transition. Some implementations support mechanisms that help preserve a session as the network changes. Others establish a new connection.</p>
<p>Even when the VPN recovers quickly, an application may still notice the interruption. A request might time out, a live connection might close, or a download might need to resume.</p>
<p>These outcomes describe availability. Establishing whether traffic travelled outside the intended tunnel requires additional evidence.</p>
<h2>Three states worth distinguishing</h2>
<p>A useful investigation records each layer separately.</p>
<h3>1. Underlying network state</h3>
<p>Can the phone reach the internet through Wi-Fi or cellular?</p>
<p>A Wi-Fi connection can remain associated with an access point even when that network has no working internet connection. Cellular reception also does not guarantee that a particular request will succeed.</p>
<h3>2. VPN state</h3>
<p>Is the VPN connecting, connected, reconnecting or disconnected?</p>
<p>Apple’s Network Extension framework exposes connection states through <code>NEVPNStatus</code>, including <code>connecting</code>, <code>connected</code>, <code>reasserting</code> and <code>disconnected</code>. Apple defines <code>reasserting</code> as the VPN being in the process of reconnecting.</p>
<p>The wording displayed by a particular VPN app may differ. Record the actual message rather than assuming every app presents those framework states directly.</p>
<h3>3. Application state</h3>
<p>Did the specific operation complete?</p>
<p>A page loading successfully tells you that its request found a working path. It does not, by itself, identify that path.</p>
<p>Likewise, an application error does not identify which layer failed.</p>
<h2>Reconnection and traffic blocking answer different questions</h2>
<p>Automatic reconnection concerns restoring the VPN connection.</p>
<p>Traffic blocking concerns what is allowed to happen while that connection is unavailable.</p>
<p>A VPN might reconnect automatically while a separate configuration controls whether affected traffic can continue outside the tunnel. A feature labelled “Kill Switch” needs to be evaluated according to its documented behaviour and platform support.</p>
<p>When reviewing an <a href="https://www.klarvpn.com/download/vpn-for-iphone"><strong>iPhone VPN</strong></a>, examine both questions:</p>
<ul>
<li>How does the connection recover after a network change?</li>
<li>What happens to traffic during the interruption?</li>
</ul>
<p>Apple also documents routing exceptions for some essential system traffic. Avoid interpreting “VPN connected” as proof that every packet generated by the device follows an identical route.</p>
<h2>Run a controlled handoff test</h2>
<p>A useful test compares stable connections with the transition between them.</p>
<p>Use ordinary, non-sensitive requests. Keep the VPN location and other settings unchanged during the initial comparison.</p>
<h3>Step 1: Record the configuration</h3>
<p>Note:</p>
<ul>
<li>iPhone model and iOS version.</li>
<li>VPN app version.</li>
<li>Selected VPN location.</li>
<li>Relevant reconnection and traffic-blocking settings.</li>
<li>Whether iCloud Private Relay or another proxy is active.</li>
<li>Whether the device has work or school management profiles.</li>
</ul>
<p>Private Relay and other intermediaries can affect how browser results appear. Record them before changing anything.</p>
<h3>Step 2: Establish stable baselines</h3>
<p>First, check behaviour while connected to Wi-Fi and the VPN.</p>
<p>Then check behaviour while connected to cellular and the VPN.</p>
<p>For each state, record whether a fresh request succeeds, the VPN’s reported status and the public IP observed by the same test endpoint.</p>
<p>If requests already fail on a stable cellular connection, investigate that before treating the handoff as the cause.</p>
<h3>Step 3: Trigger one controlled switch</h3>
<p>Start on Wi-Fi with the VPN connected.</p>
<p>Turn Wi-Fi off in Settings, allow cellular connectivity to take over, and attempt fresh requests during the transition.</p>
<p>Record the sequence rather than relying on a general impression:</p>
<table>
<thead>
<tr>
<th>Observation</th>
<th>What to record</th>
</tr>
</thead>
<tbody><tr>
<td>Network change</td>
<td>When Wi-Fi was disabled and cellular became available</td>
</tr>
<tr>
<td>VPN status</td>
<td>Exact status messages and their order</td>
</tr>
<tr>
<td>Request behaviour</td>
<td>Success, timeout or another error</td>
</tr>
<tr>
<td>Observed public IP</td>
<td>Address returned by each successful fresh check</td>
</tr>
<tr>
<td>Recovery</td>
<td>Whether requests resumed without manual intervention</td>
</tr>
</tbody></table>
<p>A screen recording can help align visible events. Review it for personal information before sharing it.</p>
<p>This tests a deliberate switch. Walking out of Wi-Fi range introduces different conditions, including a period of weak or unreliable connectivity. Test that separately if it matches the problem you experience.</p>
<h3>Step 4: Test the return journey</h3>
<p>Reconnect to Wi-Fi and repeat the observations.</p>
<p>Wi-Fi-to-cellular success does not establish that the reverse transition behaves identically.</p>
<p>If the destination Wi-Fi requires a sign-in page, complete the network’s access requirements before treating a failed VPN connection as a tunnel problem.</p>
<h3>Step 5: Repeat before changing settings</h3>
<p>One successful transition provides limited evidence.</p>
<p>Repeat the same sequence several times. Then change one relevant setting and compare again.</p>
<p>If you change the VPN location, browser configuration and network simultaneously, identifying the cause becomes much harder.</p>
<h2>Interpret results without overreaching</h2>
<h3>Requests pause, then resume through the VPN exit</h3>
<p>This is consistent with a temporary interruption followed by recovery.</p>
<p>It does not prove that no traffic bypassed the tunnel between observations. Manual checks sample moments; they do not continuously observe every connection.</p>
<h3>The VPN exit IP changes</h3>
<p>A new exit address can accompany a reconnection.</p>
<p>The address changing does not automatically mean the phone used its carrier’s public IP. Establish what the new address represents before drawing that conclusion.</p>
<h3>A fresh request appears to use a direct-network address</h3>
<p>This deserves investigation if the request was intended to remain inside the VPN.</p>
<p>Check whether the endpoint returned a current result, whether another relay affected the comparison, and whether the traffic falls within the VPN’s configured scope.</p>
<p>The finding becomes stronger when the request timestamp, server-observed address and VPN state line up.</p>
<h3>Requests stop until the VPN returns</h3>
<p>That may be consistent with traffic blocking during recovery.</p>
<p>It can also happen because the underlying network is temporarily unavailable. A blocked request alone does not distinguish those causes.</p>
<h2>For developers: observe requests at an endpoint you control</h2>
<p>A controlled HTTPS endpoint can provide clearer evidence than repeatedly refreshing an old results page.</p>
<p>Have a test client send a fresh request with a unique identifier. Record:</p>
<ul>
<li>Request identifier.</li>
<li>Server receipt time.</li>
<li>Source address observed at your trusted ingress.</li>
<li>Response status.</li>
<li>Client completion time or error.</li>
</ul>
<p>Keep the response small and disable caching for the test.</p>
<p>If your server sits behind a reverse proxy or CDN, distinguish the proxy’s address from the client address supplied by a trusted forwarding configuration. Do not trust arbitrary forwarding headers sent by the client.</p>
<p>Correlate those records with the handoff timeline.</p>
<p>This establishes what reached that endpoint. Requests that never arrive remain unobserved, and successful samples cannot rule out activity between them. Browser-based probes also describe browser traffic; they do not establish the route taken by every app.</p>
<h2>If the problem happens only during switching</h2>
<p>Use the stable baselines to narrow the next step.</p>
<ul>
<li><strong>Both networks work separately, but handoffs fail:</strong> focus on transition handling and reconnection.</li>
<li><strong>Cellular fails even before a handoff:</strong> check cellular access, signal conditions and VPN connectivity on that network.</li>
<li><strong>Only one app fails after recovery:</strong> investigate that app’s connection lifecycle and retry behaviour.</li>
<li><strong>Wi-Fi fails after joining a new hotspot:</strong> check whether the network requires sign-in or has connectivity restrictions.</li>
</ul>
<p>For application developers, a network transition is also a reason to review retry logic. Retrying a read request differs from repeating an operation that creates a payment, order or other record. Use appropriate idempotency controls before automatically resubmitting writes.</p>
<h2>Report a sequence someone can reproduce</h2>
<p>“VPN breaks when I leave home” is difficult to diagnose.</p>
<p>A more useful report identifies the starting network, the change, the VPN status, the affected request and what restored connectivity.</p>
<p>For example:</p>
<blockquote>
<p>On Wi-Fi, requests succeed through the expected VPN exit. After switching to cellular, the app reports reconnecting and fresh requests time out. Requests resume after the VPN returns to connected. The issue occurred on three of five switches.</p>
</blockquote>
<p>That report gives the next investigation a clear starting point.</p>
<p>The goal is to establish what happened during the transition: whether connectivity disappeared, the VPN reconnected, an application failed to recover, or a request used an unintended route.</p>
]]></content:encoded></item><item><title><![CDATA[Your VPN Changed Your IPv4 Address—What About IPv6?]]></title><description><![CDATA[Learn how to test IPv4 and IPv6 separately with a VPN, interpret unavailable or unexpected IPv6 results, and identify when routing evidence is needed]]></description><link>https://klarvpn.hashnode.dev/your-vpn-changed-your-ipv4-address-what-about-ipv6</link><guid isPermaLink="true">https://klarvpn.hashnode.dev/your-vpn-changed-your-ipv4-address-what-about-ipv6</guid><category><![CDATA[ipv6]]></category><category><![CDATA[networking]]></category><category><![CDATA[IPv4]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[privacy]]></category><category><![CDATA[vpn]]></category><dc:creator><![CDATA[Farrukh Tariq]]></dc:creator><pubDate>Thu, 05 Nov 2026 11:30:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a5d339e8e1f9df72cefe01/29446875-4125-4b0f-bc21-9f3ca30989ad.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You connect your VPN and check your public IP address. It changes to the expected VPN location.</p>
<p>That confirms something useful about the connection you tested. But if the result shows only an IPv4 address, what have you established about IPv6?</p>
<p><strong>A changed IPv4 address does not establish that IPv6 traffic follows the same path.</strong> On a network that supports both address families, test them separately and compare the results with the VPN disconnected and connected.</p>
<p>An IPv6 result also needs interpretation. A visible IPv6 address is not automatically a leak, and an unavailable IPv6 connection is not automatically a failure.</p>
<p>The question is whether traffic follows the policy you intended.</p>
<h2>IPv4 and IPv6 can behave differently</h2>
<p>IPv4 and IPv6 are separate address families. A device can have both available at the same time, commonly called a dual-stack connection.</p>
<p>A VPN configuration might:</p>
<ul>
<li>Carry both through its tunnel.</li>
<li>Carry IPv4 and block IPv6.</li>
<li>Apply different rules to each address family.</li>
<li>Exclude particular applications or destinations.</li>
</ul>
<p>The configuration matters more than the presence of an IPv6 address alone.</p>
<p>RFC 7359 documents VPN traffic leakage scenarios involving dual-stack hosts. Its accompanying IESG note also makes a broader point: traffic escaping an intended VPN policy is not exclusively an IPv6 problem.</p>
<p>Treat that document as an explanation of the underlying risk, rather than evidence about a current VPN provider.</p>
<h2>Why one successful IP check is incomplete</h2>
<p>An ordinary website request does not necessarily exercise both address families.</p>
<p>When a destination supports IPv4 and IPv6, applications can choose between available addresses. Connection strategies such as Happy Eyeballs try alternatives to reduce delays when one path is slow or unavailable.</p>
<p>A page loading successfully therefore does not tell you which family was used.</p>
<p>Start with three separate observations:</p>
<ol>
<li>Does an IPv4 connection succeed?</li>
<li>Does an IPv6 connection succeed?</li>
<li>Which source address does the destination observe for each?</li>
</ol>
<p>A local address shown in network settings and a public source address observed by a server are different measurements. Record which one your tool reports.</p>
<h2>Establish a baseline before connecting</h2>
<p>Use the same device, network and application throughout the initial comparison.</p>
<p>Record:</p>
<ul>
<li>Operating system and VPN application versions.</li>
<li>Whether the VPN is device-wide or browser-only.</li>
<li>Any split-tunnelling exclusions.</li>
<li>Whether an explicit proxy is configured.</li>
<li>Public IPv4 and IPv6 observations with the VPN disconnected.</li>
<li>Whether IPv6 works at all before the VPN connects.</li>
</ul>
<p>That last point is important.</p>
<p>If IPv6 already fails without the VPN, a failed IPv6 check after connecting cannot demonstrate that the VPN blocked it. Your baseline never established a working IPv6 path.</p>
<p>For baseline checks, keep unrelated applications paused if you do not want them communicating outside the VPN.</p>
<h2>Test each address family explicitly</h2>
<p>A browser test with separate IPv4 and IPv6 checks is a useful starting point.</p>
<p>For a command-line comparison, curl can request each address family separately.</p>
<p>Use a trusted HTTPS endpoint that supports both IPv4 and IPv6 and reports the source address it observes. This can be an endpoint you operate or an approved diagnostic service.</p>
<p>The following example uses a placeholder rather than assuming a particular service:</p>
<pre><code class="language-bash">vpn_test_url='REPLACE_WITH_YOUR_DUAL_STACK_IP_ECHO_URL'

curl -4 --connect-timeout 5 --max-time 15 \
  "$vpn_test_url"

curl -6 --connect-timeout 5 --max-time 15 \
  "$vpn_test_url"
</code></pre>
<p>Replace the placeholder with the complete endpoint URL.</p>
<p>Run both commands before connecting the VPN, then repeat after the connection has settled. Save the response and any error message for each run.</p>
<p>These examples use a POSIX-style shell. In Windows PowerShell, use <code>curl.exe</code> when you intend to invoke the curl executable.</p>
<h3>Keep proxy behaviour in view</h3>
<p>If curl uses an explicit proxy, the test may measure a proxy connection rather than the direct path you intended to investigate.</p>
<p>Record proxy settings before interpreting the result. Do not change managed proxy policies just to make a test pass.</p>
<p>Also remember that terminal curl and a browser may have different VPN exclusions, proxy settings or networking behaviour. A successful curl check does not automatically validate the browser.</p>
<h2>Compare the results without overclaiming</h2>
<p>Use the baseline to interpret what changes:</p>
<table>
<thead>
<tr>
<th>Observation</th>
<th>What it establishes</th>
<th>What to investigate</th>
</tr>
</thead>
<tbody><tr>
<td>IPv6 fails before and after connecting</td>
<td>No successful IPv6 connection was observed in either state</td>
<td>Baseline connectivity and endpoint support</td>
</tr>
<tr>
<td>IPv6 works before connecting but fails afterward</td>
<td>IPv6 became unavailable under the tested VPN configuration</td>
<td>Whether blocking is intended, or another failure occurred</td>
</tr>
<tr>
<td>IPv6 works through an address associated with VPN infrastructure</td>
<td>The endpoint observed that source address for this request</td>
<td>Whether it matches the provider’s documented behaviour</td>
</tr>
<tr>
<td>IPv6 still appears associated with the access network while IPv4 changes</td>
<td>A possible mismatch with the intended VPN policy</td>
<td>Exclusions, address attribution and the actual route</td>
</tr>
<tr>
<td>Both checks succeed through expected addresses</td>
<td>Those requests behaved as expected at that time</td>
<td>Other applications and connection transitions</td>
</tr>
</tbody></table>
<p>“IPv6 unavailable” can be consistent with a VPN that intentionally blocks IPv6.</p>
<p>However, a timeout alone does not identify the cause. It can also reflect a destination problem, filtering or a connectivity failure.</p>
<p>Likewise, an unexpected address deserves investigation before you label it a leak. Confirm which application made the request and whether that application was meant to use the VPN.</p>
<h2>Do not rely only on exact address matches</h2>
<p>IPv6 addresses can change over time.</p>
<p>RFC 8981 describes temporary addresses intended to reduce the tracking implications of stable interface identifiers. As a result, comparing only the complete address string can miss a continuing relationship with the same access network.</p>
<p>If an address changes, investigate the allocated network prefix and provider information as well.</p>
<p>These are clues, not a substitute for route evidence. Geolocation databases can also be inaccurate, and matching countries do not establish matching network paths.</p>
<p>A VPN exit and your ordinary internet connection might be in the same country.</p>
<h2>Separate IPv6 connectivity from DNS and WebRTC</h2>
<p>A request sent over IPv6, a DNS lookup and a WebRTC address observation answer different questions.</p>
<p>Keep <a href="https://www.klarvpn.com/blog/vpn-leak-test"><strong>IP, DNS and WebRTC checks</strong></a> distinct rather than treating every unexpected result as the same type of leak.</p>
<p>For example:</p>
<ul>
<li>An IPv6 HTTPS request shows how that application reached a destination.</li>
<li>A DNS test investigates resolution behaviour.</li>
<li>A WebRTC test examines addresses or candidates exposed through browser functionality.</li>
</ul>
<p>An address appearing in a browser diagnostic does not necessarily establish that a normal web request used it.</p>
<p>State what the test actually observed before drawing a wider conclusion.</p>
<h2>When an unexpected result needs route evidence</h2>
<p>If IPv6 appears to bypass the policy you intended, inspect the configuration before changing it.</p>
<p>Check whether:</p>
<ul>
<li>The tested application is excluded through split tunnelling.</li>
<li>The VPN documents tunnelling or blocking IPv6.</li>
<li>Another VPN, proxy or network extension affects the application.</li>
<li>The result changes after a network transition or VPN reconnect.</li>
</ul>
<p>For a deeper investigation, routing information and a packet capture on a device you control can help establish the path to the test destination.</p>
<p>Interpret the interfaces carefully. A physical network interface also carries the VPN’s encrypted outer connection. Seeing packets there is expected.</p>
<p>The distinction is whether the application’s connection reaches its destination directly or is carried inside the tunnel. Do not disable protections or force traffic onto another interface and then treat that altered configuration as evidence about the original one.</p>
<h2>Retest the conditions you actually use</h2>
<p>A check performed on one Wi-Fi network describes that test environment.</p>
<p>Repeat the relevant checks after changes such as:</p>
<ul>
<li>Moving between Wi-Fi and mobile data.</li>
<li>Reconnecting the VPN.</li>
<li>Changing split-tunnelling settings.</li>
<li>Updating the VPN application.</li>
</ul>
<p>Separate observations made after a connection settles from observations made during a transition. A passing steady-state check does not establish what happened while the VPN was reconnecting.</p>
<p>Avoid permanently disabling IPv6 simply because a website reports an unfamiliar address. First determine whether the behaviour conflicts with the VPN’s intended policy and supported configuration.</p>
<h2>Write a precise conclusion</h2>
<p>Instead of:</p>
<blockquote>
<p>My IPv4 address changed, so everything is protected.</p>
</blockquote>
<p>Write:</p>
<blockquote>
<p>The IPv4 test used the expected VPN address. IPv6 was unavailable after connecting, and the provider documents that behaviour as intentional.</p>
</blockquote>
<p>Or:</p>
<blockquote>
<p>Both address families worked, but the IPv6 result appeared associated with my access network. I still need to verify the application’s exclusions and route.</p>
</blockquote>
<p>Those statements distinguish observation, documented behaviour and unresolved questions.</p>
<p>A useful VPN check covers the paths your device can use. Test IPv4 and IPv6 separately, keep the conditions consistent, and let the evidence determine the conclusion.</p>
]]></content:encoded></item><item><title><![CDATA[Does DNS over HTTPS Cause VPN Leaks? How to Check Your Browser’s DNS Path]]></title><description><![CDATA[Learn how DNS over HTTPS interacts with a VPN, why unexpected resolvers do not automatically prove a leak, & how to investigate your browsers DNS path]]></description><link>https://klarvpn.hashnode.dev/does-dns-over-https-cause-vpn-leaks-how-to-check-your-browser-s-dns-path</link><guid isPermaLink="true">https://klarvpn.hashnode.dev/does-dns-over-https-cause-vpn-leaks-how-to-check-your-browser-s-dns-path</guid><category><![CDATA[dns]]></category><category><![CDATA[networking]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[vpn]]></category><category><![CDATA[privacy]]></category><dc:creator><![CDATA[Farrukh Tariq]]></dc:creator><pubDate>Tue, 03 Nov 2026 17:09:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a5d339e8e1f9df72cefe01/570e8b02-65a6-4c67-8652-1d100775872e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your VPN is connected. An IP check shows the expected VPN address. Then a DNS test reports a resolver you do not recognise.</p>
<p>You enable DNS over HTTPS in your browser, repeat the test and get another result.</p>
<p>Is your VPN leaking DNS requests, or is your browser simply using a different resolver?</p>
<p><strong>DNS over HTTPS does not automatically cause a VPN leak. It changes how DNS queries reach a resolver. Whether that connection travels through the VPN depends on routing, exclusions and the software involved.</strong></p>
<p>To investigate the result, separate three questions:</p>
<ol>
<li>Who resolves the query?</li>
<li>How is the query encrypted?</li>
<li>Which network path carries it?</li>
</ol>
<p>A resolver name alone cannot answer all three.</p>
<h2>Resolver, encryption and route are different things</h2>
<p>DNS translates domain names into information your device can use to establish a connection.</p>
<p>Ordinary applications often ask the operating system to perform that lookup. A browser with its own DNS over HTTPS configuration can instead send queries to a selected resolver over HTTPS.</p>
<p>RFC 8484 defines this exchange. HTTPS protects the communication between the client and the DoH service; it does not prevent that resolver from processing the query.</p>
<p>The network route is a separate layer.</p>
<p>A browser’s connection to a DoH resolver might travel through the VPN tunnel. It might take another route if the browser is excluded from the VPN, split tunnelling applies or the configuration behaves differently than expected.</p>
<p>This distinction matters:</p>
<p><strong>Using a resolver other than the VPN provider’s resolver is not, by itself, proof that traffic bypassed the VPN tunnel.</strong></p>
<p>It may still be a configuration you did not intend. But identifying the resolver and establishing the route require different evidence.</p>
<h2>What a browser DNS test tells you</h2>
<p>Many DNS test websites trigger lookups for unique names under a domain they control. Their infrastructure can then observe which resolver contacts the authoritative DNS server.</p>
<p>That helps identify the resolver—or forwarding infrastructure—involved in those lookups.</p>
<p>It does not automatically reveal the entire journey from your browser to that resolver.</p>
<p>Consider a hypothetical result:</p>
<ul>
<li>The website sees a VPN exit address.</li>
<li>The DNS test reports your browser’s chosen public resolver.</li>
<li>The resolver’s reported location differs from the VPN location.</li>
</ul>
<p>That result deserves investigation, but it does not independently establish a tunnel bypass. Forwarding, distributed resolver infrastructure and imperfect location databases can complicate interpretation.</p>
<p>Keep <a href="https://www.klarvpn.com/blog/vpn-leak-test"><strong>IP, DNS and WebRTC checks</strong></a> separate. Each examines a different part of connection behaviour.</p>
<h2>Browser DNS settings can differ from system settings</h2>
<p>A browser may use its own resolver configuration even when other applications use the operating system’s DNS service.</p>
<p>That can explain why a browser test and a terminal lookup produce different results.</p>
<p>For example, a command such as <code>nslookup</code> or <code>dig</code> does not necessarily reproduce the browser’s resolution path. Its behaviour depends on the tool, operating system and configuration. You cannot assume a successful terminal lookup verifies browser DoH.</p>
<p>Firefox also has different protection levels rather than one universal DoH behaviour.</p>
<p>Mozilla’s documentation describes Default Protection as responsive to network conditions, including VPN detection and enterprise policies. Other levels can use a selected provider more consistently, with different failure behaviour.</p>
<p>Record the actual mode and status shown in your browser. “Secure DNS enabled” is too vague for a useful test record.</p>
<h2>Fallback changes the question</h2>
<p>What happens when the configured DoH service cannot answer?</p>
<p>Depending on the browser’s mode and policies, it may try another resolver, use system DNS or report an error.</p>
<p>Mozilla’s Firefox administrator documentation explicitly distinguishes configurations that allow system-resolver fallback from those that require DoH.</p>
<p>But fallback alone does not prove a leak.</p>
<p>If the system resolver’s traffic remains inside the VPN tunnel, falling back to it does not automatically expose the lookup outside that tunnel. If the fallback path bypasses the tunnel, the privacy outcome differs.</p>
<p>The practical question is:</p>
<blockquote>
<p>When resolution changes, where does the replacement traffic go?</p>
</blockquote>
<p>Avoid assuming that a strict DoH setting fixes every routing problem. It may change DNS failure behaviour without correcting the underlying VPN configuration.</p>
<h2>Run a controlled comparison</h2>
<p>Use this as an investigation method, rather than a claim that any particular browser or VPN has been tested.</p>
<h3>1. Record the starting configuration</h3>
<p>Note:</p>
<ul>
<li>Operating system and browser versions.</li>
<li>VPN application version.</li>
<li>Whether you use a device-wide VPN, browser proxy or extension.</li>
<li>Whether the browser is excluded through split tunnelling.</li>
<li>Browser DNS mode and selected resolver.</li>
<li>Any custom system DNS configuration.</li>
</ul>
<p>Keep the network connection unchanged during the initial comparison.</p>
<h3>2. Compare four states</h3>
<p>Where you control the settings, compare these combinations:</p>
<table>
<thead>
<tr>
<th>Test</th>
<th>VPN</th>
<th>Browser DoH</th>
<th>Record</th>
</tr>
</thead>
<tbody><tr>
<td>A</td>
<td>Disconnected</td>
<td>Off</td>
<td>Public IP and observed resolvers</td>
</tr>
<tr>
<td>B</td>
<td>Connected</td>
<td>Off</td>
<td>Changes after VPN connection</td>
</tr>
<tr>
<td>C</td>
<td>Connected</td>
<td>Explicitly configured</td>
<td>Changes after browser DNS selection</td>
</tr>
<tr>
<td>D</td>
<td>Disconnected</td>
<td>Same as C</td>
<td>Results without the VPN</td>
</tr>
</tbody></table>
<p>“Off” here means the browser’s DoH setting is off. The operating system may still use encrypted DNS.</p>
<p>Treat disconnected tests as baseline observations, not protected browsing sessions.</p>
<h3>3. Change one setting at a time</h3>
<p>Use the same test service and record each result before changing anything else.</p>
<p>A fresh test session that generates new lookup names helps reduce confusion from cached results. Follow the service’s instructions and avoid comparing an old results page with a new configuration.</p>
<p>If several settings change together, you lose the ability to identify which change affected the outcome.</p>
<h3>4. Write observations before conclusions</h3>
<p>Useful observations include:</p>
<ul>
<li>“The resolver changed after enabling browser DoH.”</li>
<li>“The public IP remained the VPN address.”</li>
<li>“The browser reported that secure DNS was inactive.”</li>
<li>“Resolution failed in one configuration.”</li>
</ul>
<p>Avoid immediately translating these into “VPN broken” or “no leak.”</p>
<p>The comparison narrows the investigation. It does not fully establish packet routing.</p>
<h2>When you need network-level evidence</h2>
<p>If the browser results remain ambiguous, inspect traffic on a device and network you control.</p>
<p>A packet capture can help establish whether traffic to a resolver endpoint appears directly on a physical interface or is carried inside the VPN’s outer connection.</p>
<p>Interpret captures carefully:</p>
<ul>
<li>A physical interface carries encrypted VPN packets too; seeing traffic there is expected.</li>
<li>Plain DNS on port 53 is only one case. Encrypted DNS uses other transports.</li>
<li>A port 443 connection is not automatically DoH.</li>
<li>The absence of readable DNS does not establish the absence of DNS-related traffic.</li>
<li>Timing, interface selection, endpoint identification and routing information all matter.</li>
</ul>
<p>For encrypted connections, metadata and routing observations may help establish the path without exposing query contents.</p>
<p>Captures can contain sensitive information. Keep them local and avoid sharing raw recordings unnecessarily.</p>
<h2>Use the result to identify the next question</h2>
<p>An unexpected resolver can mean several things: an intentional browser setting, a forwarding arrangement, a fallback, or an unintended route.</p>
<p>The useful outcome is a specific finding.</p>
<p>Instead of:</p>
<blockquote>
<p>My DNS test shows another provider, so the VPN must be leaking.</p>
</blockquote>
<p>Aim for:</p>
<blockquote>
<p>My browser uses a different resolver when DoH is enabled. I have confirmed the resolver change, but I still need to verify whether its connection travels through the VPN.</p>
</blockquote>
<p>That statement tells you what you observed and what remains unresolved.</p>
<p>Before changing more settings, write down the resolver, transport and route you intended to use. Then investigate where the observed behaviour differs.</p>
]]></content:encoded></item></channel></rss>