diff --git a/internal/constants/servers.go b/internal/constants/servers.go index 68535f8f..f0242a6e 100644 --- a/internal/constants/servers.go +++ b/internal/constants/servers.go @@ -67,8 +67,8 @@ func GetAllServers() (allServers models.AllServers) { Servers: TorguardServers(), }, Vyprvpn: models.VyprvpnServers{ - Version: 1, - Timestamp: 1620326951, + Version: 2, + Timestamp: 1620612506, Servers: VyprvpnServers(), }, Windscribe: models.WindscribeServers{ diff --git a/internal/constants/servers_test.go b/internal/constants/servers_test.go index 8bc92f64..e7c61fee 100644 --- a/internal/constants/servers_test.go +++ b/internal/constants/servers_test.go @@ -97,7 +97,7 @@ func Test_versions(t *testing.T) { "Vyprvpn": { model: models.VyprvpnServer{}, version: allServers.Vyprvpn.Version, - digest: "042bef64", + digest: "58de06d8", }, "Windscribe": { model: models.WindscribeServer{}, @@ -203,7 +203,7 @@ func Test_timestamps(t *testing.T) { "Vyprvpn": { servers: allServers.Vyprvpn.Servers, timestamp: allServers.Vyprvpn.Timestamp, - digest: "eccb7f5c", + digest: "a62c484b", }, "Windscribe": { servers: allServers.Windscribe.Servers, diff --git a/internal/constants/vyprvpn.go b/internal/constants/vyprvpn.go index 1f9d5543..848ad957 100644 --- a/internal/constants/vyprvpn.go +++ b/internal/constants/vyprvpn.go @@ -20,80 +20,81 @@ func VyprvpnRegionChoices() (choices []string) { return makeUnique(choices) } +//nolint:lll func VyprvpnServers() []models.VyprvpnServer { return []models.VyprvpnServer{ - {Region: "Algeria", IPs: []net.IP{{209, 99, 75, 20}}}, - {Region: "Argentina", IPs: []net.IP{{209, 99, 109, 19}}}, - {Region: "Australia Melbourne", IPs: []net.IP{{209, 99, 117, 19}}}, - {Region: "Australia Perth", IPs: []net.IP{{209, 99, 1, 19}}}, - {Region: "Australia Sydney", IPs: []net.IP{{209, 99, 117, 18}}}, - {Region: "Austria", IPs: []net.IP{{128, 90, 96, 18}}}, - {Region: "Bahrain", IPs: []net.IP{{209, 99, 115, 19}}}, - {Region: "Belgium", IPs: []net.IP{{128, 90, 96, 20}}}, - {Region: "Brazil", IPs: []net.IP{{209, 99, 109, 20}}}, - {Region: "Bulgaria", IPs: []net.IP{{128, 90, 96, 22}}}, - {Region: "Canada", IPs: []net.IP{{209, 99, 21, 18}}}, - {Region: "Columbia", IPs: []net.IP{{209, 99, 109, 21}}}, - {Region: "Costa Rica", IPs: []net.IP{{209, 99, 109, 22}}}, - {Region: "Czech Republic", IPs: []net.IP{{128, 90, 96, 24}}}, - {Region: "Denmark", IPs: []net.IP{{128, 90, 96, 28}}}, - {Region: "Dubai", IPs: []net.IP{{128, 90, 45, 104}}}, - {Region: "Egypt", IPs: []net.IP{{209, 99, 75, 21}}}, - {Region: "El Salvador", IPs: []net.IP{{209, 99, 61, 20}}}, - {Region: "Finland", IPs: []net.IP{{128, 90, 96, 32}}}, - {Region: "France", IPs: []net.IP{{128, 90, 96, 34}}}, - {Region: "Germany", IPs: []net.IP{{128, 90, 96, 26}}}, - {Region: "Greece", IPs: []net.IP{{209, 99, 75, 22}}}, - {Region: "Hong Kong", IPs: []net.IP{{128, 90, 227, 18}}}, - {Region: "Iceland", IPs: []net.IP{{209, 99, 22, 20}}}, - {Region: "India", IPs: []net.IP{{209, 99, 115, 20}}}, - {Region: "Indonesia", IPs: []net.IP{{209, 99, 1, 20}}}, - {Region: "Ireland", IPs: []net.IP{{209, 99, 22, 19}}}, - {Region: "Israel", IPs: []net.IP{{209, 99, 75, 18}}}, - {Region: "Italy", IPs: []net.IP{{128, 90, 96, 36}}}, - {Region: "Japan", IPs: []net.IP{{209, 99, 113, 18}}}, - {Region: "Latvia", IPs: []net.IP{{128, 90, 96, 44}}}, - {Region: "Liechtenstein", IPs: []net.IP{{128, 90, 96, 38}}}, - {Region: "Lithuania", IPs: []net.IP{{128, 90, 96, 40}}}, - {Region: "Luxembourg", IPs: []net.IP{{128, 90, 96, 42}}}, - {Region: "Macao", IPs: []net.IP{{128, 90, 227, 36}}}, - {Region: "Malaysia", IPs: []net.IP{{209, 99, 1, 21}}}, - {Region: "Maldives", IPs: []net.IP{{209, 99, 1, 26}}}, - {Region: "Marshall Islands", IPs: []net.IP{{209, 99, 1, 25}}}, - {Region: "Mexico", IPs: []net.IP{{209, 99, 61, 19}}}, - {Region: "Netherlands", IPs: []net.IP{{128, 90, 96, 16}}}, - {Region: "New Zealand", IPs: []net.IP{{209, 99, 117, 20}}}, - {Region: "Norway", IPs: []net.IP{{128, 90, 96, 46}}}, - {Region: "Pakistan", IPs: []net.IP{{209, 99, 75, 23}}}, - {Region: "Panama", IPs: []net.IP{{209, 99, 109, 23}}}, - {Region: "Philippines", IPs: []net.IP{{209, 99, 1, 22}}}, - {Region: "Poland", IPs: []net.IP{{128, 90, 96, 48}}}, - {Region: "Portugal", IPs: []net.IP{{128, 90, 96, 50}}}, - {Region: "Qatar", IPs: []net.IP{{209, 99, 115, 21}}}, - {Region: "Romania", IPs: []net.IP{{128, 90, 96, 52}}}, - {Region: "Russia", IPs: []net.IP{{128, 90, 96, 54}}}, - {Region: "Saudi Arabia", IPs: []net.IP{{209, 99, 115, 22}}}, - {Region: "Singapore", IPs: []net.IP{{209, 99, 1, 18}}}, - {Region: "Slovakia", IPs: []net.IP{{128, 90, 96, 60}}}, - {Region: "Slovenia", IPs: []net.IP{{128, 90, 96, 58}}}, - {Region: "South Korea", IPs: []net.IP{{209, 99, 113, 19}}}, - {Region: "Spain", IPs: []net.IP{{128, 90, 96, 30}}}, - {Region: "Sweden", IPs: []net.IP{{128, 90, 96, 56}}}, - {Region: "Switzerland", IPs: []net.IP{{209, 99, 60, 18}}}, - {Region: "Taiwan", IPs: []net.IP{{128, 90, 227, 27}}}, - {Region: "Thailand", IPs: []net.IP{{209, 99, 1, 23}}}, - {Region: "Turkey", IPs: []net.IP{{128, 90, 96, 62}}}, - {Region: "USA Austin", IPs: []net.IP{{209, 99, 61, 18}}}, - {Region: "USA Chicago", IPs: []net.IP{{209, 99, 93, 18}}}, - {Region: "USA Los Angeles", IPs: []net.IP{{209, 99, 67, 18}}}, - {Region: "USA Miami", IPs: []net.IP{{209, 99, 109, 18}}}, - {Region: "USA New York", IPs: []net.IP{{209, 99, 63, 18}}}, - {Region: "USA San Francisco", IPs: []net.IP{{209, 99, 95, 18}}}, - {Region: "USA Seattle", IPs: []net.IP{{209, 99, 94, 18}}}, - {Region: "USA Washington", IPs: []net.IP{{209, 99, 62, 18}}}, - {Region: "Ukraine", IPs: []net.IP{{128, 90, 96, 64}}}, - {Region: "United Kingdom", IPs: []net.IP{{209, 99, 22, 18}}}, - {Region: "Uruguay", IPs: []net.IP{{209, 99, 61, 21}}}, - {Region: "Vietnam", IPs: []net.IP{{209, 99, 1, 24}}}, + {Region: "Algeria", Hostname: "dz1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 75, 20}}}, + {Region: "Argentina", Hostname: "ar1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 19}}}, + {Region: "Australia Melbourne", Hostname: "au2.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 117, 19}}}, + {Region: "Australia Perth", Hostname: "au3.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 19}}}, + {Region: "Australia Sydney", Hostname: "au1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 117, 18}}}, + {Region: "Austria", Hostname: "at1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 18}}}, + {Region: "Bahrain", Hostname: "bh1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 115, 19}}}, + {Region: "Belgium", Hostname: "be1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 20}}}, + {Region: "Brazil", Hostname: "br1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 20}}}, + {Region: "Bulgaria", Hostname: "bg1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 22}}}, + {Region: "Canada", Hostname: "ca1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 21, 18}}}, + {Region: "Columbia", Hostname: "co1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 21}}}, + {Region: "Costa Rica", Hostname: "cr1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 22}}}, + {Region: "Czech Republic", Hostname: "cz1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 24}}}, + {Region: "Denmark", Hostname: "dk1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 28}}}, + {Region: "Dubai", Hostname: "ae1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 45, 104}}}, + {Region: "Egypt", Hostname: "eg1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 75, 21}}}, + {Region: "El Salvador", Hostname: "sv1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 61, 20}}}, + {Region: "Finland", Hostname: "fi1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 32}}}, + {Region: "France", Hostname: "fr1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 34}}}, + {Region: "Germany", Hostname: "de1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 26}}}, + {Region: "Greece", Hostname: "gr1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 75, 22}}}, + {Region: "Hong Kong", Hostname: "hk1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 227, 18}}}, + {Region: "Iceland", Hostname: "is1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 22, 20}}}, + {Region: "India", Hostname: "in1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 115, 20}}}, + {Region: "Indonesia", Hostname: "id1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 20}}}, + {Region: "Ireland", Hostname: "ie1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 22, 19}}}, + {Region: "Israel", Hostname: "il1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 75, 18}}}, + {Region: "Italy", Hostname: "it1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 36}}}, + {Region: "Japan", Hostname: "jp1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 113, 18}}}, + {Region: "Latvia", Hostname: "lv1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 44}}}, + {Region: "Liechtenstein", Hostname: "li1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 38}}}, + {Region: "Lithuania", Hostname: "lt1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 40}}}, + {Region: "Luxembourg", Hostname: "lu1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 42}}}, + {Region: "Macao", Hostname: "mo1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 227, 36}}}, + {Region: "Malaysia", Hostname: "my1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 21}}}, + {Region: "Maldives", Hostname: "mv1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 26}}}, + {Region: "Marshall Islands", Hostname: "mh1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 25}}}, + {Region: "Mexico", Hostname: "mx1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 61, 19}}}, + {Region: "Netherlands", Hostname: "eu1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 16}}}, + {Region: "New Zealand", Hostname: "nz1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 117, 20}}}, + {Region: "Norway", Hostname: "no1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 46}}}, + {Region: "Pakistan", Hostname: "pk1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 75, 23}}}, + {Region: "Panama", Hostname: "pa1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 23}}}, + {Region: "Philippines", Hostname: "ph1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 22}}}, + {Region: "Poland", Hostname: "pl1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 48}}}, + {Region: "Portugal", Hostname: "pt1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 50}}}, + {Region: "Qatar", Hostname: "qa1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 115, 21}}}, + {Region: "Romania", Hostname: "ro1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 52}}}, + {Region: "Russia", Hostname: "ru1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 54}}}, + {Region: "Saudi Arabia", Hostname: "sa1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 115, 22}}}, + {Region: "Singapore", Hostname: "sg1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 18}}}, + {Region: "Slovakia", Hostname: "sk1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 60}}}, + {Region: "Slovenia", Hostname: "si1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 58}}}, + {Region: "South Korea", Hostname: "kr1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 113, 19}}}, + {Region: "Spain", Hostname: "es1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 30}}}, + {Region: "Sweden", Hostname: "se1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 56}}}, + {Region: "Switzerland", Hostname: "ch1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 60, 18}}}, + {Region: "Taiwan", Hostname: "tw1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 227, 27}}}, + {Region: "Thailand", Hostname: "th1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 23}}}, + {Region: "Turkey", Hostname: "tr1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 62}}}, + {Region: "USA Austin", Hostname: "us3.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 61, 18}}}, + {Region: "USA Chicago", Hostname: "us6.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 93, 18}}}, + {Region: "USA Los Angeles", Hostname: "us1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 67, 18}}}, + {Region: "USA Miami", Hostname: "us4.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 109, 18}}}, + {Region: "USA New York", Hostname: "us5.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 63, 18}}}, + {Region: "USA San Francisco", Hostname: "us7.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 95, 18}}}, + {Region: "USA Seattle", Hostname: "us8.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 94, 18}}}, + {Region: "USA Washington", Hostname: "us2.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 62, 18}}}, + {Region: "Ukraine", Hostname: "ua1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{128, 90, 96, 64}}}, + {Region: "United Kingdom", Hostname: "uk1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 22, 18}}}, + {Region: "Uruguay", Hostname: "uy1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 61, 21}}}, + {Region: "Vietnam", Hostname: "vn1.vyprvpn.com", TCP: false, UDP: true, IPs: []net.IP{{209, 99, 1, 24}}}, } } diff --git a/internal/models/server.go b/internal/models/server.go index 19c3fd4b..849d3995 100644 --- a/internal/models/server.go +++ b/internal/models/server.go @@ -175,12 +175,16 @@ func (s *TorguardServer) String() string { } type VyprvpnServer struct { - Region string `json:"region"` - IPs []net.IP `json:"ips"` + Region string `json:"region"` + Hostname string `json:"hostname"` + TCP bool `json:"tcp"` + UDP bool `json:"udp"` // only support for UDP + IPs []net.IP `json:"ips"` } func (s *VyprvpnServer) String() string { - return fmt.Sprintf("{Region: %q, IPs: %s}", s.Region, goStringifyIPs(s.IPs)) + return fmt.Sprintf("{Region: %q, Hostname: %q, TCP: %t, UDP: %t, IPs: %s}", + s.Region, s.Hostname, s.TCP, s.UDP, goStringifyIPs(s.IPs)) } type WindscribeServer struct { diff --git a/internal/provider/vyprvpn.go b/internal/provider/vyprvpn.go index b4083df2..d3f1b296 100644 --- a/internal/provider/vyprvpn.go +++ b/internal/provider/vyprvpn.go @@ -7,6 +7,7 @@ import ( "net" "net/http" "strconv" + "strings" "github.com/qdm12/gluetun/internal/configuration" "github.com/qdm12/gluetun/internal/constants" @@ -28,11 +29,14 @@ func newVyprvpn(servers []models.VyprvpnServer, timeNow timeNowFunc) *vyprvpn { } } -func (v *vyprvpn) filterServers(regions []string) (servers []models.VyprvpnServer) { +func (v *vyprvpn) filterServers(regions, hostnames []string, protocol string) (servers []models.VyprvpnServer) { for _, server := range v.servers { switch { case - filterByPossibilities(server.Region, regions): + filterByPossibilities(server.Region, regions), + filterByPossibilities(server.Hostname, hostnames), + strings.EqualFold(protocol, "tcp") && !server.TCP, + strings.EqualFold(protocol, "udp") && !server.UDP: default: servers = append(servers, server) } @@ -56,7 +60,7 @@ func (v *vyprvpn) GetOpenVPNConnection(selection configuration.ServerSelection) return models.OpenVPNConnection{IP: selection.TargetIP, Port: port, Protocol: selection.Protocol}, nil } - servers := v.filterServers(selection.Regions) + servers := v.filterServers(selection.Regions, selection.Hostnames, selection.Protocol) if len(servers) == 0 { return connection, fmt.Errorf("no server found for region %s", commaJoin(selection.Regions)) } diff --git a/internal/updater/providers/vyprvpn/hosttoserver.go b/internal/updater/providers/vyprvpn/hosttoserver.go index f880f3e5..e8a3ef55 100644 --- a/internal/updater/providers/vyprvpn/hosttoserver.go +++ b/internal/updater/providers/vyprvpn/hosttoserver.go @@ -8,13 +8,19 @@ import ( type hostToServer map[string]models.VyprvpnServer -func (hts hostToServer) add(host, region string) { +func (hts hostToServer) add(host, region string, tcp, udp bool) { server, ok := hts[host] - // TODO set host if !ok { + server.Hostname = host server.Region = region - hts[host] = server } + if tcp { + server.TCP = true + } + if udp { + server.UDP = true + } + hts[host] = server } func (hts hostToServer) toHostsSlice() (hosts []string) { diff --git a/internal/updater/providers/vyprvpn/servers.go b/internal/updater/providers/vyprvpn/servers.go index 120dd700..7bc38fce 100644 --- a/internal/updater/providers/vyprvpn/servers.go +++ b/internal/updater/providers/vyprvpn/servers.go @@ -46,13 +46,21 @@ func GetServers(ctx context.Context, unzipper unzip.Unzipper, continue } + tcp, udp, err := openvpn.ExtractProto(content) + if err != nil { + // treat error as warning and go to next file + warning := err.Error() + " in " + fileName + warnings = append(warnings, warning) + continue + } + region, err := parseFilename(fileName) if err != nil { warnings = append(warnings, err.Error()) continue } - hts.add(host, region) + hts.add(host, region, tcp, udp) } if len(hts) < minServers {