Mullvad VPN

Edit Package mullvadvpn

Privacy is a universal right.

You have a right to privacy.
In a society increasingly determined to erode that right, a fast, trustworthy and easy-to-use VPN is a good first step toward reclaiming it.

Source Files
Filename Size Changed
0001-commit-date.patch 0000000954 954 Bytes
MullvadVPN-2025.9_x86_64.rpm 0093122013 88.8 MB
MullvadVPN-2025.9_x86_64.rpm.asc 0000000833 833 Bytes
_constraints 0000000597 597 Bytes
_service 0000000499 499 Bytes
cargo-config 0000000559 559 Bytes
mullvadvpn-app-vendor.tar.gz 0114934619 110 MB
mullvadvpn.changes 0000004037 3.94 KB
mullvadvpn.spec 0000006054 5.91 KB
relays.json 0000703100 687 KB
wireguard-vendor.tar.gz 0001733365 1.65 MB
Comments 16

Xu Zhao's avatar

Build the daemon and CLI tool from (vendored) source, and use pre-built GUI electron application. Do not build flatpak/AppImage because the daemon requires sudo permission and systemd service.




B P's avatar

2023.5 is out. I tried to build it according to your spec file, but I always get an error when updating the shadowsocks library from github and I do not know how to fix that. The package itself compiles fine in my environment.

The error is: + cargo build --release Updating git repository https://github.com/mullvad/shadowsocks-rust error: failed to select a version for the requirement once_cell = "^1.13" (locked to 1.18.0) candidate versions found which didn't match: 1.13.0 location searched: directory source /home/XXXX/rpmbuild/BUILD/mullvadvpn-app-2023.4/vendor (which is replacing registry crates-io) required by package mullvad-api v0.0.0 (/home/XXXX/rpmbuild/BUILD/mullvadvpn-app-2023.4/mullvad-api) perhaps a crate was updated and forgotten to be re-vendored?

However, thank you for providing this!



M Jacobs's avatar

Hi,

First let me thank you. The gui doesn't seem to display any content after recent major system update. After reinstalling mullvad it does work as normal but doesn't survive a reboot. The gui's content is ''blank'' again. Running 2023.5 on tumbleweed. Any idea's?

Greetings


Xu Zhao's avatar

It works on my desktop, so I am not sure why it doesn't show on your environment. I am sorry, but the goal of this repo is for personal use, not for making it work on any environment in Tumbleweed.

Is it GNOME or KDE? I am using KDE Plasma+Wayland. Clearing the cache at $HOME/.cache/Mullvad VPN might also make it work.


M Jacobs's avatar

It always worked! Gnome+wayland here. There is a cache dir in: /home/magician/.config/Mullvad VPN/Cache


M Jacobs's avatar

And the new version of mullvad has the same problem.


Xu Zhao's avatar

Do you mean that the prebuilt binary rpm downloaded from https://github.com/mullvad/mullvadvpn-app has the same problem? If so, it means it is an upstream problem, not packaging issue.


M Jacobs's avatar

Installed it from this repo:

https://download.opensuse.org/repositories/home:/nuklly/openSUSE_Tumbleweed/

obs://build.opensuse.org/home:nuklly

Deleted this dir:

/home/magician/.config/Mullvad VPN

Reinstalled 2023.5beta1 with yast software management.

Now it works again.


Simon's avatar

Hi!

Are you also experiencing lower or very low response time / speed lately?

For me it is strange, the servers in my country are a lot slower lately, but if I connect randomly, some of the other servers work better.

Thanks!


Jay Black's avatar

Thank you for this package and your work!

On an SELinux setup, the new default for Tumbleweed installs, this package (App version 2025.5) will not work.

I am by no means an expert, but I had to make a new SEpolicy with the info below and the basics appear to work fine (VPN connect/disconnect and Lockdown mode).

module my-tokioruntimew 1.0;

