v3.29.0

passteque/gluetunv3.29.0May 11, 2022by qdm12

AI Summary

This release introduces a revamped firewall system with IPv6 support and updates for multiple VPN providers. It also introduces a new logging library and refactors server models for consistency.

Key Highlights

  • Comprehensive firewall improvements with IPv6 support and auto-detection of iptables variants
  • Updated server data for Mullvad, ProtonVPN, NordVPN, and others
  • Generic server models and common filtering builder for all providers
  • Switched logging library to `qdm12/log`

Breaking Changes

  • ProtonVPN: Change server name JSON field from `name` to `server_name`

New Features

  • Auto-detect `iptables` and `iptables-nft` for IPv4 and IPv6
  • Support all default routes instead of only the first one
  • Add IPv6 inbound routing
  • Servers update: Mullvad, Privado, PrivateVPN, ProtonVPN, PureVPN, NordVPN, Private Internet Access, Torguard, FastestVPN
  • Generic server models and common filtering builder

Full Release Notes

## Features

### Firewall

- Auto-detect `iptables` and `iptables-nft` for IPv4 and IPv6
- Improve error message when `NET_ADMIN` capability is missing
- Support all default routes instead of only the first one
    - Accept output traffic from all default routes through VPN interface
    - Accept output from all default routes to outbound subnets
    - Accept all input traffic on ports for all default routes
    - Add IP rules for all default routes
- Add IPv6 inbound routing

### Provider specific

- Servers update: Mullvad, Privado, PrivateVPN, ProtonVPN, PureVPN, NordVPN, Private Internet Access, Torguard, FastestVPN (thanks @mircoianese #923)
- NordVPN: remove OpenVPN compression
- Ivpn:  allow no password for account IDs matching `i-xxxx-xxxx-xxxx` or `ivpn-xxxx-xxxx-xxxx`

### Other

- Use https://github.com/qdm12/log for logging
- Log out OS signal name when shutting down
- Storage: omit empty fields in servers.json

## Fixes

- Health check:
    - `HEALTH_TARGET_ADDRESS` to replace `HEALTH_ADDRESS_TO_PING`
    - Remove `github.com/go-ping/ping` dependency
    - Dial TCP the target address, appending `:443` if port is not set
    - Target address defaults to `cloudflare.com:443`
- `OPENVPN_FLAGS` working fixed
- `HEALTH_VPN_DURATION_ADDITION` working fixed
- Privado: fix `OPENVPN_PORT` usage, thanks [@cacti-user](https://github.com/cacti-user)
- Firewall: only set routes for IPv4 default routes
- Use `openvpn 2.4.12-r0` in CI build for openvpn 2.4
- Fix PureVPN zip file download link (#915 thanks @mircoianese)
- Private Internet Access: hide escaped url query values (token etc.)
- NordVPN: allow aes-256-gcm for Openvpn 2.4
- Private Internet Access: fix certificate validation (use OS certificates instead of custom certificate)
- Port forwarding: loop exit from vpn loop
- PUID and PGID as 32 bit unsigned integers instead of 16 bit

## Documentation

- Readme: re-add `/dev/net/tun` device since some OSes need it
- Readme: remove old announcement (#938, thanks @martinbjeldbak)

## Maintenance

### CI

- Add CodeQL analysis workflow
- Bump actions/checkout from 2.4.0 to 3 (#870)
- Bump docker/build-push-action from 2.8.0 to 2.10.0 (#832, #893)
- Bump peter-evans/dockerhub-description from 2 to 3 (#908)

### Code

- New internal packages:
    - `internal/constants/providers`
    - `internal/constants/vpn`
- Protonvpn: remove unused exit IPs field in server model
- ProtonVPN: Change server name JSON field from `name` to `server_name`
- Generic server models:
    - Streamline all server models IP addresses:
        - Use `IPs []net.IP` for all server models
        - Use `ips` JSON field for all server models
        - Merge IPv4 and IPv6 addresses together for Mullvad
    - Specify UDP and TCP compatibility for all servers in servers.json
    - Specify VPN protocol for all servers in servers.json
    - Common `Server` model and `Servers` model for all providers (#943)
    - Common filtering builder for all providers
    - Common `GetConnection` for all providers
- Bump github.com/stretchr/testify from 1.7.0 to 1.7.1 (#897)
- Bump `github.com/breml/rootcerts` from 0.2.2 to 0.2.3 (#926)
- Routing: remove unused LocalSubnetGetter
- `internal/httpserver`: remove `name` field and prefix in logs
- Use `internal/httpserver` for control server
- Add defensive check for zero connection found from servers (if no IP is defined)
- Simplify reading of servers JSON file

### Dev environment

- Development container
    - Fix windows script sourcing
    - Remove image name to avoid conflicts
    - Bind mount normally without `:z`
    - Install `htop`
- Update maintenance document