v3.24.0

passteque/gluetunv3.24.0Sep 8, 2021by qdm12

AI Summary

Adds IVPN Wireguard and TCP support, Mullvad Wireguard port support, Surfshark improvements, and exposes IP geolocation data via the control server API.

Key Highlights

  • IVPN Wireguard and TCP support
  • Mullvad Wireguard port support
  • IP geolocation data available at `/v1/publicip/ip`
  • Surfshark server information improvements

New Features

  • IVPN Wireguard and TCP support
  • Mullvad Wireguard port
  • IP geolocation API
  • Surfshark improvements

Full Release Notes

## Features

- IVPN
  - Wireguard support (#584)
  - TCP protocol support for OpenVPN
  - Custom port support for OpenVPN
  - Servers data update (#578)
  - `ISP` filter (#578)
- Mullvad
  - `WIREGUARD_PORT` support
- Surfshark
  - Servers data improved (#575)
- `LOG_LEVEL` variable (#577)
- Add IP geolocation data to HTTP control server at `/v1/publicip/ip`
- `OPENVPN_TARGET_IP` overrides IP for OpenVPN only
- `WIREGUARD_ADDRESS` accepts multiple comma separated IP networks

## Fixes

- `FIREWALL_OUTBOUND_SUBNETS` IP rules
- Wireguard
  - `FIREWALL_VPN_INPUT_PORTS` support
  - Fixed cleanup of wireguard link that was preventing restarts
- Surfshark `REGION` retro-compatibility restored
- `MULTIHOP_ONLY` defaults to `no`
- Fix panic for certain 'no server found' errors
- Clear IP data when VPN is stopped

## Maintenance

- `internal/storage` rework
  - No more global variables
  - Inject merged servers to configuration package
  - Configuration parsing to use persisted servers.json (#566)
  - Move server data files from `internal/constants` to `internal/storage`
  - Remove Windscribe debug logs
- Fix rules equality check for nil networks
- `internal/routing`
  - IP rules functions take `src` and `dst`arguments as `*net.IPNet` instead of `net.IP`
  - IP rules functions unit tests
  - IP rules functions debug logs dynamically built
  - Better splitting of Go source files
  - Reduce number of exported errors
  - Rename `outboundsubnets.go` to `outbound.go`
  - Add `inbound.go`
  - Use `internal/netlink` instead of `github.com/vishvananda/netlink`
  - Rework `IPIsPrivate` function
  - Constructor returns `*Routing` struct instead of interface
- `internal/subnet` created
  - Merge `FindSubnetsToAdd` and `FindSubnetsToRemove` in `FindSubnetsToChange`
- `internal/httpproxy`
  - Server constructor returns `*Server` struct instead of interface
  - HTTPS handling simplifications
- Only `internal/netlink` depends on `github.com/vishvananda/netlink`
- `internal/provider/utils`
  - `utils.FilterByProtocol` function
  - Common `GetPort` for OpenVPN+Wireguard providers
  - Common `GetProtocol` for OpenVPN+Wireguard providers