require {
    type http_port_t;
    type kernel_t;
    type net_conf_t;
    type init_t;
    type monopd_port_t;
    type unreserved_port_t;
    type commplex_link_port_t;
    type tun_tap_device_t;
    class tcp_socket name_connect;
    class netlink_generic_socket { create read write };
    class rawip_socket { create setopt write };
    class icmp_socket { create getattr read setopt write };
    class tun_socket create;
    class chr_file { ioctl open read write };
    class file write;
    class system module_request;
}

#============= init_t ==============

#!!!! This avc is allowed in the current policy
allow init_t commplex_link_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t http_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t kernel_t:system module_request;

#!!!! This avc is allowed in the current policy
allow init_t monopd_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t net_conf_t:file write;

#!!!! This avc is allowed in the current policy
allow init_t self:icmp_socket { create getattr read setopt write };

#!!!! This avc is allowed in the current policy
allow init_t self:netlink_generic_socket { create read write };

#!!!! This avc is allowed in the current policy
allow init_t self:rawip_socket { create setopt write };

#!!!! This avc is allowed in the current policy
allow init_t self:tun_socket create;

#!!!! This avc is allowed in the current policy
#!!!! This av rule may have been overridden by an extended permission av rule
allow init_t tun_tap_device_t:chr_file { ioctl open read write };

#!!!! This avc is allowed in the current policy
allow init_t unreserved_port_t:tcp_socket name_connect;


I don't mean to impose and am not asking for you do anything further as this is just a personal project for you. Just wanted to share in case someone runs into a similar issue.

Thanks again.


nico's avatar

@JB231 would you kindly elaborate on what you did to add this policy? apparently i know even less about SEpolicy. XD


Jay Black's avatar

After you have installed this Mullvad VPN package, you need to start/enable the Mullvad daemon so it starts and persists between reboots for the app to function:

1.) sudo systemctl enable mullvad-daemon

2.) sudo systemctl start mullvad-daemon

Then if using SELinux, you have to make a new policy and load it.

1.) Open terminal and type:

nano my-tokioruntimew.te

2.) Put the following content into the file and save:


module my-tokioruntimew 1.0;

require {
    type http_port_t;
    type kernel_t;
    type net_conf_t;
    type init_t;
    type monopd_port_t;
    type unreserved_port_t;
    type commplex_link_port_t;
    type tun_tap_device_t;
    class tcp_socket name_connect;
    class netlink_generic_socket { create read write };
    class rawip_socket { create setopt write };
    class icmp_socket { create getattr read setopt write };
    class tun_socket create;
    class chr_file { ioctl open read write };
    class file write;
    class system module_request;
}

#============= init_t ==============

#!!!! This avc is allowed in the current policy
allow init_t commplex_link_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t http_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t kernel_t:system module_request;

#!!!! This avc is allowed in the current policy
allow init_t monopd_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow init_t net_conf_t:file write;

#!!!! This avc is allowed in the current policy
allow init_t self:icmp_socket { create getattr read setopt write };

#!!!! This avc is allowed in the current policy
allow init_t self:netlink_generic_socket { create read write };

#!!!! This avc is allowed in the current policy
allow init_t self:rawip_socket { create setopt write };

#!!!! This avc is allowed in the current policy
allow init_t self:tun_socket create;

#!!!! This avc is allowed in the current policy
#!!!! This av rule may have been overridden by an extended permission av rule
allow init_t tun_tap_device_t:chr_file { ioctl open read write };

#!!!! This avc is allowed in the current policy
allow init_t unreserved_port_t:tcp_socket name_connect;

3.) Run the commands below to make the policy module:

checkmodule -M -m -o my-tokioruntimew.mod my-tokioruntimew.te

semodule_package -o my-tokioruntimew.pp -m my-tokioruntimew.mod

4.) Load the newly made my-tokioruntimew.pp policy:

sudo semodule -i my-tokioruntimew.pp

The app should be functional now.

openSUSE Build Service is sponsored by