max-moser / network-manager-wireguard

NetworkManager VPN Plugin: Wireguard
Other
450 stars 54 forks source link

Stopped working with Ubuntu 22.04 #62

Open bmn001 opened 2 years ago

bmn001 commented 2 years ago

This was working great with Ubuntu 21.04. After upgrading to 22.04, not so much.

Attempting to connect will fail instantly.

Syslog shows a bunch of this-

Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5816] device (TestVPN): state change: unmanaged -> unavailable (reason 'connection-assumed', sys-iface-state: 'external')
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5820] device (TestVPN): state change: unavailable -> disconnected (reason 'connection-assumed', sys-iface-state: 'external')
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5825] device (TestVPN): Activation: starting connection 'TestVPN' (ab322800-5c4a-43d4-afc4-ec17f863b26c)
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5826] device (TestVPN): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'external')
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5827] device (TestVPN): state change: prepare -> config (reason 'none', sys-iface-state: 'external')
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5829] device (TestVPN): state change: config -> ip-config (reason 'none', sys-iface-state: 'external')
Apr 29 14:00:18 xps13 NetworkManager[919]: <info>  [1651266018.5835] device (TestVPN): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'external')

And this

Apr 29 14:00:18 xps13 nm-wireguard-se[26362]: g_variant_new_string: assertion 'g_utf8_validate (string, -1, NULL)' failed
Apr 29 14:00:18 xps13 nm-wireguard-se[26362]: g_variant_builder_add_value: assertion '!GVSB(builder)->expected_type || g_variant_is_of_type (value, GVSB(builder)->expected_type)' failed
Apr 29 14:00:18 xps13 NetworkManager[919]: <warn>  [1651266018.6279] vpn[0x55f4bc24c0a0,9ebb3b96-f86b-4c48-8c45-527e1895a6e8,"TestVPN",if:11,dev:3:(TestVPN)]: config: no VPN gateway address received
Apr 29 14:00:18 xps13 NetworkManager[919]: <warn>  [1651266018.6280] vpn[0x55f4bc24c0a0,9ebb3b96-f86b-4c48-8c45-527e1895a6e8,"TestVPN",if:11,dev:3:(TestVPN)]: did not receive valid IP config information

Other devices are still able to connect (android, ios, etc) just this latest Ubuntu update has me scratching my head.

If it helps, this is NetworkManager is 1.36.4.

Random-Chain commented 2 years ago

Same issue on Pop!_OS 22.04. Is this related to #24 ?

Forage commented 2 years ago

Looks like a duplicate of #59

BierDav commented 2 years ago

Are there any plans to fix this, would be great to be able to use it with the newest network manager. If someone can tell me what the core problem ist, i may be able to create pull request.

mayhemkrew commented 2 years ago

Has anybody confirmed that downgrading network manager to a previous version get's this plugin working? If so, what are the commands you used to downgrade the package? Really wish this would of worked during the upgrade and I still wonder why this isn't a feature built into Ubuntu like OVPN is.

Forage commented 2 years ago

Has anybody confirmed that downgrading network manager to a previous version get's this plugin working? If so, what are the commands you used to downgrade the package? Really wish this would of worked during the upgrade and I still wonder why this isn't a feature built into Ubuntu like OPVN is.

If you had looked at the links this ticket refers to you would have had all your answers.

foxy6520 commented 1 year ago

I am currently experiencing the same issue here, Ubuntu 22.04

mayhemkrew commented 1 year ago

I am currently experiencing the same issue here, Ubuntu 22.04

@foxy6520 I ended up getting it working with a clean install of 22.04 and following this guide to install the Wireguard Indicator.

https://github.com/atareao/wireguard-indicator

Forage commented 1 year ago

I believe proper WireGuard integration into settings and shell is in place for GNOME 43. The wait is for Ubuntu 22.10 in the hope that those parts have not been left out.

SigmFreud commented 1 year ago

Does anyone know when the code will be updated to support in Gnome 42 and 43?

I believe proper WireGuard integration into settings and shell is in place for GNOME 43. The wait is for Ubuntu 22.10...

Ubuntu 22.10 hasn't WireGuard integration.

Forage commented 1 year ago

Ubuntu 22.10 hasn't WireGuard integration.

