diff --git a/internal/constants/pia.go b/internal/constants/pia.go index cabe96da..0fee5d91 100644 --- a/internal/constants/pia.go +++ b/internal/constants/pia.go @@ -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}}}, } } diff --git a/internal/constants/servers.go b/internal/constants/servers.go index ed6ceaf0..b0ba2fff 100644 --- a/internal/constants/servers.go +++ b/internal/constants/servers.go @@ -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{ diff --git a/internal/constants/servers_test.go b/internal/constants/servers_test.go index 217fe04c..dfd36a27 100644 --- a/internal/constants/servers_test.go +++ b/internal/constants/servers_test.go @@ -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)) diff --git a/internal/models/server.go b/internal/models/server.go index e424c77b..1f550438 100644 --- a/internal/models/server.go +++ b/internal/models/server.go @@ -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)) } diff --git a/internal/models/server_test.go b/internal/models/server_test.go index 56035794..d122fdc5 100644 --- a/internal/models/server_test.go +++ b/internal/models/server_test.go @@ -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}}}`, }, } diff --git a/internal/models/servers.go b/internal/models/servers.go index e1fbd68b..99d09340 100644 --- a/internal/models/servers.go +++ b/internal/models/servers.go @@ -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"` diff --git a/internal/provider/pia.go b/internal/provider/pia.go index abbf2d24..587218b9 100644 --- a/internal/provider/pia.go +++ b/internal/provider/pia.go @@ -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 { diff --git a/internal/provider/piav3.go b/internal/provider/piav3.go index dec5f79c..84a0284e 100644 --- a/internal/provider/piav3.go +++ b/internal/provider/piav3.go @@ -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 +} diff --git a/internal/provider/piav4.go b/internal/provider/piav4.go index 2936a958..1adbdbf0 100644 --- a/internal/provider/piav4.go +++ b/internal/provider/piav4.go @@ -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 { diff --git a/internal/storage/merge.go b/internal/storage/merge.go index 464e2b90..3acf9d07 100644 --- a/internal/storage/merge.go +++ b/internal/storage/merge.go @@ -36,9 +36,16 @@ func (s *storage) mergeServers(hardcoded, persistent models.AllServers) (merged } merged.Pia = hardcoded.Pia if persistent.Pia.Timestamp > hardcoded.Pia.Timestamp { - s.logger.Info("Using Private Internet Access servers from file (%s more recent)", - getUnixTimeDifference(persistent.Pia.Timestamp, hardcoded.Pia.Timestamp)) - merged.Pia = persistent.Pia + 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 { diff --git a/internal/updater/openvpn.go b/internal/updater/openvpn.go index 7a0e854c..fda3f52f 100644 --- a/internal/updater/openvpn.go +++ b/internal/updater/openvpn.go @@ -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) diff --git a/internal/updater/pia.go b/internal/updater/piav3.go similarity index 53% rename from internal/updater/pia.go rename to internal/updater/piav3.go index 1f731520..c499eda5 100644 --- a/internal/updater/pia.go +++ b/internal/updater/piav3.go @@ -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" } diff --git a/internal/updater/piav4.go b/internal/updater/piav4.go new file mode 100644 index 00000000..c70a026e --- /dev/null +++ b/internal/updater/piav4.go @@ -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 +}