[GH-ISSUE #2522] Netbird will not work when any VPN is active. #5170

Open
opened 2026-08-05 01:01:45 -04:00 by saavagebueno · 16 comments
Owner

Originally created by @ismail0234 on GitHub (Sep 3, 2024).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/2522

Describe the problem

If programs such as AvastVPN/NordVPN are active, peers cannot be pinged.

To Reproduce

Steps to reproduce the behavior:

  1. Install Avast VPN.
  2. Assign 2 peers to the same group and allow ICMP type in the group policy.
  3. Peers cannot ping each other.

Expected behavior

While the VPN is active, peers should be able to ping each other without any problems.

Are you using NetBird Cloud?

No, Self Hosted.

NetBird version

0.28.7

NetBird status -dA output:

Do you face any (non-mobile) client issues?

Screenshots

Additional context

Originally created by @ismail0234 on GitHub (Sep 3, 2024). Original GitHub issue: https://github.com/netbirdio/netbird/issues/2522 **Describe the problem** If programs such as AvastVPN/NordVPN are active, peers cannot be pinged. **To Reproduce** Steps to reproduce the behavior: 1. Install Avast VPN. 2. Assign 2 peers to the same group and allow ICMP type in the group policy. 3. Peers cannot ping each other. **Expected behavior** While the VPN is active, peers should be able to ping each other without any problems. **Are you using NetBird Cloud?** No, Self Hosted. **NetBird version** 0.28.7 **NetBird status -dA output:** - **Do you face any (non-mobile) client issues?** - **Screenshots** - **Additional context** -
saavagebueno added the waiting-feedbacktriage-needed labels 2026-08-05 01:01:45 -04:00
Author
Owner

@nazarewk commented on GitHub (Sep 3, 2024):

To be honest so much can go wrong here I would not expect any kind of support for running multiple VPN solutions at the same time apart from help investigating the networking side:

  • your other VPN might be taking over all routes
  • your other VPN might be inserting firewall rules forwarding packets somewhere else before Netbird rules
  • switching VPN activation order might help or it might not
  • it can be anything in between or everything all at once

I tried investigating running OpenVPN alongside Netbird, but gave up after few hours. There is a good reason most of the clients (OpenVPN Connect being one) do not even support connecting to more than one supported server at a time.

<!-- gh-comment-id:2326214364 --> @nazarewk commented on GitHub (Sep 3, 2024): To be honest so much can go wrong here I would not expect any kind of support for running multiple VPN solutions at the same time apart from help investigating the networking side: - your other VPN might be taking over all routes - your other VPN might be inserting firewall rules forwarding packets somewhere else before Netbird rules - switching VPN activation order might help or it might not - it can be anything in between or everything all at once I tried investigating running OpenVPN alongside Netbird, but gave up after few hours. There is a good reason most of the clients (OpenVPN Connect being one) do not even support connecting to more than one supported server at a time.
Author
Owner

@ismail0234 commented on GitHub (Sep 4, 2024):

It would be nice if there was a fix for this if possible. Or is there a simple way to prioritize Netbird even when other VPNs are active?

<!-- gh-comment-id:2330104513 --> @ismail0234 commented on GitHub (Sep 4, 2024): It would be nice if there was a fix for this if possible. Or is there a simple way to prioritize Netbird even when other VPNs are active?
Author
Owner

@nazarewk commented on GitHub (Sep 5, 2024):

As I have written it is highly specific to exact implementations of all VPN solutions you want to mix together and most likely not possible to tune without modifying their source codes. Only sane way I would see it working would be running each in their own container/VM and setting up routing on the host system yourself.

<!-- gh-comment-id:2330719830 --> @nazarewk commented on GitHub (Sep 5, 2024): As I have written it is highly specific to exact implementations of all VPN solutions you want to mix together and most likely not possible to tune without modifying their source codes. Only sane way I would see it working would be running each in their own container/VM and setting up routing on the host system yourself.
Author
Owner

@ismail0234 commented on GitHub (Sep 5, 2024):

This does not seem to be a viable method. It doesn't seem to work in a system with hundreds/thousands of users.

<!-- gh-comment-id:2330871293 --> @ismail0234 commented on GitHub (Sep 5, 2024): This does not seem to be a viable method. It doesn't seem to work in a system with hundreds/thousands of users.
Author
Owner

@nazarewk commented on GitHub (Sep 5, 2024):

Generally Netbird itself is quite unobtrusive, modifies very little in the system and can easily run multiple instances of itself at the same machine (minus DNS integration), the problem is often with the other VPN you are trying to run alongside either being either too invasive or having a few incompatible touch points. You'd need to analyze behavior of all solutions and figure out how to mix them yourself.

I would not be surprised if Avast took over the whole system routing table, installed it's own root certificate and MITMed/spied on all connections you're doing.

<!-- gh-comment-id:2330921707 --> @nazarewk commented on GitHub (Sep 5, 2024): Generally Netbird itself is quite unobtrusive, modifies very little in the system and can easily run multiple instances of itself at the same machine (minus DNS integration), the problem is often with the other VPN you are trying to run alongside either being either too invasive or having a few incompatible touch points. You'd need to analyze behavior of all solutions and figure out how to mix them yourself. I would not be surprised if Avast took over the whole system routing table, installed it's own root certificate and MITMed/spied on all connections you're doing.
Author
Owner

@nazarewk commented on GitHub (Sep 5, 2024):

I think maybe you're confusing the "real" VPN/zero-trust network solutions with what is commercially branded a "VPN".

VPN stands for Virtual Private Network. Those are meant for securely connecting clients (or whole sites) to (selected set of) resources running inside a private/internal/non-public networks over (insecure/non-private) internet connection. Those can also be described/branded as zero-trust networks and offered alongside firewall solutions.
Examples of "VPNs" are: Netbird, OpenVPN, Wireguard.
Examples of zero-trust networks are: Twingate, Cisco AnyConnect, FortiClient, Citrix, ZScaler etc.

The commercial "VPN" offerings are pretty much anonymizations proxies meant for routing all of consumer device's traffic through those so: 1) they appear located somewhere else 2) the traffic is not leaking into (or peeked through) insecure public hotspots.
They are very often purpose-built for hijacking all of the traffic and not allowing anything around them (which prevents working together with other solutions) to deliver on their primary purpose of making average internet user more secure on public hotspots.
Examples of those are: Tor Network, Mullvad VPN, Avast VPN, Nord VPN, Proton VPN.

While you can explicitly configure most of "real VPN" solutions to act the same or similarily as "commercial VPN", some of them are hard to put into one of those 2 buckets.

Generally I would not expect any kind of "commercial VPN" solution to work alongside "real" VPN/zero-trust network unless 1) the "commercial VPN" were extremely well behaved and thoughtfully implemented 2) it explicitly supported running alongside other solutions.

