v3.39.0

passteque/gluetunv3.39.0Aug 9, 2024by qdm12

AI Summary

Major release upgrading Alpine, changing OpenVPN default to 2.6, adding Wireguard support for multiple providers, and port forwarding support.

Key Highlights

  • Alpine upgraded from 3.18 to 3.20
  • OpenVPN default version changed from 2.5 to 2.6
  • Wireguard support added for FastestVPN and ProtonVPN
  • Port forwarding support added for PIA, Perfect Privacy, and ProtonVPN

Breaking Changes

  • Alpine upgraded from 3.18 to 3.20
  • OpenVPN default version changed from 2.5 to 2.6
  • VPN_ENDPOINT_IP split into OPENVPN_ENDPOINT_IP and WIREGUARD_ENDPOINT_IP
  • FIREWALL_ENABLED renamed to FIREWALL_ENABLED_DISABLING_IT_SHOOTS_YOU_IN_YOUR_FOOT (deprecated)

New Features

  • OpenVPN 2.6 support
  • Alpine 3.20 support
  • Wireguard support for multiple providers
  • Port forwarding support for multiple providers
  • Feature filters (SECURE_CORE_ONLY, TOR_ONLY, PORT_FORWARD_ONLY)

Full Release Notes

🎥 [Youtube video](https://youtu.be/RVWCA6h2dUI) explaining all this

## Features

- OpenVPN: default version changed from 2.5 to 2.6
- Alpine upgraded from 3.18 to 3.20 (3.19 got skipped due to buggy `iptables`)
- Healthcheck: change timeout mechanism
  - Healthcheck timeout is no longer fixed to 3 seconds
  - Healthcheck timeout increases from 2s to 4s, 6s, 8s, 10s
  - No 1 second wait time between check retries after failure
  - VPN internal restart may be delayed by a maximum of 10 seconds
- Firewall:
  - Query iptables binary variants to find which one to use depending on the kernel
  - Prefer using `iptables-nft` over `iptables-legacy` (Alpine new default is nft backend iptables)
- Wireguard:
  - `WIREGUARD_PERSISTENT_KEEPALIVE_INTERVAL` option
  - read configuration file **without** case sensitivity
- VPN Port forwarding: only use port forwarding enabled servers if `VPN_PORT_FORWARDING=on` (applies only to PIA and ProtonVPN for now)
- FastestVPN:
  - Wireguard support (#2383 - Credits to @Zerauskire for the initial investigation and @jvanderzande for an initial implementation as well as reviewing the pull request)
  - use API instead of openvpn zip file to fetch servers data
  - add city filter `SERVER_CITY`
  - update built-in servers data
- Perfect Privacy: port forwarding support with `VPN_PORT_FORWARDING=on` (#2378)
- Private Internet Access: port forwarding options `VPN_PORT_FORWARDING_USERNAME` and `VPN_PORT_FORWARDING_PASSWORD` (retro-compatible with `OPENVPN_USER` and `OPENVPN_PASSWORD`)
- ProtonVPN:
  - Wireguard support (#2390)
  - feature filters `SECURE_CORE_ONLY`, `TOR_ONLY` and `PORT_FORWARD_ONLY` (#2182)
  - determine "free" status using API tier value
  - update built-in servers data
- Surfshark: servers data update
- VPNSecure: servers data update
- `VPN_ENDPOINT_IP` split into `OPENVPN_ENDPOINT_IP` and `WIREGUARD_ENDPOINT_IP`
- `VPN_ENDPOINT_PORT` split into `OPENVPN_ENDPOINT_PORT` and `WIREGUARD_ENDPOINT_PORT`

## Fixes

- `VPN_PORT_FORWARDING_LISTENING_PORT` fixed
- IPv6 support detection ignores loopback route destinations
- Custom provider:
  - handle `port` option line for OpenVPN
  - ignore comments in an OpenVPN configuration file
  - assume port forwarding is always supported by a custom server
- VPN Unlimited:
  - change default UDP port from 1194 to 1197
  - allow OpenVPN TCP on port 1197
- Private Internet Access Wireguard and port forwarding
  - Set server name if names filter is set with the custom provider (see #2147)
- PrivateVPN: updater now sets openvpn vpn type for the no-hostname server
- Torguard: update OpenVPN configuration
  - add aes-128-gcm and aes-128-cbc ciphers
  - remove mssfix, sndbuf, rcvbuf, ping and reneg options
- VPNSecure: associate `N / A` with no data for servers
- AirVPN: set default mssfix to 1320-28=1292
- Surfshark: remove outdated hardcoded retro servers
- Public IP echo:
  - ip2location parsing for latitude and longitude fixed
  - abort ip data fetch if vpn context is canceled (prevents requesting the public IP address N times after N VPN failures)
- `internal/server`: `/openvpn` route status get and put
  - get status return stopped if running Wireguard
  - put status changes vpn type if running Wireguard
- Log out if `PORT_FORWARD_ONLY` is enabled in the server filtering tree of settings
- Log last Gluetun release by tag name alphabetically instead of by release date
- `format-servers` fixed missing VPN type header for providers supporting Wireguard: NordVPN and Surfshark
- `internal/tun`: only create tun device if it does not exist, do not create if it exists and does not work

## Documentation

- readme:
  - clarify shadowsocks proxy is a server, not a client
  - update list of providers supporting Wireguard with the custom provider
  - add protonvpn as custom port forwarding implementation
- disable Github blank issues
- Bump github.com/qdm12/gosplash to v0.2.0
  - Add `/choose` suffix to github links in logs
- add Github labels: "Custom provider", "Category: logs" and "Before next release"
- rename `FIREWALL_ENABLED` to `FIREWALL_ENABLED_DISABLING_IT_SHOOTS_YOU_IN_YOUR_FOOT` due to the sheer amount of users misusing it. `FIREWALL_ENABLED` won't do anything anymore. At least you've been warned not to use it...

## Maintenance

- Code health
  - PIA port forwarding:
    - remove dependency on storage package
    - return an error to port forwarding loop if server cannot port forward
  - `internal/config`:
    - upgrade to `github.com/qdm12/gosettings` v0.4.2
      - drop `github.com/qdm12/govalid` dependency
      - upgrade `github.com/qdm12/ss-server` to v0.6.0
      - do not un-set sensitive config settings anymore
    - removed bad/invalid retro-compatible keys `CONTROL_SERVER_ADDRESS` and `CONTROL_SERVER_PORT`
    - OpenVPN protocol field is now a string instead of a TCP boolean
    - Split server filter validation for features and subscription-tier
    - provider name field as string instead of string pointer
  - `internal/portforward`: support multiple ports forwarded
  - Fix typos in code comments (#2216)
  - `internal/tun`: fix unit test for unprivileged user
- Development environment
  - fix `source.organizeImports` vscode setting value
  - linter: remove now invalid skip-dirs configuration block
- Dependencies
  - Bump Wireguard Go dependencies
  - Bump Go from 1.21 to 1.22
  - Bump golang.org/x/net from 0.19.0 to 0.25.0 (#2138, #2208, #2269)
  - Bump golang.org/x/sys from 0.15.0 to 0.18.0 (#2139)
  - Bump github.com/klauspost/compress from 1.17.4 to 1.17.8 (#2178, #2218)
  - Bump github.com/fatih/color from 1.16.0 to 1.17.0 (#2279)
  - Bump github.com/stretchr/testify to v1.9.0
  - Do not upgrade busybox since vulnerabilities are fixed now with Alpine 3.19+
- CI
  - Bump DavidAnson/markdownlint-cli2-action from 14 to 16 (#2214)
  - Bump peter-evans/dockerhub-description from 3 to 4 (#2075)
- Github
  - remove empty label description fields
  - add `/choose` suffix to issue and discussion links
  - review all issue labels: add closed labels, add category labels, rename labels, add label category prefix, add emojis for each label
  - Add issue labels: Popularity extreme and high, Closed cannot be done, Categories kernel and public IP service