mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-06 20:10:11 +02:00
chore(wevpn): removed since it is now decomissioned
This commit is contained in:
@@ -67,7 +67,6 @@ body:
|
||||
- VPNSecure.me
|
||||
- VPNUnlimited
|
||||
- VyprVPN
|
||||
- WeVPN
|
||||
- Windscribe
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -86,8 +86,6 @@
|
||||
color: "cfe8d4"
|
||||
- name: "☁️ Vyprvpn"
|
||||
color: "cfe8d4"
|
||||
- name: "☁️ WeVPN"
|
||||
color: "cfe8d4"
|
||||
- name: "☁️ Windscribe"
|
||||
color: "cfe8d4"
|
||||
|
||||
|
||||
@@ -58,11 +58,11 @@ Lightweight swiss-army-knife-like VPN client to multiple VPN service providers
|
||||
## Features
|
||||
|
||||
- Based on Alpine 3.22 for a small Docker image of 41.1MB
|
||||
- Supports: **AirVPN**, **Cyberghost**, **ExpressVPN**, **FastestVPN**, **Giganews**, **HideMyAss**, **IPVanish**, **IVPN**, **Mullvad**, **NordVPN**, **Perfect Privacy**, **Privado**, **Private Internet Access**, **PrivateVPN**, **ProtonVPN**, **PureVPN**, **SlickVPN**, **Surfshark**, **TorGuard**, **VPNSecure.me**, **VPNUnlimited**, **Vyprvpn**, **WeVPN**, **Windscribe** servers
|
||||
- Supports: **AirVPN**, **Cyberghost**, **ExpressVPN**, **FastestVPN**, **Giganews**, **HideMyAss**, **IPVanish**, **IVPN**, **Mullvad**, **NordVPN**, **Perfect Privacy**, **Privado**, **Private Internet Access**, **PrivateVPN**, **ProtonVPN**, **PureVPN**, **SlickVPN**, **Surfshark**, **TorGuard**, **VPNSecure.me**, **VPNUnlimited**, **Vyprvpn**, **Windscribe** servers
|
||||
- Supports OpenVPN for all providers listed
|
||||
- Supports Wireguard both kernelspace and userspace
|
||||
- For **AirVPN**, **FastestVPN**, **Ivpn**, **Mullvad**, **NordVPN**, **Perfect privacy**, **ProtonVPN**, **Surfshark** and **Windscribe**
|
||||
- For **Cyberghost**, **Private Internet Access**, **PrivateVPN**, **PureVPN**, **Torguard**, **VPN Unlimited**, **VyprVPN** and **WeVPN** using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md)
|
||||
- For **Cyberghost**, **Private Internet Access**, **PrivateVPN**, **PureVPN**, **Torguard**, **VPN Unlimited** and **VyprVPN** using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md)
|
||||
- For custom Wireguard configurations using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md)
|
||||
- More in progress, see [#134](https://github.com/qdm12/gluetun/issues/134)
|
||||
- DNS over TLS baked in with service provider(s) of your choice
|
||||
|
||||
@@ -209,8 +209,7 @@ func validateOpenVPNClientKey(vpnProvider, clientKey string) (err error) {
|
||||
case
|
||||
providers.Airvpn,
|
||||
providers.Cyberghost,
|
||||
providers.VPNUnlimited,
|
||||
providers.Wevpn:
|
||||
providers.VPNUnlimited:
|
||||
if clientKey == "" {
|
||||
return fmt.Errorf("%w", ErrMissingValue)
|
||||
}
|
||||
|
||||
@@ -108,9 +108,6 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) {
|
||||
case providers.SlickVPN:
|
||||
allowedTCP = []uint16{443, 8080, 8888}
|
||||
allowedUDP = []uint16{443, 8080, 8888}
|
||||
case providers.Wevpn:
|
||||
allowedTCP = []uint16{53, 1195, 1199, 2018}
|
||||
allowedUDP = []uint16{80, 1194, 1198}
|
||||
case providers.Windscribe:
|
||||
allowedTCP = []uint16{21, 22, 80, 123, 143, 443, 587, 1194, 3306, 8080, 54783}
|
||||
allowedUDP = []uint16{53, 80, 123, 443, 1194, 54783}
|
||||
|
||||
@@ -27,7 +27,6 @@ const (
|
||||
VPNSecure = "vpnsecure"
|
||||
VPNUnlimited = "vpn unlimited"
|
||||
Vyprvpn = "vyprvpn"
|
||||
Wevpn = "wevpn"
|
||||
Windscribe = "windscribe"
|
||||
)
|
||||
|
||||
@@ -56,7 +55,6 @@ func All() []string {
|
||||
VPNSecure,
|
||||
VPNUnlimited,
|
||||
Vyprvpn,
|
||||
Wevpn,
|
||||
Windscribe,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,8 +166,6 @@ func getMarkdownHeaders(vpnProvider string) (headers []string, err error) {
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Vyprvpn:
|
||||
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Wevpn:
|
||||
return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Windscribe:
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}, nil
|
||||
default:
|
||||
|
||||
@@ -33,7 +33,6 @@ import (
|
||||
"github.com/qdm12/gluetun/internal/provider/vpnsecure"
|
||||
"github.com/qdm12/gluetun/internal/provider/vpnunlimited"
|
||||
"github.com/qdm12/gluetun/internal/provider/vyprvpn"
|
||||
"github.com/qdm12/gluetun/internal/provider/wevpn"
|
||||
"github.com/qdm12/gluetun/internal/provider/windscribe"
|
||||
)
|
||||
|
||||
@@ -83,7 +82,6 @@ func NewProviders(storage Storage, timeNow func() time.Time,
|
||||
providers.VPNSecure: vpnsecure.New(storage, randSource, client, updaterWarner, parallelResolver),
|
||||
providers.VPNUnlimited: vpnunlimited.New(storage, randSource, unzipper, updaterWarner, parallelResolver),
|
||||
providers.Vyprvpn: vyprvpn.New(storage, randSource, unzipper, updaterWarner, parallelResolver),
|
||||
providers.Wevpn: wevpn.New(storage, randSource, updaterWarner, parallelResolver),
|
||||
providers.Windscribe: windscribe.New(storage, randSource, client, updaterWarner),
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package wevpn
|
||||
|
||||
import (
|
||||
"github.com/qdm12/gluetun/internal/configuration/settings"
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/provider/utils"
|
||||
)
|
||||
|
||||
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
|
||||
connection models.Connection, err error,
|
||||
) {
|
||||
defaults := utils.NewConnectionDefaults(1195, 1194, 0) //nolint:mnd
|
||||
return utils.GetConnection(p.Name(),
|
||||
p.storage, selection, defaults, ipv6Supported, p.randSource)
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
package wevpn
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math/rand"
|
||||
"net/netip"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/qdm12/gluetun/internal/configuration/settings"
|
||||
"github.com/qdm12/gluetun/internal/constants"
|
||||
"github.com/qdm12/gluetun/internal/constants/providers"
|
||||
"github.com/qdm12/gluetun/internal/constants/vpn"
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/provider/common"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func Test_Provider_GetConnection(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
const provider = providers.Wevpn
|
||||
|
||||
errTest := errors.New("test error")
|
||||
|
||||
testCases := map[string]struct {
|
||||
filteredServers []models.Server
|
||||
storageErr error
|
||||
selection settings.ServerSelection
|
||||
ipv6Supported bool
|
||||
connection models.Connection
|
||||
errWrapped error
|
||||
errMessage string
|
||||
panicMessage string
|
||||
}{
|
||||
"error": {
|
||||
storageErr: errTest,
|
||||
errWrapped: errTest,
|
||||
errMessage: "filtering servers: test error",
|
||||
},
|
||||
"default OpenVPN TCP port": {
|
||||
filteredServers: []models.Server{
|
||||
{IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}},
|
||||
},
|
||||
selection: settings.ServerSelection{
|
||||
OpenVPN: settings.OpenVPNSelection{
|
||||
Protocol: constants.TCP,
|
||||
},
|
||||
}.WithDefaults(provider),
|
||||
connection: models.Connection{
|
||||
Type: vpn.OpenVPN,
|
||||
IP: netip.AddrFrom4([4]byte{1, 1, 1, 1}),
|
||||
Port: 1195,
|
||||
Protocol: constants.TCP,
|
||||
},
|
||||
},
|
||||
"default OpenVPN UDP port": {
|
||||
filteredServers: []models.Server{
|
||||
{IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}},
|
||||
},
|
||||
selection: settings.ServerSelection{
|
||||
OpenVPN: settings.OpenVPNSelection{
|
||||
Protocol: constants.UDP,
|
||||
},
|
||||
}.WithDefaults(provider),
|
||||
connection: models.Connection{
|
||||
Type: vpn.OpenVPN,
|
||||
IP: netip.AddrFrom4([4]byte{1, 1, 1, 1}),
|
||||
Port: 1194,
|
||||
Protocol: constants.UDP,
|
||||
},
|
||||
},
|
||||
"default Wireguard port": {
|
||||
filteredServers: []models.Server{
|
||||
{IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}, WgPubKey: "x"},
|
||||
},
|
||||
selection: settings.ServerSelection{
|
||||
VPN: vpn.Wireguard,
|
||||
}.WithDefaults(provider),
|
||||
panicMessage: "no default Wireguard port is defined!",
|
||||
},
|
||||
}
|
||||
|
||||
for name, testCase := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctrl := gomock.NewController(t)
|
||||
|
||||
storage := common.NewMockStorage(ctrl)
|
||||
storage.EXPECT().FilterServers(provider, testCase.selection).
|
||||
Return(testCase.filteredServers, testCase.storageErr)
|
||||
randSource := rand.NewSource(0)
|
||||
|
||||
warner := (common.Warner)(nil)
|
||||
parallelResolver := (common.ParallelResolver)(nil)
|
||||
provider := New(storage, randSource, warner, parallelResolver)
|
||||
|
||||
if testCase.panicMessage != "" {
|
||||
assert.PanicsWithValue(t, testCase.panicMessage, func() {
|
||||
_, _ = provider.GetConnection(testCase.selection, testCase.ipv6Supported)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
connection, err := provider.GetConnection(testCase.selection, testCase.ipv6Supported)
|
||||
|
||||
assert.ErrorIs(t, err, testCase.errWrapped)
|
||||
if testCase.errWrapped != nil {
|
||||
assert.EqualError(t, err, testCase.errMessage)
|
||||
}
|
||||
|
||||
assert.Equal(t, testCase.connection, connection)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package wevpn
|
||||
|
||||
import (
|
||||
"github.com/qdm12/gluetun/internal/configuration/settings"
|
||||
"github.com/qdm12/gluetun/internal/constants/openvpn"
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/provider/utils"
|
||||
)
|
||||
|
||||
func (p *Provider) OpenVPNConfig(connection models.Connection,
|
||||
settings settings.OpenVPN, ipv6Supported bool,
|
||||
) (lines []string) {
|
||||
//nolint:mnd
|
||||
providerSettings := utils.OpenVPNProviderSettings{
|
||||
RemoteCertTLS: true,
|
||||
AuthUserPass: true,
|
||||
Ciphers: []string{
|
||||
openvpn.AES256gcm,
|
||||
},
|
||||
Auth: openvpn.SHA512,
|
||||
MssFix: 1320,
|
||||
Ping: 30,
|
||||
RenegDisabled: true,
|
||||
CAs: []string{"MIIDQjCCAiqgAwIBAgIUPppqnRZfvGGrT4GjXFE4Q29QzgowDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIQ2hhbmdlTWUwHhcNMTkxMTA1MjMzMzIzWhcNMjkxMTAyMjMzMzIzWjATMREwDwYDVQQDDAhDaGFuZ2VNZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5DFBJlTqhXukJFWlI8TNW9+HEQCZXhyVFvQhJFF2xIGVNx51XzqxiRANjVJZJrA68kV8az0v2Dxj0SFnRWDR6pOjjdp2CyHFcgHyfv+4MrsreAtkue86bB/1ECPWaoIwtaLnwI6SEmFZl98RlI9v4M/8IE4chOnMrM/F22+2OXI//TduvTcbyOMUiiouIP8UG1FB3J5FyuaW6qPZz2G0efDoaOI+E9LSxE87OoFrII7UqdHlWxRb3nUuPU1Ee4rN/d4tFyP4AvPKfsGhVOwyGG21IdRnbXIuDi0xytkCGOZ4j2bq5zqudnp4Izt6yJgdzZpQQWK3kSHB3qTT/Yzl8CAwEAAaOBjTCBijAdBgNVHQ4EFgQUXYkoo4WbkkvbgLVdGob9RScRf3AwTgYDVR0jBEcwRYAUXYkoo4WbkkvbgLVdGob9RScRf3ChF6QVMBMxETAPBgNVBAMMCENoYW5nZU1lghQ+mmqdFl+8YatPgaNcUThDb1DOCjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAOr1XmyWBRYfTQPNvZZ+DjCfiRYzLOi2AGefZt/jETqPDF8deVbyL1fLhXZzuX+5Etlsil3PflJjpzc/FSeZRuYRaShtwF3j6I08Eww9rBkaCnsukMUcLtMOvhdAU8dUakcRA2wkQ7Z+TWdMBv5+/6MnX10An1fIz7bAy3btMEOPTEFLo8Bst1SxJtUMaqhUteSOJ1VorpK3CWfOFaXxbJAb4E0+3zt6Vsc8mY5tt6wAi8IqiN4WD79ZdvKxENK4FMkR1kNpBY97mvdf82rzpwiBuJgN5ywmH78Ghj+9T8nI6/UIqJ1y22IRYGv6dMif8fHo5WWhCv3qmCqqY8vwuxw=="}, //nolint:lll
|
||||
Cert: "MIIDTDCCAjSgAwIBAgIRAKxt8SMIXezjmHm2KDCAQdIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIQ2hhbmdlTWUwHhcNMTkxMTA1MjMzMzI0WhcNMjkxMTAyMjMzMzI0WjAOMQwwCgYDVQQDDAN0Y3AwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvEwY2erLhMm3Mpsnybm3G6zvGyeblUAaehQVEUs+KM2/5np0Ovx0y8Iz9pIC9ITaWM0B3dM6uBsNEtylZIe4Dd9aFujunSeCFsLRf8i9AbrUombpQ6P4jzYFBxwcEw//UShwa4HZI6JuSYikdpx/dyXdBH2skahwDVc8VUFdBLLSglfKGbuzP9GsdSwQCeBRWgA3dvIzIkQkBwfnt9WQKUfRAe8e5NybaAn8Yuu9sjLkQe6eyV7toxkZTcEXdABG2vtdTEzlAsQilZzIxg3jcdeEgMgRKngng+YNP0rR5nofZ1iDlp+vBj0nuqTTJLHMrRWPIc7bdYFD/f2J49WORAgMBAAGjgZ8wgZwwCQYDVR0TBAIwADAdBgNVHQ4EFgQUmSAFmCo1FAKVq8RQF7jMxMxcMtUwTgYDVR0jBEcwRYAUXYkoo4WbkkvbgLVdGob9RScRf3ChF6QVMBMxETAPBgNVBAMMCENoYW5nZU1lghQ+mmqdFl+8YatPgaNcUThDb1DOCjATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQADggEBADPqdEgL+0kou8P974QEaNg1XOAXpwP0NNqbkZ/Oj9+Lp96YAhAHOAJig+RWbBktK8zu8oUUGR1qLXAWCmirlXErVuBRnadTEh3A7SOuY02BcsYAtpQ2EU9j5K/LV7nTfagkVdWy7x/av361UD4t9fv1j4YYTh4XLRp7KVXs6AGZ7T1hqPYFMUIoPpFhPzFxH4euJjfazr4SkTR6k6Vhw3pyFd6HP65vcqpzHGxFytSa8HtltBk2DpzIf8yV9TEy+gOXFaaGss0YKQ5OU1ieqZRuLVEGiu17lByYiQGyemIETJbdkyiSg93dDJRxjaTk7c8CEdpipt07ndSIPldMtXA=", //nolint:lll
|
||||
TLSCrypt: "7be66c0df0b8855e076d9e37b19f9ff3c1735ed537dee6dc786e51bdb8502f878077eeba0420a25e2b04814d22bbdcc0191a4fc396fdba1af6eb090a9d8664f18e70012ee98a2e32c28620a771d13cf3a619c417480c2c312562fffaebfd7ba73f57a28edde6c287365e6ce28291a29728da211cb53e01aa46b92f5f276c61fb46bd810b41219022c8f3d9e699fe9ade6bfcbb937fbbf6f49d741740e71c7c008a9a13c2432608038c6310b4f33588d8d234b3dffcf0823395267d73140d0e9a40e323ca92866c37073bfb072ab9de518bb9f2c65df7e219c2f114afbcf7c6e3c401cb08c3ed2901725b0601d2b5de89245719dd32506d52f149d14156215c1e", //nolint:lll
|
||||
ExtraLines: []string{
|
||||
"redirect-gateway def1 bypass-dhcp",
|
||||
},
|
||||
}
|
||||
return utils.OpenVPNConfig(providerSettings, connection, settings, ipv6Supported)
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package wevpn
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/constants/providers"
|
||||
"github.com/qdm12/gluetun/internal/provider/common"
|
||||
"github.com/qdm12/gluetun/internal/provider/wevpn/updater"
|
||||
)
|
||||
|
||||
type Provider struct {
|
||||
storage common.Storage
|
||||
randSource rand.Source
|
||||
common.Fetcher
|
||||
}
|
||||
|
||||
func New(storage common.Storage, randSource rand.Source,
|
||||
updaterWarner common.Warner,
|
||||
parallelResolver common.ParallelResolver,
|
||||
) *Provider {
|
||||
return &Provider{
|
||||
storage: storage,
|
||||
randSource: randSource,
|
||||
Fetcher: updater.New(updaterWarner, parallelResolver),
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Provider) Name() string {
|
||||
return providers.Wevpn
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
package updater
|
||||
|
||||
// getAvailableCities get available cities as listed on the WeVPN website.
|
||||
func getAvailableCities() (cities []string) {
|
||||
return []string{
|
||||
"Cairo",
|
||||
"Chennai",
|
||||
"Denizli",
|
||||
"Dubai",
|
||||
"Johannesburg",
|
||||
"Lagos",
|
||||
"Tel Aviv",
|
||||
"Atlanta",
|
||||
"Buenos Aires",
|
||||
"Chicago",
|
||||
"Dallas",
|
||||
"Denver",
|
||||
"Los Angeles",
|
||||
"Los Angeles-PF",
|
||||
"Mexico City",
|
||||
"Miami",
|
||||
"Montreal",
|
||||
"New Jersey",
|
||||
"New York",
|
||||
"New York-PF",
|
||||
"Phoenix",
|
||||
"Salt Lake City",
|
||||
"San Jose",
|
||||
"Sao Paulo",
|
||||
"Seattle",
|
||||
"Toronto",
|
||||
"Vancouver",
|
||||
"Washington DC",
|
||||
"Auckland",
|
||||
"Hanoi",
|
||||
"Hong Kong",
|
||||
"Jakarta",
|
||||
"Manila",
|
||||
"Melbourne",
|
||||
"Moscow",
|
||||
"Seoul",
|
||||
"Sibu",
|
||||
"Singapore",
|
||||
"St Petersburg",
|
||||
"Sydney",
|
||||
"Taipei",
|
||||
"Tokyo",
|
||||
"Amsterdam",
|
||||
"Athens",
|
||||
"Belgrade",
|
||||
"Brussels",
|
||||
"Bucharest",
|
||||
"Budapest",
|
||||
"Copenhagen",
|
||||
"Dublin",
|
||||
"Frankfurt",
|
||||
"Helsinki",
|
||||
"Kiev",
|
||||
"Lisbon",
|
||||
"London",
|
||||
"London-PF",
|
||||
"Luxembourg",
|
||||
"Madrid",
|
||||
"Manchester",
|
||||
"Milan",
|
||||
"Oslo",
|
||||
"Oulu",
|
||||
"Paris",
|
||||
"Prague",
|
||||
"Sofia",
|
||||
"Stockholm",
|
||||
"Vienna",
|
||||
"Warsaw",
|
||||
"Zurich",
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package updater
|
||||
|
||||
import "strings"
|
||||
|
||||
func getHostnameFromCity(city string) (hostname string) {
|
||||
host := strings.ToLower(city)
|
||||
host = strings.ReplaceAll(host, ".", "")
|
||||
host = strings.ReplaceAll(host, " ", "")
|
||||
|
||||
specialCases := map[string]string{
|
||||
"washingtondc": "washington",
|
||||
"mexicocity": "mexico",
|
||||
"denizli": "bursa",
|
||||
"sibu": "kualalumpur",
|
||||
"kiev": "kyiv",
|
||||
"stpetersburg": "petersburg",
|
||||
}
|
||||
if specialHost, ok := specialCases[host]; ok {
|
||||
host = specialHost
|
||||
}
|
||||
|
||||
hostname = host + ".wevpn.com"
|
||||
return hostname
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package updater
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/updater/resolver"
|
||||
)
|
||||
|
||||
func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) {
|
||||
const (
|
||||
maxFailRatio = 0.1
|
||||
maxDuration = 20 * time.Second
|
||||
betweenDuration = time.Second
|
||||
maxNoNew = 2
|
||||
maxFails = 2
|
||||
)
|
||||
return resolver.ParallelSettings{
|
||||
Hosts: hosts,
|
||||
MaxFailRatio: maxFailRatio,
|
||||
Repeat: resolver.RepeatSettings{
|
||||
MaxDuration: maxDuration,
|
||||
BetweenDuration: betweenDuration,
|
||||
MaxNoNew: maxNoNew,
|
||||
MaxFails: maxFails,
|
||||
SortIPs: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package updater
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/constants/vpn"
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/provider/common"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrGetZip = errors.New("cannot get OpenVPN ZIP file")
|
||||
ErrGetAPI = errors.New("cannot fetch server information from API")
|
||||
)
|
||||
|
||||
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
|
||||
servers []models.Server, err error,
|
||||
) {
|
||||
cities := getAvailableCities()
|
||||
servers = make([]models.Server, 0, len(cities))
|
||||
hostnames := make([]string, len(cities))
|
||||
hostnameToCity := make(map[string]string, len(cities))
|
||||
|
||||
for i, city := range cities {
|
||||
hostname := getHostnameFromCity(city)
|
||||
hostnames[i] = hostname
|
||||
hostnameToCity[hostname] = city
|
||||
}
|
||||
|
||||
resolverSettings := parallelResolverSettings(hostnames)
|
||||
hostnameToIPs, warnings, err := u.parallelResolver.Resolve(ctx, resolverSettings)
|
||||
for _, warning := range warnings {
|
||||
u.warner.Warn(warning)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(hostnameToIPs) < minServers {
|
||||
return nil, fmt.Errorf("%w: %d and expected at least %d",
|
||||
common.ErrNotEnoughServers, len(servers), minServers)
|
||||
}
|
||||
|
||||
for hostname, ips := range hostnameToIPs {
|
||||
city := hostnameToCity[hostname]
|
||||
server := models.Server{
|
||||
VPN: vpn.OpenVPN,
|
||||
City: city,
|
||||
Hostname: hostname,
|
||||
UDP: true,
|
||||
IPs: ips,
|
||||
}
|
||||
servers = append(servers, server)
|
||||
}
|
||||
|
||||
sort.Sort(models.SortableServers(servers))
|
||||
|
||||
return servers, nil
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package updater
|
||||
|
||||
import "github.com/qdm12/gluetun/internal/provider/common"
|
||||
|
||||
type Updater struct {
|
||||
parallelResolver common.ParallelResolver
|
||||
warner common.Warner
|
||||
}
|
||||
|
||||
func New(warner common.Warner, parallelResolver common.ParallelResolver) *Updater {
|
||||
return &Updater{
|
||||
parallelResolver: parallelResolver,
|
||||
warner: warner,
|
||||
}
|
||||
}
|
||||
@@ -297189,633 +297189,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"wevpn": {
|
||||
"version": 2,
|
||||
"timestamp": 1679755674,
|
||||
"servers": [
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Amsterdam",
|
||||
"hostname": "amsterdam.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"89.238.177.234"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Athens",
|
||||
"hostname": "athens.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"185.51.134.210"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Atlanta",
|
||||
"hostname": "atlanta.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"104.223.91.146"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Auckland",
|
||||
"hostname": "auckland.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"103.108.94.226"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Belgrade",
|
||||
"hostname": "belgrade.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.120.193.170"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Brussels",
|
||||
"hostname": "brussels.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"77.243.191.178"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Bucharest",
|
||||
"hostname": "bucharest.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"86.105.25.162"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Budapest",
|
||||
"hostname": "budapest.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"185.128.26.130"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Buenos Aires",
|
||||
"hostname": "buenosaires.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"131.255.4.140"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Cairo",
|
||||
"hostname": "cairo.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.214.122.138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Chennai",
|
||||
"hostname": "chennai.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"169.38.107.52"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Chicago",
|
||||
"hostname": "chicago.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"69.39.239.72"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Copenhagen",
|
||||
"hostname": "copenhagen.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.120.194.82"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Dallas",
|
||||
"hostname": "dallas.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"194.110.112.74"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Denizli",
|
||||
"hostname": "bursa.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"89.252.132.138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Denver",
|
||||
"hostname": "denver.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"70.39.71.2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Dubai",
|
||||
"hostname": "dubai.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.193.42"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Dublin",
|
||||
"hostname": "dublin.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.222.138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Frankfurt",
|
||||
"hostname": "frankfurt.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.141.152.178"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Hanoi",
|
||||
"hostname": "hanoi.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.214.152.194"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Helsinki",
|
||||
"hostname": "helsinki.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"185.212.149.152"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Hong Kong",
|
||||
"hostname": "hongkong.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"84.17.37.55"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Jakarta",
|
||||
"hostname": "jakarta.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.133.181.58"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Johannesburg",
|
||||
"hostname": "johannesburg.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"102.165.20.38"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Kiev",
|
||||
"hostname": "kyiv.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.19.218.197"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Lagos",
|
||||
"hostname": "lagos.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"102.129.144.142"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Lisbon",
|
||||
"hostname": "lisbon.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"185.90.57.152"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "London",
|
||||
"hostname": "london.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.141.154.2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "London-PF",
|
||||
"hostname": "london-pf.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"77.243.177.78"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Los Angeles",
|
||||
"hostname": "losangeles.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.152.182.82"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Los Angeles-PF",
|
||||
"hostname": "losangeles-pf.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"66.55.92.75"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Luxembourg",
|
||||
"hostname": "luxembourg.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"5.253.204.194"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Madrid",
|
||||
"hostname": "madrid.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.152.183.242"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Manchester",
|
||||
"hostname": "manchester.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"86.106.136.98"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Manila",
|
||||
"hostname": "manila.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.214.125.106"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Melbourne",
|
||||
"hostname": "melbourne.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"116.206.230.130"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Mexico City",
|
||||
"hostname": "mexico.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"169.57.35.97"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Miami",
|
||||
"hostname": "miami.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"96.47.224.2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Milan",
|
||||
"hostname": "milan.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.197.138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Montreal",
|
||||
"hostname": "montreal.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.200.242"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Moscow",
|
||||
"hostname": "moscow.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"80.93.181.194"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "New Jersey",
|
||||
"hostname": "newjersey.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"23.226.131.146"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "New York",
|
||||
"hostname": "newyork.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.206.98"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "New York-PF",
|
||||
"hostname": "newyork-pf.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.241.179.2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Oslo",
|
||||
"hostname": "oslo.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"84.247.50.10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Oulu",
|
||||
"hostname": "oulu.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.126.89.174"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Paris",
|
||||
"hostname": "paris.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.120.136.234"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Phoenix",
|
||||
"hostname": "phoenix.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"170.130.15.34"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Prague",
|
||||
"hostname": "prague.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.199.138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Salt Lake City",
|
||||
"hostname": "saltlakecity.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"107.182.234.233"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "San Jose",
|
||||
"hostname": "sanjose.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"66.115.157.226"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Sao Paulo",
|
||||
"hostname": "saopaulo.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"177.54.152.89"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Seattle",
|
||||
"hostname": "seattle.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"104.140.21.178"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Seoul",
|
||||
"hostname": "seoul.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"169.56.83.206"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Sibu",
|
||||
"hostname": "kualalumpur.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"223.25.246.4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Singapore",
|
||||
"hostname": "singapore.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"84.17.38.144"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Sofia",
|
||||
"hostname": "sofia.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.221.42"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "St Petersburg",
|
||||
"hostname": "petersburg.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"82.202.220.242"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Stockholm",
|
||||
"hostname": "stockholm.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"45.83.91.66"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Sydney",
|
||||
"hostname": "sydney.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"46.102.153.106"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Taipei",
|
||||
"hostname": "taipei.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"188.214.106.98"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Tel Aviv",
|
||||
"hostname": "telaviv.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"212.199.61.55"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Tokyo",
|
||||
"hostname": "tokyo.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"84.17.34.8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Toronto",
|
||||
"hostname": "toronto.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"184.75.208.234"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Vancouver",
|
||||
"hostname": "vancouver.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"71.19.249.109"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Vienna",
|
||||
"hostname": "vienna.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.120.212.162"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Warsaw",
|
||||
"hostname": "warsaw.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"217.138.209.122"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Washington DC",
|
||||
"hostname": "washington.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"70.32.0.208"
|
||||
]
|
||||
},
|
||||
{
|
||||
"vpn": "openvpn",
|
||||
"city": "Zurich",
|
||||
"hostname": "zurich.wevpn.com",
|
||||
"udp": true,
|
||||
"ips": [
|
||||
"37.120.137.82"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"windscribe": {
|
||||
"version": 2,
|
||||
"timestamp": 1722459630,
|
||||
@@ -306792,4 +306165,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user