<!-- gh-comment-id:2330994280 --> @nazarewk commented on GitHub (Sep 5, 2024): I think maybe you're confusing the "real" VPN/zero-trust network solutions with what is commercially branded a "VPN". VPN stands for Virtual Private Network. Those are meant for securely connecting clients (or whole sites) to (selected set of) resources running inside a private/internal/non-public networks over (insecure/non-private) internet connection. Those can also be described/branded as zero-trust networks and offered alongside firewall solutions. Examples of "VPNs" are: Netbird, OpenVPN, Wireguard. Examples of zero-trust networks are: Twingate, Cisco AnyConnect, FortiClient, Citrix, ZScaler etc. The commercial "VPN" offerings are pretty much anonymizations proxies meant for routing all of consumer device's traffic through those so: 1) they appear located somewhere else 2) the traffic is not leaking into (or peeked through) insecure public hotspots. They are very often purpose-built for hijacking all of the traffic and not allowing anything around them (which prevents working together with other solutions) to deliver on their primary purpose of making average internet user more secure on public hotspots. Examples of those are: Tor Network, Mullvad VPN, Avast VPN, Nord VPN, Proton VPN. While you can explicitly configure most of "real VPN" solutions to act the same or similarily as "commercial VPN", some of them are hard to put into one of those 2 buckets. Generally I would not expect any kind of "commercial VPN" solution to work alongside "real" VPN/zero-trust network unless 1) the "commercial VPN" were extremely well behaved and thoughtfully implemented 2) it explicitly supported running alongside other solutions.
Author
Owner

@ismail0234 commented on GitHub (Sep 5, 2024):

If there is no solution for this that netbird can do, then I guess it is not a bug.

<!-- gh-comment-id:2331381340 --> @ismail0234 commented on GitHub (Sep 5, 2024): If there is no solution for this that netbird can do, then I guess it is not a bug.
Author
Owner