Yes, it does have it partially. The connections show up nicely in the Shell menu. It's only in the settings that you can't alter or add new connections yet. Since you don't do that every day anyway can do it the cli way.

SigmFreud commented 1 year ago

The connections show up nicely in the Shell menu...

Yes, I'm writing in the terminal:

sudo systemctl start wg-quick@wg-client0.service and sudo systemctl stop wg-quick@wg-client0.service

In order not to forget about the working client, I use the extension WireGuard-VPN-extension This extension only shows the status. It cannot turn on/off the client. But does this extension WireGuard Indicator can turn on/off the client?

It is not yet available for Gnome 43

Forage commented 1 year ago

You can start/stop WG connections though the Shell menu by default in Ubuntu 22.10 now, no need for extensions any more.

image

SigmFreud commented 1 year ago

You can start/stop WG connections though the Shell menu by default in Ubuntu 22.10 now, no need for extensions any more.

How did you set up the connection?

After configuring and installing, I am trying to set up a new VPN connection here: 1

I get an error: "Error: unable to load vpn connection editor" 2

Forage commented 1 year ago

Like I said, through the cli: nmcli connection import type wireguard file wg0.conf

SigmFreud commented 1 year ago

nmcli connection import type wireguard file wg0.conf

I didn't know it was possible! Now it works without a plugin! Thanks! I wish you a bright mood and the same generous support from others.

yanzilisan183 commented 1 year ago

nm-wireguard-service:

#include <glib-unix.h>
+ #include <netdb.h>
#include "utils.h"

...

static gboolean
set_config(NMVpnServicePlugin *plugin, NMConnection *connection)
{
...
-       g_variant_builder_add(&dns_builder, "{ss}", NMV_WG_TAG_DNS, val);
+       g_variant_builder_add(&dns_builder, "{sv}", NMV_WG_TAG_DNS, val);  // Fix g_variant_new_string: assertion 'g_utf8_validate (string, -1, NULL)' failed
...
    setting = get_setting(s_vpn, NM_WG_KEY_ENDPOINT);
    if(setting){
-       // TODO
+       char *p;
+       int q = 0;
+       int l = strlen(setting);
+       for(int i=0; i<l; i++){
+           if(setting[i]==':'){
+               q++;
+           }
+       }
+       if(q>1){
+           // Look like IPv6
+           val = ip6_to_gvariant(setting);
+           if(val){
+               g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, val);
+           }
+       }else{
+           // IPv4 or domain name.
+           p = strstr(setting, ":");
+           if(p){
+               // Delete :port.
+               p[0]='\0'; 
+           }
+           val = ip4_to_gvariant(setting);
+           if(val){
+               // Is IP address. 
+               // NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY == NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY == NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+               g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, val);
+           }else{
+               // Is hostname or domain name.
+               struct hostent *host;
+               char buff[17];
+               if ((host = gethostbyname2(setting, AF_INET)) != NULL){
+                   inet_ntop(AF_INET, (struct in_addr *)host->h_addr_list[0], buff, sizeof(buff));
+                   val = ip4_to_gvariant(buff);
+                   if(val){
+                       g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, val);
+                   }
+               }else if((host = gethostbyname2(setting, AF_INET6)) != NULL){
+                   inet_ntop(AF_INET6, (struct in_addr *)host->h_addr_list[0], buff, sizeof(buff));
+                   val = ip6_to_gvariant(buff);
+                   if(val){
+                       g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, val);
+                   }
+               }
+           }
+       }
    }
...
}

make sudo mv /usr/lib/NetworkManager/nm-wireguard-service /usr/lib/NetworkManager/nm-wireguard-service.bak sudo cp src/nm-wireguard-service /usr/lib/NetworkManager/ 问题出在NetworkManager期望得到VPN网关信息,但是nm-wireguard-service并没能提供。上面的代码将向NetworkManager提供VPN网关信息。 水平有限,希望你可以看懂 :)

sorcer1122 commented 1 year ago

@yanzilisan183 can you please elaborate on how to use your code and compile nm-wireguard-service?

don-dolarson commented 9 months ago

@yanzilisan183 sweet. Works great in Debian 12.2 LXQt network-manager 1.42.4-1