{"id":17288,"date":"2026-05-20T08:44:41","date_gmt":"2026-05-20T15:44:41","guid":{"rendered":"https:\/\/jasonsblog.ddns.net\/?p=17288"},"modified":"2026-05-20T08:44:41","modified_gmt":"2026-05-20T15:44:41","slug":"exit-ip-fingerprinting-between-vpn-servers","status":"publish","type":"post","link":"https:\/\/jasonsblog.ddns.net\/index.php\/2026\/05\/20\/exit-ip-fingerprinting-between-vpn-servers\/","title":{"rendered":"Exit IP Fingerprinting Between VPN Servers"},"content":{"rendered":"\n<p>Something to be aware of depending on your threat model.<\/p>\n\n\n\n<p><a href=\"https:\/\/mullvad.net\/en\/blog\/2026\/5\/20\/exit-ip-fingerprinting-between-vpn-servers\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/mullvad.net\/en\/blog\/2026\/5\/20\/exit-ip-fingerprinting-between-vpn-servers<\/a><\/p>\n\n\n<div class=\"wp-block-ub-divider ub_divider ub-divider-orientation-horizontal\" id=\"ub_divider_3b888424-92ac-432f-92f8-a7561493e1b6\"><div class=\"ub_divider_wrapper\" style=\"position: relative; margin-bottom: 2px; width: 100%; height: 2px; \" data-divider-alignment=\"center\"><div class=\"ub_divider_line\" style=\"border-top: 2px solid #ccc; margin-top: 2px; \"><\/div><\/div><\/div>\n\n\n<p>On Friday the 15th of May, we <a href=\"https:\/\/tmctmt.com\/posts\/mullvad-exit-ips-as-a-fingerprinting-vector\/\" target=\"_blank\" rel=\"noreferrer noopener\">became aware<\/a> of a fingerprinting issue affecting Mullvad users.<\/p>\n\n\n\n<p>When a user switches from one VPN server to another, this sometimes makes it possible for services such as websites to confidently guess that the same user that connected from the new VPN server is the one that connected from the previous VPN server.<\/p>\n\n\n\n<p>This does not reveal the identity of the user. It can however reveal the fact that someone that previously connected from one VPN server has now connected from another VPN server.<\/p>\n\n\n\n<p>Fingerprinting is telling devices apart by looking at properties that make them unique or close to it. Fingerprinting is a problem in many domains. The Mullvad Browser and <a href=\"https:\/\/mullvad.net\/en\/vpn\/daita\" target=\"_blank\" rel=\"noreferrer noopener\">DAITA<\/a> are examples of protections against fingerprinting in <a href=\"https:\/\/mullvad.net\/en\/browser\/things-to-look-for-when-choosing-a-browser\" target=\"_blank\" rel=\"noreferrer noopener\">web browsers<\/a> and traffic analysis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How it works<\/h3>\n\n\n\n<p>Each VPN server has many users. For both IPv4 and IPv6 every user will be assigned one exit IP address on the server from which the user&#8217;s traffic will be sent out to the internet. There are technical limitations to how many users can use the same exit address, which is why servers have a range of several exit addresses. Each user device has a unique WireGuard key used to encrypt the connection. There is also an internal tunnel address that is usually but not always correlated with the user\u2019s WireGuard key.<\/p>\n\n\n\n<p>The issue arises when connecting to different VPN servers with the same internal tunnel address. Then the user is likely to be assigned an exit address with the same relative position in each VPN server&#8217;s range of exit addresses. If for example this is 40%, then it will be an exit address about 40% into in the range on all VPN servers.<\/p>\n\n\n\n<p><strong>Server A<\/strong><\/p>\n\n\n\n<p>1.1.1.1<br>1.1.1.2<br>1.1.1.3<br>1.1.1.4 <strong>&lt;&#8211;<\/strong><br>1.1.1.5<br>1.1.1.6<br>1.1.1.7<br>1.1.1.8<br>1.1.1.9<\/p>\n\n\n\n<p><strong>Server B<\/strong><\/p>\n\n\n\n<p>2.2.2.101<br>2.2.2.102<br>2.2.2.103<br>2.2.2.104 <strong>&lt;&#8211;<\/strong><br>2.2.2.105<br>2.2.2.106<br>2.2.2.107<br>2.2.2.108<br>2.2.2.109<\/p>\n\n\n\n<p>Usually, lots of users are assigned to every exit address so this will not provide certainty but in many cases good guesses can be made.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What should I do?<\/h3>\n\n\n\n<p>Depending on your threat model, you only need to change your behavior if you change VPN servers specifically to stop the ability to link what you do on one server to what you do on another. In this case, our recommendation would be to log out and log in again in the Mullvad app if switching servers. This will regenerate the WireGuard key and change the internal IP address.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is being done<\/h3>\n\n\n\n<p>Going forward, our new method to assign which exit IP addresses someone is using on one VPN server, will give no information on which exit address is used on another VPN server, or by another user on the same server. This change is currently being tested and is planned to start being rolled out to our VPN servers in the coming weeks. Progress updates will be available <a href=\"https:\/\/mullvad.net\/help\/exit-ip-vpn-servers-mitigation-rollout\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Something to be aware of depending on your threat model. https:\/\/mullvad.net\/en\/blog\/2026\/5\/20\/exit-ip-fingerprinting-between-vpn-servers On Friday the 15th of May, we became aware of a fingerprinting issue affecting Mullvad users. When a user switches from one VPN server to another, this sometimes makes it possible for services such as websites to confidently guess that the same user that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-17288","post","type-post","status-publish","format-standard","hentry","category-tech"],"blocksy_meta":[],"featured_image_src":null,"author_info":{"display_name":"Jason","author_link":"https:\/\/jasonsblog.ddns.net\/index.php\/author\/jturning\/"},"_links":{"self":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/17288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/comments?post=17288"}],"version-history":[{"count":1,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/17288\/revisions"}],"predecessor-version":[{"id":17289,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/17288\/revisions\/17289"}],"wp:attachment":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/media?parent=17288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/categories?post=17288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/tags?post=17288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}