@alexsyw commented on GitHub (Sep 7, 2024):

I ran into the same problem, Tailscale is installed on the machines and no ACL rules work :(
Disabling tailscale it helps, will there be a solution to this problem?

<!-- gh-comment-id:2335975689 --> @alexsyw commented on GitHub (Sep 7, 2024): I ran into the same problem, Tailscale is installed on the machines and no ACL rules work :( Disabling tailscale it helps, will there be a solution to this problem?
Author
Owner

@tjuberg commented on GitHub (Sep 8, 2024):

I'm investigating a similar issue, and this seems to be related, so apologies if this misses the mark.
Although I have no illusions of the ability to co-exist with any traditional VPN solutions as they in most cases by nature take the "this is my world and no one else are allowed" approach and traditionally this has also been the desired approach for customers. In a more fragmented and globalized reality where traditional VPNs have had growing pains amongst others.

I had hoped to be able to coexist with other wireguard based solutions in more modern security settings, as there is no technical reason it could not be done without larger problems.

In my case the investigation kicked off on a Linux system where I need to have Tailscale and ideally netbird at once to avoid having to do separate systems and duplication of work.

The first obvious hurdle is that Netbird configures it's DNS server on the interface to be its own client RFC 6598 IP. This causes a constant log spam of

systemd-resolved[63872]: Using degraded feature set TCP instead of UDP for DNS server 100.97.NNN.NN

Now, while there is a range collison between Netbird and Tailscale in this instance, I suspect that the actual underlying problem is either in how netbird handles DNS in combination with the desicion to use such a large address space to be routed increasing the chance of collisions for anyone unfortunate enough to reside behind a CGNAT.

Abusing RFC 6598 subnets is not isolated to Netbird or Tailscale, but also commonplace nowdays both for container solutions and kubernetes further increasing likelyhood of conflicts when using /16 by default.

Tailscale approach:

IP4.ROUTE[1]: dst = 100.76.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[2]: dst = 100.81.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[3]: dst = 100.91.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[4]: dst = 100.99.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[5]: dst = 100.113.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[6]: dst = 100.93.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[7]: dst = 100.97.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[8]: dst = 100.99.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[9]: dst = 100.100.100.100/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[10]: dst = 100.89.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[11]: dst = 100.90.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[12]: dst = 100.96.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[13]: dst = 100.103.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[14]: dst = 100.105.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[15]: dst = 100.124.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[16]: dst = 100.91.70.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[17]: dst = 100.116.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52
IP4.ROUTE[18]: dst = 100.125.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52

If memory serves, this is their DNS server IP, along with clients in my tailnet

In contrast to netbird's broader approach:

IP4.ROUTE[1]: dst = 100.97.0.0/16, nh = 0.0.0.0, mt = 0

Most specific route wins, and it would at minimum be wise to add some kind of check and warning if nothing else when such conflicts arises with a link to a caveat knowledgebase to inform.

I don't expect this to turn into a supported use case, but it would have been nice.

<!-- gh-comment-id:2336785454 --> @tjuberg commented on GitHub (Sep 8, 2024): I'm investigating a similar issue, and this seems to be related, so apologies if this misses the mark. Although I have no illusions of the ability to co-exist with any traditional VPN solutions as they in most cases by nature take the "this is my world and no one else are allowed" approach and traditionally this has also been the desired approach for customers. In a more fragmented and globalized reality where traditional VPNs have had growing pains amongst others. I had hoped to be able to coexist with other wireguard based solutions in more modern security settings, as there is no technical reason it could not be done without larger problems. In my case the investigation kicked off on a Linux system where I need to have Tailscale and ideally netbird at once to avoid having to do separate systems and duplication of work. The first obvious hurdle is that Netbird configures it's DNS server on the interface to be its own client RFC 6598 IP. This causes a constant log spam of > systemd-resolved[63872]: Using degraded feature set TCP instead of UDP for DNS server 100.97.NNN.NN Now, while there is a range collison between Netbird and Tailscale in this instance, I suspect that the actual underlying problem is either in how netbird handles DNS in combination with the desicion to use such a large address space to be routed increasing the chance of collisions for anyone unfortunate enough to reside behind a CGNAT. Abusing RFC 6598 subnets is not isolated to Netbird or Tailscale, but also commonplace nowdays both for container solutions and kubernetes further increasing likelyhood of conflicts when using /16 by default. Tailscale approach: > IP4.ROUTE[1]: dst = 100.76.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[2]: dst = 100.81.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[3]: dst = 100.91.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[4]: dst = 100.99.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[5]: dst = 100.113.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[6]: dst = 100.93.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[7]: dst = 100.97.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[8]: dst = 100.99.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[9]: dst = 100.100.100.100/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[10]: dst = 100.89.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[11]: dst = 100.90.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[12]: dst = 100.96.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[13]: dst = 100.103.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[14]: dst = 100.105.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[15]: dst = 100.124.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[16]: dst = 100.91.70.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[17]: dst = 100.116.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 IP4.ROUTE[18]: dst = 100.125.NNN.NNN/32, nh = 0.0.0.0, mt = 0, table=52 If memory serves, this is their DNS server IP, along with clients in my tailnet In contrast to netbird's broader approach: > IP4.ROUTE[1]: dst = 100.97.0.0/16, nh = 0.0.0.0, mt = 0 Most specific route wins, and it would at minimum be wise to add some kind of check and warning if nothing else when such conflicts arises with a link to a caveat knowledgebase to inform. I don't expect this to turn into a supported use case, but it would have been nice.
Author
Owner

@nazarewk commented on GitHub (Apr 28, 2025):

Hello @ismail0234,

We're currently reviewing our open issues and would like to verify if this problem still exists in the latest NetBird version.

Could you please confirm if the issue is still there?

We may close this issue temporarily if we don't hear back from you within 2 weeks, but feel free to reopen it with updated information.

Thanks for your contribution to improving the project!

<!-- gh-comment-id:2835660041 --> @nazarewk commented on GitHub (Apr 28, 2025): Hello @ismail0234, We're currently reviewing our open issues and would like to verify if this problem still exists in the [latest NetBird version](https://github.com/netbirdio/netbird/releases). Could you please confirm if the issue is still there? We may close this issue temporarily if we don't hear back from you within **2 weeks**, but feel free to reopen it with updated information. Thanks for your contribution to improving the project!
Author
Owner

@ismail0234 commented on GitHub (Apr 28, 2025):

I will check

<!-- gh-comment-id:2835685299 --> @ismail0234 commented on GitHub (Apr 28, 2025): I will check
Author
Owner

@piradata commented on GitHub (Nov 25, 2025):

the problem still happen, but i think it can be close, as it is not actually a bug.

but, what could be done, is improve the error message that happen if you are for example on the cellphone with the protonvpn and opens the netbird app

Screenshot_20251126-012119.NetBird.png

netbird keeps giving this message while i have the following enable

Screenshot_20251126-012110.Configurar.png

the moment I disable this "always active vpn" setting, the netbird app works.

<!-- gh-comment-id:3579006235 --> @piradata commented on GitHub (Nov 25, 2025): the problem still happen, but i think it can be close, as it is not actually a bug. but, what could be done, is improve the error message that happen if you are for example on the cellphone with the protonvpn and opens the netbird app ![Screenshot_20251126-012119.NetBird.png](https://github.com/user-attachments/assets/e2634169-a870-4dc4-b85e-936039f57ff5) netbird keeps giving this message while i have the following enable ![Screenshot_20251126-012110.Configurar.png](https://github.com/user-attachments/assets/5fa71e75-016f-4d9d-8bb4-47c3488418d1) the moment I disable this "always active vpn" setting, the netbird app works.
Author
Owner

@TheOverpassArsonist commented on GitHub (Mar 8, 2026):

There is a degree to which compatibility will be determined by the rationality (or lackthereof) of the other VPN.

Mullvad, for instance, works perfectly fine so long as you enable local-network sharing. Meanwhile Tailscale and Mullvad throw a temper tantrum, because Tailscale does not let you assign any IP's outside of the CGNAT range no matter what you do (which is a completely absurd limitation for a VPN specifically designed to let you connect to your devices) and Mullvad's local-network sharing option has a hard-coded list of IP ranges it counts as 'local'. (which is bad, and I do hope they change, but it's nowhere near as egregious as Tailscale because at least Mullvad is more focussed on privacy than connectivity)

It's very much a 'weakest link' issue and from what I can tell so far Netbird is a pretty strong link. I've tried a lot of different VPN combinations and to my recollection Netbird has never been the issue. (for instance as far as I'm aware this is an unsolvable problem on mobile because both iOS and Android enforce an absurd one-active-VPN-at-a-time limit. There's no technical reason you can't have several, but the OSes don't allow it last I checked. Granted it's been a while since I've checked on iOS so maybe they fixed it there.)

<!-- gh-comment-id:4018871117 --> @TheOverpassArsonist commented on GitHub (Mar 8, 2026): There is a degree to which compatibility will be determined by the rationality (or lackthereof) of the other VPN. Mullvad, for instance, works perfectly fine so long as you enable local-network sharing. Meanwhile Tailscale and Mullvad throw a temper tantrum, because Tailscale does not let you assign any IP's outside of the CGNAT range no matter what you do (which is a completely absurd limitation for a VPN specifically designed to let you connect to your devices) and Mullvad's local-network sharing option has a hard-coded list of IP ranges it counts as 'local'. (which is bad, and I do hope they change, but it's nowhere near as egregious as Tailscale because at least Mullvad is more focussed on privacy than connectivity) It's very much a 'weakest link' issue and from what I can tell so far Netbird is a pretty strong link. I've tried a lot of different VPN combinations and to my recollection Netbird has never been the issue. (for instance as far as I'm aware this is an unsolvable problem on mobile because both iOS and Android enforce an absurd one-active-VPN-at-a-time limit. There's no technical reason you can't have several, but the OSes don't allow it last I checked. Granted it's been a while since I've checked on iOS so maybe they fixed it there.)
Author
Owner

@tritaum commented on GitHub (Apr 28, 2026):

has any movement or progress been made on this issue? implementation??

For Mullvad users that need an immediate solution for Linux I just created this mullvad daemon upstream-synced fork which allows you to exclude IPs/IP ranges from the mullvad tunnel, its very straightforward to setup, just replace your current daemon with the one in Releases or install it directly using the AUR package named patched-mullvad-vpn-daemon-bin

If you want to check the source code, report bugs or make suggestions theres a Github repo for that:
https://github.com/tritaum/ip-split-tunneling-mullvad

<!-- gh-comment-id:4338038114 --> @tritaum commented on GitHub (Apr 28, 2026): > has any movement or progress been made on this issue? implementation?? For Mullvad users that need an immediate solution for Linux I just created this mullvad daemon upstream-synced fork which allows you to exclude IPs/IP ranges from the mullvad tunnel, its very straightforward to setup, just replace your current daemon with the one in [Releases](https://github.com/tritaum/ip-split-tunneling-mullvad/releases) or install it directly using the AUR package named [patched-mullvad-vpn-daemon-bin](https://aur.archlinux.org/packages/patched-mullvad-vpn-daemon-bin) If you want to check the source code, report bugs or make suggestions theres a Github repo for that: https://github.com/tritaum/ip-split-tunneling-mullvad
Author
Owner

@d10n commented on GitHub (May 13, 2026):

For Linux only, my repo cleanly enables NetBird and Mullvad to work together (without needing a patched daemon): https://github.com/d10n/netbird-mullvad-bypass
It's packaged for Arch, Fedora, and Debian, but you can just manually install the config files if you prefer.

<!-- gh-comment-id:4446248794 --> @d10n commented on GitHub (May 13, 2026): For Linux only, my repo cleanly enables NetBird and Mullvad to work together (without needing a patched daemon): https://github.com/d10n/netbird-mullvad-bypass It's packaged for Arch, Fedora, and Debian, but you can just manually install the config files if you prefer.
Author
Owner

@Binocularbath commented on GitHub (Jun 30, 2026):

Just thought I'd jump in on this ticket as I'm wondering a similar thing. Is there anyway to use netbird and a traditional VPN from my android?

I'm currently on tailscale but looking to migrate. I'm just hoping to find a solution where I can be protected by my VPN while still about to access my home machine. Any comments appreciated

<!-- gh-comment-id:4839751221 --> @Binocularbath commented on GitHub (Jun 30, 2026): Just thought I'd jump in on this ticket as I'm wondering a similar thing. Is there anyway to use netbird and a traditional VPN from my android? I'm currently on tailscale but looking to migrate. I'm just hoping to find a solution where I can be protected by my VPN while still about to access my home machine. Any comments appreciated
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#5170