v5 implementation with a single Bitmask struct
Add v5 implementation. I hope it's the final MR... This one uses a single Bitmask struct which has some improvements. The v3/v5 switch is now lower in the code hierarchy.
The big changes are:
- v5 can be enforced with envs: API_VERSION=5 and API_URL=http://localhost:8443
- Only one instance of Bitmask struct, independant if v3/v5 is used - so legacy package was renamed to bitmask
- in
pkt/bitmask/interface.go
there are the functions defined which are implemented by bonafide/menshen - As some of the functions return Gateways, I created a new struct for gateways: TransitGateway (
pkt/vpn/bonafide/backwards.go
)- this can be removed if the v3 way is gone
- FirewallStart in launcher_*.go used the TransitGateways (not strings as prepared before)
- you can ignore the commit "Change function signature of launcher.StartFirewall", as it was changed later to the TransitGateway struct
- Added the v5 implementation in
pkg/vpn/menshen
- v5 and snowflake does not work
- v5 and obsv4 works
- You can ignore commit (Add v5 implementation (bitmask-core) - it adds the Bitmask5 struct which gets removed later in the MR... sorry for the git confusion... I'm happy if this big thing is done...)
- Added depenencies: bitmask-core, pro-bing (used to find out latency, should be moved into bitmask-core in the future, testify for tests)
Some smaller improvements
- Add http timeout (geolocation lookup)
- Removed the InstallHelpers function from the Bitmask interface
- Fixed/Improved logging (snowflake + obfs4 part, replaced panic by log.Fatal)
- Cleaned the code (name of files, functions, ...ListLocationFullness and ListLocationLabels were renamed)
- Document structs and functions in menshen
- Removed unused offersUDP in struct Bitmask
- Removed unused field failed in struct Bitmask
- Changed logic of checkforpugrade
Future work
- I found this bug, maybe we should prioritise it for this release: #823 (closed)
- get rid for the Bbitmask interface
- in the menshen package, there is a function which calculates the latency => move this to bitmask-core (and make it more robust)
- To verify: Bitmask.ReloadFirewall gets never executed #824 (closed)
Tests
- There are tests for the v5 implementation. You need to set the menshn url via env API_URL=..
Please also test snowflake and obfs4. For me everything worked except for bitmask provider+obfs4+US location/gateway
Edited by Pea Nut