Obtain PIA v4 server information from API (#257)

- Obtain CN for port forwarding https verification
- Obtain for each server if they support port forwarding
- Obtain for each server their IP address for openvpn UDP and openvpn TCP (one for each)
- Updater program updated to use API
- Hardcoded values updated for PIA v3 and v4 servers
- Clearer separation between pia v3 and v4
- Fixes #250
This commit is contained in:
Quentin McGaw
2020-10-12 13:57:45 -04:00
committed by GitHub
parent ae7fc5fe96
commit 9f6450502c
13 changed files with 419 additions and 267 deletions

View File

@@ -26,90 +26,101 @@ func PIAGeoChoices() (choices []string) {
func PIAServers() []models.PIAServer {
return []models.PIAServer{
{Region: "AU Melbourne", IPs: []net.IP{{27, 50, 74, 184}}},
{Region: "AU Perth", IPs: []net.IP{{43, 250, 205, 170}}},
{Region: "AU Sydney", IPs: []net.IP{{103, 2, 196, 167}}},
{Region: "Algeria", IPs: []net.IP{{45, 133, 91, 210}}},
{Region: "Andorra", IPs: []net.IP{{45, 139, 49, 241}}},
{Region: "Argentina", IPs: []net.IP{{190, 106, 134, 82}}},
{Region: "Armenia", IPs: []net.IP{{45, 139, 50, 232}}},
{Region: "Austria", IPs: []net.IP{{156, 146, 60, 14}}},
{Region: "Bahamas", IPs: []net.IP{{45, 132, 143, 206}}},
{Region: "Bangladesh", IPs: []net.IP{{45, 132, 142, 210}}},
{Region: "Belgium", IPs: []net.IP{{5, 253, 205, 147}}},
{Region: "Bulgaria", IPs: []net.IP{{217, 138, 221, 130}}},
{Region: "CA Montreal", IPs: []net.IP{{172, 98, 71, 13}}},
{Region: "CA Toronto", IPs: []net.IP{{66, 115, 142, 81}}},
{Region: "Cambodia", IPs: []net.IP{{188, 215, 235, 103}}},
{Region: "China", IPs: []net.IP{{45, 132, 193, 234}}},
{Region: "Cyprus", IPs: []net.IP{{45, 132, 137, 235}}},
{Region: "Czech Republic", IPs: []net.IP{{212, 102, 39, 194}}},
{Region: "DE Berlin", IPs: []net.IP{{89, 36, 76, 69}}},
{Region: "DE Frankfurt", IPs: []net.IP{{185, 216, 33, 164}}},
{Region: "Denmark", IPs: []net.IP{{188, 126, 94, 124}}},
{Region: "Egypt", IPs: []net.IP{{188, 214, 122, 119}}},
{Region: "Finland", IPs: []net.IP{{188, 126, 89, 10}}},
{Region: "France", IPs: []net.IP{{156, 146, 63, 210}}},
{Region: "Georgia", IPs: []net.IP{{45, 132, 138, 236}}},
{Region: "Greenland", IPs: []net.IP{{45, 131, 209, 233}}},
{Region: "Hungary", IPs: []net.IP{{217, 138, 192, 222}}},
{Region: "Iceland", IPs: []net.IP{{45, 133, 193, 85}}},
{Region: "India", IPs: []net.IP{{103, 26, 205, 251}}},
{Region: "Iran", IPs: []net.IP{{45, 131, 4, 208}}},
{Region: "Ireland", IPs: []net.IP{{5, 157, 13, 41}}},
{Region: "Isle of Man", IPs: []net.IP{{45, 132, 140, 213}}},
{Region: "Israel", IPs: []net.IP{{185, 77, 248, 10}}},
{Region: "Italy", IPs: []net.IP{{156, 146, 41, 77}}},
{Region: "Japan", IPs: []net.IP{{156, 146, 34, 164}}},
{Region: "Kazakhstan", IPs: []net.IP{{45, 133, 88, 231}}},
{Region: "Liechtenstein", IPs: []net.IP{{45, 139, 48, 236}}},
{Region: "Luxembourg", IPs: []net.IP{{92, 223, 89, 80}}},
{Region: "Macao", IPs: []net.IP{{45, 137, 197, 207}}},
{Region: "Malta", IPs: []net.IP{{45, 137, 198, 235}}},
{Region: "Mexico", IPs: []net.IP{{77, 81, 142, 5}}},
{Region: "Moldova", IPs: []net.IP{{178, 175, 129, 40}}},
{Region: "Monaco", IPs: []net.IP{{45, 137, 199, 237}}},
{Region: "Mongolia", IPs: []net.IP{{45, 139, 51, 211}}},
{Region: "Montenegro", IPs: []net.IP{{45, 131, 208, 206}}},
{Region: "Morocco", IPs: []net.IP{{45, 131, 211, 234}}},
{Region: "Netherlands", IPs: []net.IP{{37, 235, 101, 73}}},
{Region: "New Zealand", IPs: []net.IP{{43, 250, 207, 70}}},
{Region: "Nigeria", IPs: []net.IP{{45, 137, 196, 208}}},
{Region: "Norway", IPs: []net.IP{{46, 246, 122, 82}}},
{Region: "Panama", IPs: []net.IP{{45, 131, 210, 206}}},
{Region: "Philippines", IPs: []net.IP{{188, 214, 125, 138}}},
{Region: "Poland", IPs: []net.IP{{217, 138, 209, 243}}},
{Region: "Qatar", IPs: []net.IP{{45, 131, 7, 209}}},
{Region: "Romania", IPs: []net.IP{{185, 45, 15, 22}}},
{Region: "Saudi Arabia", IPs: []net.IP{{45, 131, 6, 208}}},
{Region: "Serbia", IPs: []net.IP{{37, 120, 193, 248}}},
{Region: "Singapore", IPs: []net.IP{{156, 146, 57, 123}}},
{Region: "South Africa", IPs: []net.IP{{154, 16, 93, 35}}},
{Region: "Spain", IPs: []net.IP{{195, 181, 167, 42}}},
{Region: "Sri Lanka", IPs: []net.IP{{45, 132, 136, 232}}},
{Region: "Sweden", IPs: []net.IP{{46, 246, 3, 150}}},
{Region: "Switzerland", IPs: []net.IP{{212, 102, 37, 77}}},
{Region: "Taiwan", IPs: []net.IP{{188, 214, 106, 70}}},
{Region: "Turkey", IPs: []net.IP{{188, 213, 34, 87}}},
{Region: "UK London", IPs: []net.IP{{37, 235, 96, 26}}},
{Region: "UK Manchester", IPs: []net.IP{{193, 239, 84, 60}}},
{Region: "US Atlanta", IPs: []net.IP{{195, 181, 171, 76}}},
{Region: "US California", IPs: []net.IP{{37, 235, 108, 19}}},
{Region: "US Chicago", IPs: []net.IP{{154, 21, 28, 111}}},
{Region: "US Denver", IPs: []net.IP{{70, 39, 126, 143}}},
{Region: "US Florida", IPs: []net.IP{{37, 235, 98, 18}}},
{Region: "US Houston", IPs: []net.IP{{74, 81, 92, 147}}},
{Region: "US New Jersey", IPs: []net.IP{{37, 235, 103, 75}}},
{Region: "US New York", IPs: []net.IP{{156, 146, 55, 213}}},
{Region: "US Seattle", IPs: []net.IP{{156, 146, 48, 14}}},
{Region: "US Silicon Valley", IPs: []net.IP{{154, 21, 212, 228}}},
{Region: "US Texas", IPs: []net.IP{{154, 29, 131, 17}}},
{Region: "US Washington DC", IPs: []net.IP{{70, 32, 5, 172}}},
{Region: "US West", IPs: []net.IP{{193, 37, 254, 239}}},
{Region: "Ukraine", IPs: []net.IP{{62, 149, 20, 51}}},
{Region: "United Arab Emirates", IPs: []net.IP{{45, 131, 5, 233}}},
{Region: "Venezuela", IPs: []net.IP{{45, 133, 89, 212}}},
{Region: "Vietnam", IPs: []net.IP{{188, 214, 152, 67}}},
{Region: "AU Melbourne", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{103, 2, 198, 107}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{103, 2, 198, 107}}}},
{Region: "AU Perth", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{43, 250, 205, 190}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{43, 250, 205, 185}}}},
{Region: "AU Sydney", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{27, 50, 76, 131}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{27, 50, 76, 141}}}},
{Region: "Albania", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{31, 171, 154, 138}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{31, 171, 154, 135}}}},
{Region: "Algeria", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 91, 239}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 91, 244}}}},
{Region: "Andorra", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 49, 250}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 49, 242}}}},
{Region: "Argentina", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{190, 106, 134, 83}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{190, 106, 134, 84}}}},
{Region: "Armenia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 50, 211}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 50, 225}}}},
{Region: "Austria", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 60, 30}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 60, 64}}}},
{Region: "Bahamas", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 143, 240}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 143, 232}}}},
{Region: "Belgium", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 211, 246}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 211, 252}}}},
{Region: "Bosnia and Herzegovina", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 212, 111, 84}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 212, 111, 77}}}},
{Region: "Brazil", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 180, 232}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 180, 235}}}},
{Region: "Bulgaria", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 221, 94}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 221, 93}}}},
{Region: "CA Montreal", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 98, 71, 150}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 98, 71, 164}}}},
{Region: "CA Ontario", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 83, 47, 151}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 83, 47, 149}}}},
{Region: "CA Toronto", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{104, 245, 146, 101}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{104, 245, 146, 101}}}},
{Region: "CA Vancouver", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 98, 89, 31}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{172, 98, 89, 29}}}},
{Region: "Cambodia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 215, 235, 110}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 215, 235, 110}}}},
{Region: "China", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 107, 104, 215}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 107, 104, 215}}}},
{Region: "Cyprus", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 137, 232}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 137, 243}}}},
{Region: "Czech Republic", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 39, 223}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 39, 240}}}},
{Region: "DE Berlin", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{89, 36, 76, 146}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{89, 36, 76, 148}}}},
{Region: "DE Frankfurt", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 57, 220}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 57, 224}}}},
{Region: "Denmark", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 126, 94, 117}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 126, 94, 109}}}},
{Region: "Egypt", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 122, 102}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 122, 105}}}},
{Region: "Estonia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{95, 153, 31, 71}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{95, 153, 31, 77}}}},
{Region: "Finland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 126, 89, 10}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 126, 89, 6}}}},
{Region: "France", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{84, 17, 60, 211}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{84, 17, 60, 211}}}},
{Region: "Georgia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 138, 211}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 138, 216}}}},
{Region: "Greece", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 57, 3, 83}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 57, 3, 85}}}},
{Region: "Greenland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 209, 210}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 209, 213}}}},
{Region: "Hong Kong", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 107, 104, 234}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 107, 104, 234}}}},
{Region: "Hungary", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 106, 74, 120}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{86, 106, 74, 120}}}},
{Region: "Iceland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 193, 93}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 193, 86}}}},
{Region: "India", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 120, 139, 137}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 120, 139, 129}}}},
{Region: "Iran", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 4, 207}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 4, 214}}}},
{Region: "Ireland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{193, 56, 252, 4}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{193, 56, 252, 4}}}},
{Region: "Isle of Man", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 140, 226}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 140, 217}}}},
{Region: "Israel", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 77, 248, 14}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 77, 248, 14}}}},
{Region: "Italy", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 41, 17}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 41, 59}}}},
{Region: "Japan", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 34, 247}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 34, 249}}}},
{Region: "Kazakhstan", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 88, 227}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 88, 207}}}},
{Region: "Latvia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{109, 248, 149, 10}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{109, 248, 149, 5}}}},
{Region: "Liechtenstein", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 48, 225}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 139, 48, 218}}}},
{Region: "Lithuania", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{85, 206, 165, 173}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{85, 206, 165, 165}}}},
{Region: "Luxembourg", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{92, 223, 89, 74}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{92, 223, 89, 97}}}},
{Region: "Macedonia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 225, 28, 120}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{185, 225, 28, 124}}}},
{Region: "Malta", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 137, 198, 232}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 137, 198, 249}}}},
{Region: "Mexico", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{77, 81, 142, 20}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{77, 81, 142, 17}}}},
{Region: "Moldova", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{178, 175, 129, 39}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{178, 175, 129, 44}}}},
{Region: "Monaco", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 137, 199, 206}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 137, 199, 206}}}},
{Region: "Montenegro", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 208, 222}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 208, 222}}}},
{Region: "Morocco", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 211, 209}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 211, 206}}}},
{Region: "Netherlands", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 35, 67}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 34, 133}}}},
{Region: "New Zealand", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{43, 250, 207, 89}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{43, 250, 207, 83}}}},
{Region: "Norway", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{46, 246, 122, 110}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{46, 246, 122, 114}}}},
{Region: "Panama", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 210, 207}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 210, 206}}}},
{Region: "Philippines", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 125, 148}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 125, 149}}}},
{Region: "Poland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{194, 110, 114, 2}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{194, 110, 114, 2}}}},
{Region: "Portugal", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{89, 26, 241, 72}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{89, 26, 241, 72}}}},
{Region: "Qatar", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 7, 215}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 7, 211}}}},
{Region: "Romania", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{193, 239, 85, 146}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{193, 239, 85, 155}}}},
{Region: "Saudi Arabia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 6, 246}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 131, 6, 241}}}},
{Region: "Serbia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 120, 193, 246}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 120, 193, 244}}}},
{Region: "Singapore", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 57, 118}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 57, 141}}}},
{Region: "Slovakia", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 120, 221, 89}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 120, 221, 84}}}},
{Region: "South Africa", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 16, 93, 201}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 16, 93, 198}}}},
{Region: "Spain", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 49, 108}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{195, 181, 167, 36}}}},
{Region: "Sri Lanka", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 136, 229}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 132, 136, 207}}}},
{Region: "Sweden", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{195, 246, 120, 8}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{195, 246, 120, 10}}}},
{Region: "Switzerland", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 37, 185}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 37, 226}}}},
{Region: "Taiwan", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 106, 76}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 106, 74}}}},
{Region: "Turkey", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 213, 34, 77}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 213, 34, 67}}}},
{Region: "UK London", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 63, 163}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{212, 102, 63, 142}}}},
{Region: "UK Manchester", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{193, 239, 84, 59}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{194, 37, 96, 195}}}},
{Region: "UK Southampton", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{143, 244, 37, 67}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{143, 244, 37, 88}}}},
{Region: "US Atlanta", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 21, 81}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 21, 81}}}},
{Region: "US California", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 235, 108, 25}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 235, 108, 24}}}},
{Region: "US Chicago", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 23, 138}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 23, 129}}}},
{Region: "US Denver", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{70, 39, 111, 247}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{70, 39, 111, 195}}}},
{Region: "US East", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 235, 103, 159}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{37, 235, 103, 159}}}},
{Region: "US Florida", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 42, 172}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 42, 172}}}},
{Region: "US Houston", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{205, 251, 139, 172}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{205, 251, 139, 172}}}},
{Region: "US Las Vegas", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{79, 110, 53, 7}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{79, 110, 53, 7}}}},
{Region: "US New York", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 54, 242}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{156, 146, 54, 233}}}},
{Region: "US Seattle", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 9, 128, 73}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 9, 128, 83}}}},
{Region: "US Silicon Valley", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 212, 241}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 21, 212, 229}}}},
{Region: "US Texas", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 29, 131, 121}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{154, 29, 131, 104}}}},
{Region: "US Washington DC", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{70, 32, 6, 93}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{70, 32, 6, 92}}}},
{Region: "US West", PortForward: false, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{184, 170, 241, 60}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{184, 170, 241, 39}}}},
{Region: "Ukraine", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{62, 149, 20, 55}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{62, 149, 20, 51}}}},
{Region: "United Arab Emirates", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 193, 150}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{217, 138, 193, 155}}}},
{Region: "Venezuela", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 89, 223}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{45, 133, 89, 206}}}},
{Region: "Vietnam", PortForward: true, OpenvpnUDP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 152, 86}}}, OpenvpnTCP: models.PIAServerOpenvpn{CN: "", IPs: []net.IP{{188, 214, 152, 85}}}},
}
}
@@ -122,39 +133,39 @@ func PIAOldGeoChoices() (choices []string) {
return choices
}
func PIAOldServers() []models.PIAServer {
return []models.PIAServer{
{Region: "AU Melbourne", IPs: []net.IP{{27, 50, 82, 131}, {27, 50, 82, 133}, {43, 250, 204, 105}, {43, 250, 204, 107}, {43, 250, 204, 109}, {43, 250, 204, 111}, {43, 250, 204, 113}, {43, 250, 204, 115}, {43, 250, 204, 117}, {43, 250, 204, 119}, {43, 250, 204, 123}, {43, 250, 204, 125}}},
func PIAOldServers() []models.PIAOldServer {
return []models.PIAOldServer{
{Region: "AU Melbourne", IPs: []net.IP{{27, 50, 82, 131}, {43, 250, 204, 105}, {43, 250, 204, 107}, {43, 250, 204, 109}, {43, 250, 204, 111}, {43, 250, 204, 113}, {43, 250, 204, 115}, {43, 250, 204, 117}, {43, 250, 204, 119}, {43, 250, 204, 123}, {43, 250, 204, 125}}},
{Region: "AU Perth", IPs: []net.IP{{43, 250, 205, 59}, {43, 250, 205, 91}, {43, 250, 205, 93}, {43, 250, 205, 95}}},
{Region: "AU Sydney", IPs: []net.IP{{27, 50, 68, 23}, {27, 50, 70, 87}, {27, 50, 77, 251}, {27, 50, 81, 117}, {103, 13, 102, 123}, {103, 13, 102, 127}, {118, 127, 60, 43}, {118, 127, 60, 51}, {221, 121, 145, 137}, {221, 121, 145, 145}, {221, 121, 145, 147}, {221, 121, 145, 159}, {221, 121, 146, 203}, {221, 121, 148, 221}, {221, 121, 152, 215}}},
{Region: "AU Sydney", IPs: []net.IP{{27, 50, 68, 23}, {27, 50, 70, 87}, {27, 50, 77, 251}, {27, 50, 81, 117}, {103, 13, 102, 123}, {103, 13, 102, 127}, {118, 127, 60, 51}, {221, 121, 145, 135}, {221, 121, 145, 137}, {221, 121, 145, 145}, {221, 121, 145, 147}, {221, 121, 145, 159}, {221, 121, 146, 203}, {221, 121, 148, 221}, {221, 121, 152, 215}}},
{Region: "Albania", IPs: []net.IP{{31, 171, 154, 114}}},
{Region: "Argentina", IPs: []net.IP{{190, 106, 134, 100}}},
{Region: "Austria", IPs: []net.IP{{89, 187, 168, 6}, {156, 146, 60, 129}}},
{Region: "Belgium", IPs: []net.IP{{77, 243, 191, 18}, {77, 243, 191, 19}, {77, 243, 191, 20}, {77, 243, 191, 21}, {77, 243, 191, 22}, {77, 243, 191, 23}, {185, 104, 186, 26}, {185, 232, 21, 26}, {185, 232, 21, 27}, {185, 232, 21, 28}, {185, 232, 21, 29}}},
{Region: "Belgium", IPs: []net.IP{{77, 243, 191, 18}, {77, 243, 191, 19}, {77, 243, 191, 20}, {185, 232, 21, 26}}},
{Region: "Bosnia and Herzegovina", IPs: []net.IP{{185, 164, 35, 54}}},
{Region: "Bulgaria", IPs: []net.IP{{217, 138, 221, 66}}},
{Region: "CA Montreal", IPs: []net.IP{{172, 98, 71, 194}, {199, 36, 223, 130}, {199, 36, 223, 194}}},
{Region: "CA Ontario", IPs: []net.IP{{162, 219, 176, 42}, {162, 219, 176, 130}, {162, 219, 176, 194}, {184, 75, 208, 2}, {184, 75, 208, 18}, {184, 75, 208, 34}, {184, 75, 208, 66}, {184, 75, 208, 90}, {184, 75, 208, 114}, {184, 75, 208, 122}, {184, 75, 208, 130}, {184, 75, 208, 146}, {184, 75, 208, 170}, {184, 75, 210, 18}, {184, 75, 210, 194}, {184, 75, 214, 18}, {184, 75, 215, 18}, {184, 75, 215, 26}, {184, 75, 215, 66}, {184, 75, 215, 74}}},
{Region: "CA Toronto", IPs: []net.IP{{66, 115, 142, 130}, {172, 98, 92, 66}, {172, 98, 92, 130}}},
{Region: "CA Ontario", IPs: []net.IP{{162, 219, 176, 26}, {162, 219, 176, 42}, {184, 75, 208, 2}, {184, 75, 208, 90}, {184, 75, 208, 114}, {184, 75, 208, 122}, {184, 75, 208, 130}, {184, 75, 208, 146}, {184, 75, 208, 170}, {184, 75, 208, 202}, {184, 75, 210, 18}, {184, 75, 210, 98}, {184, 75, 210, 106}, {184, 75, 213, 186}, {184, 75, 213, 218}, {184, 75, 214, 18}, {184, 75, 215, 18}, {184, 75, 215, 26}, {184, 75, 215, 66}, {184, 75, 215, 74}}},
{Region: "CA Toronto", IPs: []net.IP{{66, 115, 142, 130}, {66, 115, 145, 199}, {172, 98, 92, 66}, {172, 98, 92, 130}, {172, 98, 92, 194}}},
{Region: "CA Vancouver", IPs: []net.IP{{162, 216, 47, 66}, {162, 216, 47, 194}, {172, 98, 89, 130}, {172, 98, 89, 194}}},
{Region: "Czech Republic", IPs: []net.IP{{185, 216, 35, 66}, {212, 102, 39, 1}}},
{Region: "DE Berlin", IPs: []net.IP{{185, 230, 127, 230}, {185, 230, 127, 231}, {185, 230, 127, 235}, {185, 230, 127, 236}, {185, 230, 127, 237}, {185, 230, 127, 238}, {185, 230, 127, 239}, {185, 230, 127, 241}, {193, 176, 86, 122}, {193, 176, 86, 124}, {193, 176, 86, 130}, {193, 176, 86, 134}, {193, 176, 86, 142}, {193, 176, 86, 150}, {193, 176, 86, 154}, {193, 176, 86, 166}, {193, 176, 86, 170}, {193, 176, 86, 174}, {193, 176, 86, 178}, {194, 36, 108, 6}}},
{Region: "DE Frankfurt", IPs: []net.IP{{195, 181, 170, 225}, {195, 181, 170, 239}, {195, 181, 170, 240}, {195, 181, 170, 241}, {195, 181, 170, 242}, {212, 102, 57, 138}}},
{Region: "Czech Republic", IPs: []net.IP{{212, 102, 39, 1}}},
{Region: "DE Berlin", IPs: []net.IP{{185, 230, 127, 238}, {193, 176, 86, 122}, {193, 176, 86, 123}, {193, 176, 86, 134}, {193, 176, 86, 178}, {194, 36, 108, 6}}},
{Region: "DE Frankfurt", IPs: []net.IP{{195, 181, 170, 239}, {195, 181, 170, 240}, {195, 181, 170, 241}, {195, 181, 170, 242}, {195, 181, 170, 243}, {195, 181, 170, 244}, {212, 102, 57, 138}}},
{Region: "Denmark", IPs: []net.IP{{188, 126, 94, 34}}},
{Region: "Estonia", IPs: []net.IP{{77, 247, 111, 98}}},
{Region: "Finland", IPs: []net.IP{{188, 126, 89, 194}}},
{Region: "Estonia", IPs: []net.IP{{77, 247, 111, 82}, {77, 247, 111, 98}, {77, 247, 111, 114}, {77, 247, 111, 130}}},
{Region: "Finland", IPs: []net.IP{{188, 126, 89, 4}, {188, 126, 89, 194}}},
{Region: "France", IPs: []net.IP{{156, 146, 63, 1}, {156, 146, 63, 65}}},
{Region: "Greece", IPs: []net.IP{{154, 57, 3, 91}, {154, 57, 3, 106}, {154, 57, 3, 145}}},
{Region: "Hungary", IPs: []net.IP{{185, 128, 26, 24}}},
{Region: "Iceland", IPs: []net.IP{{45, 133, 193, 50}, {45, 133, 193, 66}}},
{Region: "India", IPs: []net.IP{{150, 242, 12, 155}, {150, 242, 12, 171}, {150, 242, 12, 187}}},
{Region: "Ireland", IPs: []net.IP{{193, 56, 252, 210}, {193, 56, 252, 226}, {193, 56, 252, 242}}},
{Region: "Israel", IPs: []net.IP{{31, 168, 172, 145}}},
{Region: "Hungary", IPs: []net.IP{{185, 128, 26, 18}, {185, 128, 26, 19}, {185, 128, 26, 20}, {185, 128, 26, 21}, {185, 128, 26, 22}, {185, 128, 26, 23}, {185, 128, 26, 24}, {185, 189, 114, 98}}},
{Region: "Iceland", IPs: []net.IP{{45, 133, 193, 50}}},
{Region: "India", IPs: []net.IP{{45, 120, 139, 108}, {45, 120, 139, 109}, {150, 242, 12, 155}, {150, 242, 12, 171}, {150, 242, 12, 187}}},
{Region: "Ireland", IPs: []net.IP{{193, 56, 252, 210}, {193, 56, 252, 226}, {193, 56, 252, 242}, {193, 56, 252, 250}, {193, 56, 252, 251}, {193, 56, 252, 252}}},
{Region: "Israel", IPs: []net.IP{{31, 168, 172, 142}, {31, 168, 172, 143}, {31, 168, 172, 145}, {31, 168, 172, 146}}},
{Region: "Italy", IPs: []net.IP{{156, 146, 41, 129}, {156, 146, 41, 193}}},
{Region: "Japan", IPs: []net.IP{{156, 146, 34, 1}, {156, 146, 34, 65}}},
{Region: "Latvia", IPs: []net.IP{{46, 183, 217, 34}, {46, 183, 218, 130}, {46, 183, 218, 146}}},
{Region: "Lithuania", IPs: []net.IP{{85, 206, 165, 96}, {85, 206, 165, 112}, {85, 206, 165, 128}}},
{Region: "Luxembourg", IPs: []net.IP{{92, 223, 89, 134}, {92, 223, 89, 135}, {92, 223, 89, 136}, {92, 223, 89, 137}, {92, 223, 89, 138}, {92, 223, 89, 140}}},
{Region: "Luxembourg", IPs: []net.IP{{92, 223, 89, 133}, {92, 223, 89, 134}, {92, 223, 89, 135}, {92, 223, 89, 136}, {92, 223, 89, 137}, {92, 223, 89, 138}, {92, 223, 89, 140}, {92, 223, 89, 142}}},
{Region: "Moldova", IPs: []net.IP{{178, 17, 172, 242}, {178, 17, 173, 194}, {178, 175, 128, 34}}},
{Region: "Netherlands", IPs: []net.IP{{89, 187, 174, 198}, {212, 102, 35, 101}, {212, 102, 35, 102}, {212, 102, 35, 103}, {212, 102, 35, 104}}},
{Region: "New Zealand", IPs: []net.IP{{43, 250, 207, 1}, {43, 250, 207, 3}}},
@@ -162,33 +173,33 @@ func PIAOldServers() []models.PIAServer {
{Region: "Norway", IPs: []net.IP{{46, 246, 122, 34}, {46, 246, 122, 162}}},
{Region: "Poland", IPs: []net.IP{{185, 244, 214, 195}, {185, 244, 214, 196}, {185, 244, 214, 197}, {185, 244, 214, 198}, {185, 244, 214, 199}, {185, 244, 214, 200}}},
{Region: "Portugal", IPs: []net.IP{{89, 26, 241, 86}, {89, 26, 241, 102}, {89, 26, 241, 130}}},
{Region: "Romania", IPs: []net.IP{{86, 105, 25, 69}, {86, 105, 25, 70}, {86, 105, 25, 74}, {86, 105, 25, 75}, {86, 105, 25, 77}, {86, 105, 25, 78}, {89, 33, 8, 38}, {89, 33, 8, 42}, {93, 115, 7, 70}, {94, 176, 148, 34}, {143, 244, 54, 1}, {185, 45, 12, 126}, {185, 210, 218, 98}, {185, 210, 218, 99}, {185, 210, 218, 100}, {185, 210, 218, 101}, {185, 210, 218, 104}, {185, 210, 218, 105}, {185, 210, 218, 108}, {188, 240, 220, 26}}},
{Region: "Romania", IPs: []net.IP{{86, 105, 25, 69}, {86, 105, 25, 70}, {86, 105, 25, 74}, {86, 105, 25, 75}, {86, 105, 25, 76}, {86, 105, 25, 77}, {86, 105, 25, 78}, {89, 33, 8, 38}, {89, 33, 8, 42}, {93, 115, 7, 70}, {94, 176, 148, 35}, {143, 244, 54, 1}, {185, 45, 12, 126}, {185, 210, 218, 98}, {185, 210, 218, 99}, {185, 210, 218, 100}, {185, 210, 218, 101}, {185, 210, 218, 102}, {185, 210, 218, 105}, {188, 240, 220, 26}}},
{Region: "Serbia", IPs: []net.IP{{37, 120, 193, 226}}},
{Region: "Singapore", IPs: []net.IP{{156, 146, 56, 193}, {156, 146, 57, 38}, {156, 146, 57, 235}, {156, 146, 57, 244}}},
{Region: "Slovakia", IPs: []net.IP{{37, 120, 221, 98}}},
{Region: "Slovakia", IPs: []net.IP{{37, 120, 221, 82}, {37, 120, 221, 98}}},
{Region: "South Africa", IPs: []net.IP{{102, 165, 20, 133}}},
{Region: "Spain", IPs: []net.IP{{212, 102, 49, 185}, {212, 102, 49, 251}}},
{Region: "Sweden", IPs: []net.IP{{46, 246, 3, 253}, {46, 246, 3, 254}}},
{Region: "Sweden", IPs: []net.IP{{46, 246, 3, 254}}},
{Region: "Switzerland", IPs: []net.IP{{156, 146, 62, 193}, {212, 102, 36, 1}, {212, 102, 36, 166}, {212, 102, 37, 240}, {212, 102, 37, 241}, {212, 102, 37, 242}, {212, 102, 37, 243}}},
{Region: "Turkey", IPs: []net.IP{{185, 195, 79, 34}, {185, 195, 79, 82}}},
{Region: "UAE", IPs: []net.IP{{45, 9, 250, 46}}},
{Region: "UK London", IPs: []net.IP{{37, 235, 96, 198}, {37, 235, 97, 11}, {212, 102, 52, 1}, {212, 102, 52, 134}, {212, 102, 52, 199}, {212, 102, 53, 93}, {212, 102, 53, 129}}},
{Region: "UK London", IPs: []net.IP{{212, 102, 52, 1}}},
{Region: "UK Manchester", IPs: []net.IP{{89, 238, 137, 36}, {89, 238, 137, 37}, {89, 238, 137, 38}, {89, 238, 137, 39}, {89, 238, 139, 52}, {89, 238, 139, 53}, {89, 238, 139, 54}, {89, 238, 139, 55}, {89, 238, 139, 56}, {89, 238, 139, 57}, {89, 238, 139, 58}, {89, 249, 67, 220}}},
{Region: "UK Southampton", IPs: []net.IP{{143, 244, 36, 58}, {143, 244, 37, 1}, {143, 244, 38, 1}, {143, 244, 38, 60}, {143, 244, 38, 119}}},
{Region: "US Atlanta", IPs: []net.IP{{66, 115, 169, 195}, {66, 115, 169, 196}, {66, 115, 169, 197}, {66, 115, 169, 201}, {66, 115, 169, 202}, {66, 115, 169, 204}, {66, 115, 169, 205}, {66, 115, 169, 206}, {66, 115, 169, 209}, {66, 115, 169, 211}, {66, 115, 169, 212}, {66, 115, 169, 213}, {66, 115, 169, 214}, {156, 146, 46, 1}, {156, 146, 46, 134}, {156, 146, 46, 198}, {156, 146, 47, 11}}},
{Region: "US California", IPs: []net.IP{{37, 235, 108, 144}, {89, 187, 187, 129}, {91, 207, 175, 194}, {91, 207, 175, 195}, {91, 207, 175, 196}, {91, 207, 175, 197}, {91, 207, 175, 198}, {91, 207, 175, 200}, {91, 207, 175, 201}, {91, 207, 175, 202}, {91, 207, 175, 203}, {91, 207, 175, 204}, {91, 207, 175, 206}, {91, 207, 175, 207}, {91, 207, 175, 209}, {91, 207, 175, 211}, {91, 207, 175, 212}}},
{Region: "US Atlanta", IPs: []net.IP{{156, 146, 46, 1}, {156, 146, 46, 134}, {156, 146, 46, 198}, {156, 146, 47, 11}}},
{Region: "US California", IPs: []net.IP{{37, 235, 108, 208}, {89, 187, 187, 129}, {89, 187, 187, 162}, {91, 207, 175, 194}, {91, 207, 175, 195}, {91, 207, 175, 197}, {91, 207, 175, 198}, {91, 207, 175, 199}, {91, 207, 175, 200}, {91, 207, 175, 205}, {91, 207, 175, 206}, {91, 207, 175, 207}, {91, 207, 175, 209}, {91, 207, 175, 210}, {91, 207, 175, 212}}},
{Region: "US Chicago", IPs: []net.IP{{156, 146, 50, 1}, {156, 146, 50, 65}, {156, 146, 50, 134}, {156, 146, 50, 198}, {156, 146, 51, 11}, {212, 102, 58, 113}, {212, 102, 59, 54}, {212, 102, 59, 129}}},
{Region: "US Dallas", IPs: []net.IP{{156, 146, 38, 65}, {156, 146, 38, 161}, {156, 146, 39, 1}, {156, 146, 39, 6}, {156, 146, 52, 6}, {156, 146, 52, 70}, {156, 146, 52, 139}, {156, 146, 52, 203}, {174, 127, 114, 53}, {174, 127, 114, 60}, {174, 127, 114, 68}, {174, 127, 114, 72}, {174, 127, 114, 75}, {174, 127, 114, 77}}},
{Region: "US Denver", IPs: []net.IP{{174, 128, 225, 2}, {174, 128, 225, 98}, {174, 128, 226, 18}, {174, 128, 227, 226}, {174, 128, 236, 98}, {174, 128, 236, 106}, {174, 128, 242, 234}, {174, 128, 242, 250}, {174, 128, 243, 106}, {174, 128, 244, 66}, {174, 128, 245, 98}, {174, 128, 246, 10}, {174, 128, 250, 26}, {199, 115, 97, 202}, {199, 115, 98, 146}, {199, 115, 98, 226}, {199, 115, 98, 234}, {199, 115, 101, 178}, {199, 115, 102, 146}, {199, 115, 103, 10}}},
{Region: "US East", IPs: []net.IP{{156, 146, 58, 202}, {156, 146, 58, 203}, {156, 146, 58, 204}, {156, 146, 58, 205}, {156, 146, 58, 206}, {156, 146, 58, 207}, {156, 146, 58, 208}, {156, 146, 58, 209}, {194, 59, 251, 5}, {194, 59, 251, 8}, {194, 59, 251, 25}, {194, 59, 251, 30}, {194, 59, 251, 38}, {194, 59, 251, 48}, {194, 59, 251, 49}, {194, 59, 251, 53}, {194, 59, 251, 66}, {194, 59, 251, 78}, {194, 59, 251, 79}, {194, 59, 251, 84}}},
{Region: "US Florida", IPs: []net.IP{{156, 146, 42, 65}, {156, 146, 42, 134}, {156, 146, 42, 198}, {156, 146, 43, 11}, {156, 146, 43, 75}, {193, 37, 252, 14}, {193, 37, 252, 15}, {193, 37, 252, 16}, {193, 37, 252, 17}, {193, 37, 252, 18}, {193, 37, 252, 19}, {193, 37, 252, 20}, {193, 37, 252, 21}, {193, 37, 252, 22}, {193, 37, 252, 23}, {193, 37, 252, 25}, {193, 37, 252, 26}, {193, 37, 252, 27}, {212, 102, 61, 19}, {212, 102, 61, 83}}},
{Region: "US Houston", IPs: []net.IP{{74, 81, 88, 26}, {74, 81, 88, 42}, {74, 81, 88, 66}, {74, 81, 88, 74}, {205, 251, 148, 90}, {205, 251, 148, 138}, {205, 251, 148, 154}, {205, 251, 148, 178}, {205, 251, 150, 146}, {205, 251, 150, 170}}},
{Region: "US Las Vegas", IPs: []net.IP{{79, 110, 53, 34}, {79, 110, 53, 50}, {79, 110, 53, 66}, {79, 110, 53, 82}, {79, 110, 53, 98}, {79, 110, 53, 114}, {79, 110, 53, 130}, {79, 110, 53, 146}, {79, 110, 53, 162}, {79, 110, 53, 178}, {79, 110, 53, 194}, {79, 110, 53, 210}}},
{Region: "US New York City", IPs: []net.IP{{156, 146, 36, 225}, {156, 146, 55, 198}}},
{Region: "US Seattle", IPs: []net.IP{{84, 17, 41, 96}, {156, 146, 48, 65}, {156, 146, 48, 135}, {156, 146, 48, 200}, {156, 146, 49, 13}, {212, 102, 46, 129}, {212, 102, 46, 193}, {212, 102, 47, 134}}},
{Region: "US Silicon Valley", IPs: []net.IP{{199, 116, 118, 133}, {199, 116, 118, 148}, {199, 116, 118, 167}, {199, 116, 118, 172}, {199, 116, 118, 173}, {199, 116, 118, 174}, {199, 116, 118, 185}, {199, 116, 118, 198}, {199, 116, 118, 202}, {199, 116, 118, 210}, {199, 116, 118, 212}, {199, 116, 118, 215}, {199, 116, 118, 217}, {199, 116, 118, 219}, {199, 116, 118, 220}, {199, 116, 118, 223}, {199, 116, 118, 237}, {199, 116, 118, 239}, {199, 116, 118, 240}, {199, 116, 118, 249}}},
{Region: "US Washington DC", IPs: []net.IP{{70, 32, 0, 52}, {70, 32, 0, 53}, {70, 32, 0, 59}, {70, 32, 0, 60}, {70, 32, 0, 61}, {70, 32, 0, 64}, {70, 32, 0, 67}, {70, 32, 0, 68}, {70, 32, 0, 69}, {70, 32, 0, 70}, {70, 32, 0, 103}, {70, 32, 0, 106}, {70, 32, 0, 107}, {70, 32, 0, 114}, {70, 32, 0, 116}, {70, 32, 0, 120}, {70, 32, 0, 122}, {70, 32, 0, 168}, {70, 32, 0, 172}, {70, 32, 0, 173}}},
{Region: "US West", IPs: []net.IP{{104, 200, 151, 7}, {104, 200, 151, 8}, {104, 200, 151, 9}, {104, 200, 151, 11}, {104, 200, 151, 13}, {104, 200, 151, 16}, {104, 200, 151, 17}, {104, 200, 151, 20}, {104, 200, 151, 21}, {104, 200, 151, 46}, {104, 200, 151, 47}, {104, 200, 151, 50}, {104, 200, 151, 53}, {104, 200, 151, 56}, {104, 200, 151, 59}, {104, 200, 151, 61}, {104, 200, 151, 72}, {104, 200, 151, 74}, {104, 200, 151, 78}, {104, 200, 151, 81}}},
{Region: "US Dallas", IPs: []net.IP{{156, 146, 38, 65}, {156, 146, 38, 161}, {156, 146, 39, 1}, {156, 146, 39, 6}, {156, 146, 52, 6}, {156, 146, 52, 70}, {156, 146, 52, 139}, {156, 146, 52, 203}}},
{Region: "US Denver", IPs: []net.IP{{70, 39, 77, 130}, {70, 39, 92, 2}, {70, 39, 113, 194}, {174, 128, 225, 2}, {174, 128, 226, 10}, {174, 128, 226, 18}, {174, 128, 227, 2}, {174, 128, 227, 226}, {174, 128, 236, 98}, {174, 128, 242, 234}, {174, 128, 242, 250}, {174, 128, 243, 98}, {174, 128, 244, 74}, {174, 128, 245, 122}, {174, 128, 246, 10}, {199, 115, 98, 146}, {199, 115, 98, 234}, {199, 115, 101, 178}, {199, 115, 101, 186}, {199, 115, 102, 146}}},
{Region: "US East", IPs: []net.IP{{156, 146, 58, 202}, {156, 146, 58, 203}, {156, 146, 58, 204}, {156, 146, 58, 205}, {156, 146, 58, 207}, {156, 146, 58, 208}, {156, 146, 58, 209}, {193, 37, 253, 115}, {193, 37, 253, 134}, {194, 59, 251, 8}, {194, 59, 251, 11}, {194, 59, 251, 22}, {194, 59, 251, 28}, {194, 59, 251, 56}, {194, 59, 251, 62}, {194, 59, 251, 69}, {194, 59, 251, 82}, {194, 59, 251, 84}, {194, 59, 251, 91}, {194, 59, 251, 112}}},
{Region: "US Florida", IPs: []net.IP{{193, 37, 252, 6}, {193, 37, 252, 7}, {193, 37, 252, 8}, {193, 37, 252, 9}, {193, 37, 252, 10}, {193, 37, 252, 11}, {193, 37, 252, 12}, {193, 37, 252, 14}, {193, 37, 252, 15}, {193, 37, 252, 16}, {193, 37, 252, 17}, {193, 37, 252, 18}, {193, 37, 252, 19}, {193, 37, 252, 20}, {193, 37, 252, 21}, {193, 37, 252, 23}, {193, 37, 252, 24}, {193, 37, 252, 25}, {193, 37, 252, 26}, {193, 37, 252, 27}}},
{Region: "US Houston", IPs: []net.IP{{74, 81, 88, 26}, {74, 81, 88, 42}, {74, 81, 88, 66}, {74, 81, 88, 74}, {205, 251, 148, 66}, {205, 251, 148, 90}, {205, 251, 148, 98}, {205, 251, 148, 122}, {205, 251, 148, 130}, {205, 251, 148, 138}, {205, 251, 148, 186}, {205, 251, 150, 146}, {205, 251, 150, 170}}},
{Region: "US Las Vegas", IPs: []net.IP{{79, 110, 53, 50}, {79, 110, 53, 66}, {79, 110, 53, 98}, {79, 110, 53, 114}, {79, 110, 53, 130}, {79, 110, 53, 146}, {79, 110, 53, 162}, {79, 110, 53, 178}, {79, 110, 53, 194}, {79, 110, 53, 210}, {162, 251, 236, 7}, {199, 127, 56, 83}, {199, 127, 56, 84}, {199, 127, 56, 87}, {199, 127, 56, 89}, {199, 127, 56, 90}}},
{Region: "US New York City", IPs: []net.IP{{156, 146, 36, 225}, {156, 146, 37, 129}, {156, 146, 58, 1}, {156, 146, 58, 134}}},
{Region: "US Seattle", IPs: []net.IP{{156, 146, 48, 65}, {156, 146, 48, 135}, {156, 146, 48, 200}, {156, 146, 49, 13}, {212, 102, 46, 129}, {212, 102, 46, 193}, {212, 102, 47, 134}}},
{Region: "US Silicon Valley", IPs: []net.IP{{199, 116, 118, 130}, {199, 116, 118, 132}, {199, 116, 118, 134}, {199, 116, 118, 136}, {199, 116, 118, 145}, {199, 116, 118, 148}, {199, 116, 118, 149}, {199, 116, 118, 157}, {199, 116, 118, 166}, {199, 116, 118, 169}, {199, 116, 118, 172}}},
{Region: "US Washington DC", IPs: []net.IP{{70, 32, 0, 46}, {70, 32, 0, 51}, {70, 32, 0, 53}, {70, 32, 0, 62}, {70, 32, 0, 64}, {70, 32, 0, 68}, {70, 32, 0, 69}, {70, 32, 0, 72}, {70, 32, 0, 76}, {70, 32, 0, 77}, {70, 32, 0, 106}, {70, 32, 0, 107}, {70, 32, 0, 114}, {70, 32, 0, 116}, {70, 32, 0, 120}, {70, 32, 0, 167}, {70, 32, 0, 168}, {70, 32, 0, 170}, {70, 32, 0, 172}, {70, 32, 0, 173}}},
{Region: "US West", IPs: []net.IP{{184, 170, 241, 130}, {184, 170, 241, 194}, {184, 170, 242, 135}, {184, 170, 242, 199}}},
{Region: "Ukraine", IPs: []net.IP{{62, 149, 20, 10}, {62, 149, 20, 40}}},
}
}

View File

@@ -21,13 +21,13 @@ func GetAllServers() (allServers models.AllServers) {
Servers: NordvpnServers(),
},
Pia: models.PiaServers{
Version: 1,
Timestamp: 1599323261,
Version: 2,
Timestamp: 1602523433,
Servers: PIAServers(),
},
PiaOld: models.PiaServers{
PiaOld: models.PiaOldServers{
Version: 1,
Timestamp: 1600458645,
Timestamp: 1602523433,
Servers: PIAOldServers(),
},
Purevpn: models.PurevpnServers{

View File

@@ -27,7 +27,7 @@ func Test_versions(t *testing.T) {
assert.Equal(t, "e8eLGRpb1sNX8mDNPOjA6g", digestServerModelVersion(t, models.CyberghostServer{}, allServers.Cyberghost.Version))
assert.Equal(t, "4yL2lFcxXd/l1ByxBQ7d3g", digestServerModelVersion(t, models.MullvadServer{}, allServers.Mullvad.Version))
assert.Equal(t, "fjzfUqJH0KvetGRdZYEtOg", digestServerModelVersion(t, models.NordvpnServer{}, allServers.Nordvpn.Version))
assert.Equal(t, "gYO+bJZCtQvxVk2dTi5d5Q", digestServerModelVersion(t, models.PIAServer{}, allServers.Pia.Version))
assert.Equal(t, "1Ux7clCAJI6fwj0O61Dtpg", digestServerModelVersion(t, models.PIAServer{}, allServers.Pia.Version))
assert.Equal(t, "EZ/SBXQOCS/iJU7A9yc7vg", digestServerModelVersion(t, models.PurevpnServer{}, allServers.Purevpn.Version))
assert.Equal(t, "7yfMpHwzRpEngA/6nYsNag", digestServerModelVersion(t, models.SurfsharkServer{}, allServers.Surfshark.Version))
assert.Equal(t, "7yfMpHwzRpEngA/6nYsNag", digestServerModelVersion(t, models.VyprvpnServer{}, allServers.Vyprvpn.Version))
@@ -50,8 +50,8 @@ func Test_timestamps(t *testing.T) {
assert.Equal(t, "EFMpdq2b9COLevjXmje5zg", digestServersTimestamp(t, allServers.Cyberghost.Servers, allServers.Cyberghost.Timestamp))
assert.Equal(t, "EU4fTzD7jWC9N5kmN5bOEg", digestServersTimestamp(t, allServers.Mullvad.Servers, allServers.Mullvad.Timestamp))
assert.Equal(t, "OLI62FoTf2wis25Nw4FLpg", digestServersTimestamp(t, allServers.Nordvpn.Servers, allServers.Nordvpn.Timestamp))
assert.Equal(t, "hAjEIo6FIrUsJuRmKOKPzA", digestServersTimestamp(t, allServers.Pia.Servers, allServers.Pia.Timestamp))
assert.Equal(t, "CKszzgA7YX5zqxQGiiOL9g", digestServersTimestamp(t, allServers.PiaOld.Servers, allServers.PiaOld.Timestamp))
assert.Equal(t, "AmUPrIBxMHs/bORPplnpxQ", digestServersTimestamp(t, allServers.Pia.Servers, allServers.Pia.Timestamp))
assert.Equal(t, "e8mWsWynkSUGiJLvjALRvQ", digestServersTimestamp(t, allServers.PiaOld.Servers, allServers.PiaOld.Timestamp))
assert.Equal(t, "kwJdVWTiBOspfrRwZIA+Sg", digestServersTimestamp(t, allServers.Purevpn.Servers, allServers.Purevpn.Timestamp))
assert.Equal(t, "q28ju2KJqLhrggJTTjXSiw", digestServersTimestamp(t, allServers.Surfshark.Servers, allServers.Surfshark.Timestamp))
assert.Equal(t, "KdIQWi2tYUM4aMXvWfVBEg", digestServersTimestamp(t, allServers.Vyprvpn.Servers, allServers.Vyprvpn.Timestamp))

View File

@@ -8,11 +8,32 @@ import (
)
type PIAServer struct {
Region string `json:"region"`
PortForward bool `json:"port_forward"`
OpenvpnUDP PIAServerOpenvpn `json:"openvpn_udp"`
OpenvpnTCP PIAServerOpenvpn `json:"openvpn_tcp"`
}
type PIAServerOpenvpn struct {
IPs []net.IP `json:"ips"`
CN string `json:"cn"`
}
func (p *PIAServerOpenvpn) String() string {
return fmt.Sprintf("models.PIAServerOpenvpn{CN: %q, IPs: %s}", p.CN, goStringifyIPs(p.IPs))
}
func (p *PIAServer) String() string {
return fmt.Sprintf("{Region: %q, PortForward: %t, OpenvpnUDP: %s, OpenvpnTCP: %s}",
p.Region, p.PortForward, p.OpenvpnUDP.String(), p.OpenvpnTCP.String())
}
type PIAOldServer struct {
IPs []net.IP `json:"ips"`
Region string `json:"region"`
}
func (p *PIAServer) String() string {
func (p *PIAOldServer) String() string {
return fmt.Sprintf("{Region: %q, IPs: %s}", p.Region, goStringifyIPs(p.IPs))
}

View File

@@ -7,18 +7,18 @@ import (
"github.com/stretchr/testify/assert"
)
func Test_PIAServer_String(t *testing.T) {
func Test_PIAOldServer_String(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
server PIAServer
server PIAOldServer
s string
}{
"no ips": {
server: PIAServer{Region: "a b"},
server: PIAOldServer{Region: "a b"},
s: `{Region: "a b", IPs: []net.IP{}}`,
},
"with ips": {
server: PIAServer{Region: "a b", IPs: []net.IP{{1, 1, 1, 1}, {2, 2, 2, 2}}},
server: PIAOldServer{Region: "a b", IPs: []net.IP{{1, 1, 1, 1}, {2, 2, 2, 2}}},
s: `{Region: "a b", IPs: []net.IP{{1, 1, 1, 1}, {2, 2, 2, 2}}}`,
},
}

View File

@@ -5,7 +5,7 @@ type AllServers struct {
Cyberghost CyberghostServers `json:"cyberghost"`
Mullvad MullvadServers `json:"mullvad"`
Nordvpn NordvpnServers `json:"nordvpn"`
PiaOld PiaServers `json:"piaOld"`
PiaOld PiaOldServers `json:"piaOld"`
Pia PiaServers `json:"pia"`
Purevpn PurevpnServers `json:"purevpn"`
Surfshark SurfsharkServers `json:"surfshark"`
@@ -28,6 +28,11 @@ type NordvpnServers struct {
Timestamp int64 `json:"timestamp"`
Servers []NordvpnServer `json:"servers"`
}
type PiaOldServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PIAOldServer `json:"servers"`
}
type PiaServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`

View File

@@ -8,68 +8,6 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func filterPIAServers(servers []models.PIAServer, region string) (filtered []models.PIAServer) {
if len(region) == 0 {
return servers
}
for _, server := range servers {
if strings.EqualFold(server.Region, region) {
return []models.PIAServer{server}
}
}
return nil
}
func getPIAOpenVPNConnections(allServers []models.PIAServer, selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
servers := filterPIAServers(allServers, selection.Region)
if len(servers) == 0 {
return nil, fmt.Errorf("no server found for region %q", selection.Region)
}
var port uint16
switch selection.Protocol {
case constants.TCP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 502
case constants.PIAEncryptionPresetStrong:
port = 501
}
case constants.UDP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 1198
case constants.PIAEncryptionPresetStrong:
port = 1197
}
}
if port == 0 {
return nil, fmt.Errorf("combination of protocol %q and encryption %q does not yield any port number", selection.Protocol, selection.EncryptionPreset)
}
for _, server := range servers {
for _, IP := range server.IPs {
if selection.TargetIP != nil {
if selection.TargetIP.Equal(IP) {
return []models.OpenVPNConnection{{IP: IP, Port: port, Protocol: selection.Protocol}}, nil
}
} else {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
}
}
if selection.TargetIP != nil {
return nil, fmt.Errorf("target IP %s not found in IP addresses", selection.TargetIP)
}
if len(connections) > 64 {
connections = connections[:64]
}
return connections, nil
}
func buildPIAConf(connections []models.OpenVPNConnection, verbosity int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) {
var X509CRL, certificate string
if extras.EncryptionPreset == constants.PIAEncryptionPresetNormal {

View File

@@ -8,6 +8,7 @@ import (
"io/ioutil"
"net"
"net/http"
"strings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/firewall"
@@ -19,10 +20,10 @@ import (
type piaV3 struct {
random random.Random
servers []models.PIAServer
servers []models.PIAOldServer
}
func newPrivateInternetAccessV3(servers []models.PIAServer) *piaV3 {
func newPrivateInternetAccessV3(servers []models.PIAOldServer) *piaV3 {
return &piaV3{
random: random.NewRandom(),
servers: servers,
@@ -30,7 +31,7 @@ func newPrivateInternetAccessV3(servers []models.PIAServer) *piaV3 {
}
func (p *piaV3) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
return getPIAOpenVPNConnections(p.servers, selection)
return getPIAOldOpenVPNConnections(p.servers, selection)
}
func (p *piaV3) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) {
@@ -92,3 +93,65 @@ func (p *piaV3) PortForward(ctx context.Context, client *http.Client,
pfLogger.Error(err)
}
}
func filterPIAOldServers(servers []models.PIAOldServer, region string) (filtered []models.PIAOldServer) {
if len(region) == 0 {
return servers
}
for _, server := range servers {
if strings.EqualFold(server.Region, region) {
return []models.PIAOldServer{server}
}
}
return nil
}
func getPIAOldOpenVPNConnections(allServers []models.PIAOldServer, selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
servers := filterPIAOldServers(allServers, selection.Region)
if len(servers) == 0 {
return nil, fmt.Errorf("no server found for region %q", selection.Region)
}
var port uint16
switch selection.Protocol {
case constants.TCP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 502
case constants.PIAEncryptionPresetStrong:
port = 501
}
case constants.UDP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 1198
case constants.PIAEncryptionPresetStrong:
port = 1197
}
}
if port == 0 {
return nil, fmt.Errorf("combination of protocol %q and encryption %q does not yield any port number", selection.Protocol, selection.EncryptionPreset)
}
for _, server := range servers {
for _, IP := range server.IPs {
if selection.TargetIP != nil {
if selection.TargetIP.Equal(IP) {
return []models.OpenVPNConnection{{IP: IP, Port: port, Protocol: selection.Protocol}}, nil
}
} else {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
}
}
if selection.TargetIP != nil {
return nil, fmt.Errorf("target IP %s not found in IP addresses", selection.TargetIP)
}
if len(connections) > 64 {
connections = connections[:64]
}
return connections, nil
}

View File

@@ -161,6 +161,71 @@ func (p *piaV4) PortForward(ctx context.Context, client *http.Client,
}
}
func filterPIAServers(servers []models.PIAServer, region string) (filtered []models.PIAServer) {
if len(region) == 0 {
return servers
}
for _, server := range servers {
if strings.EqualFold(server.Region, region) {
return []models.PIAServer{server}
}
}
return nil
}
func getPIAOpenVPNConnections(allServers []models.PIAServer, selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
servers := filterPIAServers(allServers, selection.Region)
if len(servers) == 0 {
return nil, fmt.Errorf("no server found for region %q", selection.Region)
}
var port uint16
switch selection.Protocol {
case constants.TCP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 502
case constants.PIAEncryptionPresetStrong:
port = 501
}
case constants.UDP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 1198
case constants.PIAEncryptionPresetStrong:
port = 1197
}
}
if port == 0 {
return nil, fmt.Errorf("combination of protocol %q and encryption %q does not yield any port number", selection.Protocol, selection.EncryptionPreset)
}
for _, server := range servers {
IPs := server.OpenvpnUDP.IPs
if selection.Protocol == constants.TCP {
IPs = server.OpenvpnTCP.IPs
}
for _, IP := range IPs {
if selection.TargetIP != nil {
if selection.TargetIP.Equal(IP) {
return []models.OpenVPNConnection{{IP: IP, Port: port, Protocol: selection.Protocol}}, nil
}
} else {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
}
}
if selection.TargetIP != nil {
return nil, fmt.Errorf("target IP %s not found in IP addresses", selection.TargetIP)
}
if len(connections) > 64 {
connections = connections[:64]
}
return connections, nil
}
func newPIAv4HTTPClient() (client *http.Client, err error) {
certificateBytes, err := base64.StdEncoding.DecodeString(constants.PIACertificateStrong)
if err != nil {

View File

@@ -36,10 +36,17 @@ func (s *storage) mergeServers(hardcoded, persistent models.AllServers) (merged
}
merged.Pia = hardcoded.Pia
if persistent.Pia.Timestamp > hardcoded.Pia.Timestamp {
versionDiff := hardcoded.Pia.Version - persistent.Pia.Version
if versionDiff > 0 {
s.logger.Info("Private Internet Access servers from file discarded because they are %d versions behind",
versionDiff)
merged.Pia = hardcoded.Pia
} else {
s.logger.Info("Using Private Internet Access servers from file (%s more recent)",
getUnixTimeDifference(persistent.Pia.Timestamp, hardcoded.Pia.Timestamp))
merged.Pia = persistent.Pia
}
}
merged.PiaOld = hardcoded.PiaOld
if persistent.PiaOld.Timestamp > hardcoded.PiaOld.Timestamp {
s.logger.Info("Using Private Internet Access older servers from file (%s more recent)",

View File

@@ -1,7 +1,6 @@
package updater
import (
"net"
"strings"
)
@@ -15,18 +14,6 @@ func extractRemoteLinesFromOpenvpn(content []byte) (remoteLines []string) {
return remoteLines
}
func extractIPsFromRemoteLines(remoteLines []string) (ips []net.IP) {
for _, remoteLine := range remoteLines {
fields := strings.Fields(remoteLine)
ip := net.ParseIP(fields[1])
if ip == nil { // not an IP address
continue
}
ips = append(ips, ip)
}
return ips
}
func extractHostnamesFromRemoteLines(remoteLines []string) (hostnames []string) {
for _, remoteLine := range remoteLines {
fields := strings.Fields(remoteLine)

View File

@@ -11,40 +11,6 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func (u *updater) updatePIA() (err error) {
const zipURL = "https://www.privateinternetaccess.com/openvpn/openvpn-ip-nextgen.zip"
contents, err := fetchAndExtractFiles(zipURL)
if err != nil {
return err
}
servers := make([]models.PIAServer, 0, len(contents))
for fileName, content := range contents {
remoteLines := extractRemoteLinesFromOpenvpn(content)
if len(remoteLines) == 0 {
return fmt.Errorf("cannot find any remote lines in %s", fileName)
}
IPs := extractIPsFromRemoteLines(remoteLines)
if len(IPs) == 0 {
return fmt.Errorf("cannot find any IP addresses in %s", fileName)
}
region := strings.TrimSuffix(fileName, ".ovpn")
server := models.PIAServer{
Region: region,
IPs: uniqueSortedIPs(IPs),
}
servers = append(servers, server)
}
sort.Slice(servers, func(i, j int) bool {
return servers[i].Region < servers[j].Region
})
if u.options.Stdout {
u.println(stringifyPIAServers(servers))
}
u.servers.Pia.Timestamp = u.timeNow().Unix()
u.servers.Pia.Servers = servers
return nil
}
func (u *updater) updatePIAOld(ctx context.Context) (err error) {
const zipURL = "https://www.privateinternetaccess.com/openvpn/openvpn.zip"
contents, err := fetchAndExtractFiles(zipURL)
@@ -54,8 +20,8 @@ func (u *updater) updatePIAOld(ctx context.Context) (err error) {
const maxGoroutines = 10
guard := make(chan struct{}, maxGoroutines)
errors := make(chan error)
serversCh := make(chan models.PIAServer)
servers := make([]models.PIAServer, 0, len(contents))
serversCh := make(chan models.PIAOldServer)
servers := make([]models.PIAOldServer, 0, len(contents))
ctx, cancel := context.WithCancel(ctx)
wg := &sync.WaitGroup{}
defer func() {
@@ -76,7 +42,7 @@ func (u *updater) updatePIAOld(ctx context.Context) (err error) {
}
region := strings.TrimSuffix(fileName, ".ovpn")
wg.Add(1)
go resolvePIAHostname(ctx, wg, region, hosts, u.lookupIP, errors, serversCh, guard)
go resolvePIAv3Hostname(ctx, wg, region, hosts, u.lookupIP, errors, serversCh, guard)
}
for range contents {
select {
@@ -97,9 +63,9 @@ func (u *updater) updatePIAOld(ctx context.Context) (err error) {
return nil
}
func resolvePIAHostname(ctx context.Context, wg *sync.WaitGroup,
func resolvePIAv3Hostname(ctx context.Context, wg *sync.WaitGroup,
region string, hosts []string, lookupIP lookupIPFunc,
errors chan<- error, serversCh chan<- models.PIAServer, guard chan struct{}) {
errors chan<- error, serversCh chan<- models.PIAOldServer, guard chan struct{}) {
guard <- struct{}{}
defer func() {
<-guard
@@ -117,26 +83,15 @@ func resolvePIAHostname(ctx context.Context, wg *sync.WaitGroup,
}
IPs = append(IPs, newIPs...)
}
serversCh <- models.PIAServer{
serversCh <- models.PIAOldServer{
Region: region,
IPs: uniqueSortedIPs(IPs),
}
}
func stringifyPIAServers(servers []models.PIAServer) (s string) {
s = "func PIAServers() []models.PIAServer {\n"
s += " return []models.PIAServer{\n"
for _, server := range servers {
s += " " + server.String() + ",\n"
}
s += " }\n"
s += "}"
return s
}
func stringifyPIAOldServers(servers []models.PIAServer) (s string) {
s = "func PIAOldServers() []models.PIAServer {\n"
s += " return []models.PIAServer{\n"
func stringifyPIAOldServers(servers []models.PIAOldServer) (s string) {
s = "func PIAOldServers() []models.PIAOldServer {\n"
s += " return []models.PIAOldServer{\n"
for _, server := range servers {
s += " " + server.String() + ",\n"
}

100
internal/updater/piav4.go Normal file
View File

@@ -0,0 +1,100 @@
package updater
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net"
"net/http"
"sort"
"strings"
"github.com/qdm12/gluetun/internal/models"
)
func (u *updater) updatePIA() (err error) {
const url = "https://serverlist.piaservers.net/vpninfo/servers/v4"
response, err := u.httpGet(url)
if err != nil {
return err
}
defer response.Body.Close()
b, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
} else if response.StatusCode != http.StatusOK {
return fmt.Errorf("%s: %s", response.Status, strings.ReplaceAll(string(b), "\n", ""))
}
// remove key/signature at the bottom
i := bytes.IndexRune(b, '\n')
b = b[:i]
var data struct {
Regions []struct {
Name string `json:"name"`
PortForward bool `json:"port_forward"`
Servers struct {
UDP []struct {
IP net.IP `json:"ip"`
CN string `json:"cn"`
} `json:"ovpnudp"`
TCP []struct {
IP net.IP `json:"ip"`
CN string `json:"cn"`
} `json:"ovpntcp"`
} `json:"servers"`
} `json:"regions"`
}
if err := json.Unmarshal(b, &data); err != nil {
return err
}
servers := make([]models.PIAServer, 0, len(data.Regions))
for _, region := range data.Regions {
server := models.PIAServer{
Region: region.Name,
PortForward: region.PortForward,
}
for _, udpServer := range region.Servers.UDP {
if len(server.OpenvpnUDP.CN) > 0 && server.OpenvpnUDP.CN != udpServer.CN {
return fmt.Errorf("CN is different for UDP for region %q: %q and %q", region.Name, server.OpenvpnUDP.CN, udpServer.CN)
}
if udpServer.IP != nil {
server.OpenvpnUDP.IPs = append(server.OpenvpnUDP.IPs, udpServer.IP)
}
}
for _, tcpServer := range region.Servers.TCP {
if len(server.OpenvpnTCP.CN) > 0 && server.OpenvpnTCP.CN != tcpServer.CN {
return fmt.Errorf("CN is different for TCP for region %q: %q and %q", region.Name, server.OpenvpnTCP.CN, tcpServer.CN)
}
if tcpServer.IP != nil {
server.OpenvpnTCP.IPs = append(server.OpenvpnTCP.IPs, tcpServer.IP)
}
}
if server.OpenvpnTCP.CN != server.OpenvpnUDP.CN {
return fmt.Errorf("not the same: %q, %q", server.OpenvpnTCP.CN, server.OpenvpnUDP.CN)
}
servers = append(servers, server)
}
sort.Slice(servers, func(i, j int) bool {
return servers[i].Region < servers[j].Region
})
if u.options.Stdout {
u.println(stringifyPIAServers(servers))
}
u.servers.Pia.Timestamp = u.timeNow().Unix()
u.servers.Pia.Servers = servers
return nil
}
func stringifyPIAServers(servers []models.PIAServer) (s string) {
s = "func PIAServers() []models.PIAServer {\n"
s += " return []models.PIAServer{\n"
for _, server := range servers {
s += " " + server.String() + ",\n"
}
s += " }\n"
s += "}"
return s
}