kiwix / kiwix-desktop

Kiwix for Windows and GNU/Linux desktops
https://download.kiwix.org/release/kiwix-desktop/
GNU General Public License v3.0
778 stars 102 forks source link

Add ipv6 support to local server #1221

Closed sgourdas closed 1 month ago

sgourdas commented 1 month ago

This adds ipv6 support to the local kiwix server of the app.

Fixes #1119

sgourdas commented 1 month ago

I would like to do some additional checks here before reviews, if possible.

sgourdas commented 1 month ago

@veloman-yunkan this is ready for code review.

P.S. It would be good for testing even to have in place the fix of Server::setAddress from kiwix/libkiwix#1147.

kelson42 commented 1 month ago

So I guess this is the last PR of our IPv6 effort :)

sgourdas commented 1 month ago

Now that ipv6 works correctly on Windows give me some additional time to catch any issues before we close this up please

sgourdas commented 1 month ago

It would be good to merge kiwix/libkiwix#1151 first, as noted here, before finalizing this as well.

sgourdas commented 1 month ago

It seems like the root cause helping the discovery of kiwix/libkiwix#1148 is the fact that the Kiwix Desktop local server uses getNetworkInterfacesIPv4Or6 which does return 169.254 prefixed IPs. These are added to the dropdown of IPs "available" for use, which as we discussed leads to issues.

@veloman-yunkan should I filter these out when adding to the list, or should we modify the getNetworkInterfacesIPv4Or6 behavior to not include them?

veloman-yunkan commented 1 month ago

@sgourdas Neither seems a good option to me. Why don't we present the full list of IPs to the users and let them find out which one works best for them? We can add a note that not all of the IPs in the list may actually work. We can filter the list later after we have enough experience with problematic IPs and/or complaints from our users.

sgourdas commented 1 month ago

@sgourdas Neither seems a good option to me. Why don't we present the full list of IPs to the users and let them find out which one works best for them? We can add a note that not all of the IPs in the list may actually work. We can filter the list later after we have enough experience with problematic IPs and/or complaints from our users.

I can see that being best in a "text box scenario" where the input is coming from the user. IMHO if an option is given from a dropdown it should work correctly and have a reason to be presented/add clutter in our app.

On the other hand, filtering after we get more experience with problematic IPs is a good approach. But despite that, this prefix seems to get in the way and kind of obscure what works and what doesn't with how many IPs it provides.

veloman-yunkan commented 1 month ago

@sgourdas If you can do some research, find out the peculiarity of 169.254.x.x addresses and substantiate why they must be excluded from the IP addresses that we consider, then we can proceed based on that information.

sgourdas commented 1 month ago

@sgourdas If you can do some research, find out the peculiarity of 169.254.x.x addresses and substantiate why they must be excluded from the IP addresses that we consider, then we can proceed based on that information.

@veloman-yunkan 169.254.0.0/16 addresses are link local addresses which IMO should be excluded in getNetworkInterfacesWin since its already being done with the ipv6 equivalent. Their use is not destined for this purpose since they are non routable.

sgourdas commented 1 month ago

@sgourdas If you can do some research, find out the peculiarity of 169.254.x.x addresses and substantiate why they must be excluded from the IP addresses that we consider, then we can proceed based on that information.

@veloman-yunkan 169.254.0.0/16 addresses are link local addresses which IMO should be excluded in getNetworkInterfacesWin since its already being done with the ipv6 equivalent. Their use is not destined for this purpose since they are non routable.

The corresponding change should also be probably done in getNetworkInterfacesPosix in the same logic.

veloman-yunkan commented 1 month ago

Their use is not destined for this purpose since they are non routable.

@sgourdas Can you provide a reference to some document supporting your statement?

veloman-yunkan commented 1 month ago

Their use is not destined for this purpose since they are non routable.

@sgourdas Can you provide a reference to some document supporting your statement?

Such addresses are not globally routable, but they should be usable within the local subnetwork, in which respect they are no different from, for example, 192.168.x.x addresses.

sgourdas commented 1 month ago

@veloman-yunkan main sources of my response were this and this.

sgourdas commented 1 month ago

@veloman-yunkan is this enough info to justify such a change?

veloman-yunkan commented 1 month ago

@sgourdas I am not convinced. The main argument for suppressing 169.254.x.x IPs is that they seem to become of significance only when there is a misconfiguration or some other issue with the network, however that also can be thought of as an argument for not suppressing those IPs. I'll let @kelson42 decide.

sgourdas commented 1 month ago

@veloman-yunkan do you happen to know what is the reason we are excluding IPv6 link locals but not doing the same for IPv4 currently?

veloman-yunkan commented 1 month ago

@veloman-yunkan do you happen to know what is the reason we are excluding IPv6 link locals but not doing the same for IPv4 currently?

No, I don't.

sgourdas commented 1 month ago

@veloman-yunkan do you happen to know what is the reason we are excluding IPv6 link locals but not doing the same for IPv4 currently?

No, I don't.

Alright, lets continue with the main purpose of this PR maybe for the moment then.

kelson42 commented 1 month ago

@sgourdas I am not convinced. The main argument for suppressing 169.254.x.x IPs is that they seem to become of significance only when there is a misconfiguration or some other issue with the network, however that also can be thought of as an argument for not suppressing those IPs. I'll let @kelson42 decide.

I'm pretty much in favour of not proposing this kind of IPs - if they are not reachable by non-local users - in Kiwix Desktop. This will do more arm than good IMHO. I believe the answer is slightly different for Kiwix Server, which is used by tech-savy users. So I would just propose to mask it here in Kiwix Desktop, but keep it available in libkiwix/kiwix-serve (but never choose it per default). Hope this helps.