This commit is contained in:
@@ -14,7 +14,9 @@ PIA_DNS_PRE_VPN="${PIA_DNS_PRE_VPN:-1.1.1.1}"
|
|||||||
PIA_HEALTH_URL="${PIA_HEALTH_URL:-https://api64.ipify.org}"
|
PIA_HEALTH_URL="${PIA_HEALTH_URL:-https://api64.ipify.org}"
|
||||||
PIA_HANDSHAKE_MAX_AGE_SECONDS="${PIA_HANDSHAKE_MAX_AGE_SECONDS:-180}"
|
PIA_HANDSHAKE_MAX_AGE_SECONDS="${PIA_HANDSHAKE_MAX_AGE_SECONDS:-180}"
|
||||||
PIA_RECONNECT_BACKOFF_SECONDS="${PIA_RECONNECT_BACKOFF_SECONDS:-5}"
|
PIA_RECONNECT_BACKOFF_SECONDS="${PIA_RECONNECT_BACKOFF_SECONDS:-5}"
|
||||||
PIA_LOCAL_NETS="${PIA_LOCAL_NETS:-10.0.0.0/8,172.16.0.0/12,192.168.0.0/16}"
|
# Networks that must stay reachable via the original (non-VPN) default gateway.
|
||||||
|
# NOTE: Do not include PIA's internal 10.x gateways here (PF uses server_vip ~ 10.x.x.1).
|
||||||
|
PIA_LOCAL_NETS="${PIA_LOCAL_NETS:-172.16.0.0/12,192.168.0.0/16}"
|
||||||
|
|
||||||
CA_CERT_PATH="/opt/pia/ca.rsa.4096.crt"
|
CA_CERT_PATH="/opt/pia/ca.rsa.4096.crt"
|
||||||
|
|
||||||
@@ -150,9 +152,10 @@ is_tunnel_healthy() {
|
|||||||
|
|
||||||
start_port_forwarding_loop() {
|
start_port_forwarding_loop() {
|
||||||
local token="$1"
|
local token="$1"
|
||||||
local wg_ip="$2"
|
local pf_gateway="$2"
|
||||||
local wg_cn="$3"
|
local wg_cn="$3"
|
||||||
local region="$4"
|
local region="$4"
|
||||||
|
local wg_ip="$5"
|
||||||
|
|
||||||
(
|
(
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -160,7 +163,7 @@ start_port_forwarding_loop() {
|
|||||||
local sigresp status payload signature port expires_at bindresp
|
local sigresp status payload signature port expires_at bindresp
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
sigresp="$(pia_pf_get_signature "$wg_ip" "$wg_cn" "$token" "$CA_CERT_PATH")"
|
sigresp="$(pia_pf_get_signature "$pf_gateway" "$wg_cn" "$token" "$CA_CERT_PATH")"
|
||||||
status="$(jq -r '.status' <<<"$sigresp")"
|
status="$(jq -r '.status' <<<"$sigresp")"
|
||||||
if [[ "$status" != "OK" ]]; then
|
if [[ "$status" != "OK" ]]; then
|
||||||
>&2 echo "PF getSignature did not return OK: $sigresp"
|
>&2 echo "PF getSignature did not return OK: $sigresp"
|
||||||
@@ -173,7 +176,7 @@ start_port_forwarding_loop() {
|
|||||||
port="$(echo "$payload" | base64 -d | jq -r '.port')"
|
port="$(echo "$payload" | base64 -d | jq -r '.port')"
|
||||||
expires_at="$(echo "$payload" | base64 -d | jq -r '.expires_at')"
|
expires_at="$(echo "$payload" | base64 -d | jq -r '.expires_at')"
|
||||||
|
|
||||||
bindresp="$(pia_pf_bind_port "$wg_ip" "$wg_cn" "$payload" "$signature" "$CA_CERT_PATH")"
|
bindresp="$(pia_pf_bind_port "$pf_gateway" "$wg_cn" "$payload" "$signature" "$CA_CERT_PATH")"
|
||||||
if [[ "$(jq -r '.status' <<<"$bindresp")" != "OK" ]]; then
|
if [[ "$(jq -r '.status' <<<"$bindresp")" != "OK" ]]; then
|
||||||
>&2 echo "PF bindPort did not return OK: $bindresp"
|
>&2 echo "PF bindPort did not return OK: $bindresp"
|
||||||
sleep 10
|
sleep 10
|
||||||
@@ -183,12 +186,13 @@ start_port_forwarding_loop() {
|
|||||||
ensure_state_dir
|
ensure_state_dir
|
||||||
jq -n \
|
jq -n \
|
||||||
--arg region "$region" \
|
--arg region "$region" \
|
||||||
|
--arg pf_gateway "$pf_gateway" \
|
||||||
--arg server_ip "$wg_ip" \
|
--arg server_ip "$wg_ip" \
|
||||||
--arg server_cn "$wg_cn" \
|
--arg server_cn "$wg_cn" \
|
||||||
--argjson port "$port" \
|
--argjson port "$port" \
|
||||||
--arg expires_at "$expires_at" \
|
--arg expires_at "$expires_at" \
|
||||||
--arg refreshed_at "$(date -Is)" \
|
--arg refreshed_at "$(date -Is)" \
|
||||||
'{region:$region,server:{ip:$server_ip,cn:$server_cn},port:$port,expires_at:$expires_at,refreshed_at:$refreshed_at}' \
|
'{region:$region,server:{ip:$server_ip,cn:$server_cn,pf_gateway:$pf_gateway},port:$port,expires_at:$expires_at,refreshed_at:$refreshed_at}' \
|
||||||
> "$PIA_PF_FILE.tmp" \
|
> "$PIA_PF_FILE.tmp" \
|
||||||
&& mv "$PIA_PF_FILE.tmp" "$PIA_PF_FILE"
|
&& mv "$PIA_PF_FILE.tmp" "$PIA_PF_FILE"
|
||||||
|
|
||||||
@@ -210,7 +214,7 @@ connect_region() {
|
|||||||
|
|
||||||
log "Connecting region=$region wg=${wg_cn} (${wg_ip})"
|
log "Connecting region=$region wg=${wg_cn} (${wg_ip})"
|
||||||
|
|
||||||
local privKey pubKey wgjson status peer_ip server_key server_port dns_server
|
local privKey pubKey wgjson status peer_ip server_key server_port dns_server pf_gateway
|
||||||
privKey="$(wg genkey)"
|
privKey="$(wg genkey)"
|
||||||
pubKey="$(echo "$privKey" | wg pubkey)"
|
pubKey="$(echo "$privKey" | wg pubkey)"
|
||||||
|
|
||||||
@@ -225,6 +229,7 @@ connect_region() {
|
|||||||
server_key="$(jq -r '.server_key' <<<"$wgjson")"
|
server_key="$(jq -r '.server_key' <<<"$wgjson")"
|
||||||
server_port="$(jq -r '.server_port' <<<"$wgjson")"
|
server_port="$(jq -r '.server_port' <<<"$wgjson")"
|
||||||
dns_server="$(jq -r '.dns_servers[0] // empty' <<<"$wgjson")"
|
dns_server="$(jq -r '.dns_servers[0] // empty' <<<"$wgjson")"
|
||||||
|
pf_gateway="$(jq -r '.server_vip // .server_ip // empty' <<<"$wgjson")"
|
||||||
if [[ -z "$dns_server" ]]; then
|
if [[ -z "$dns_server" ]]; then
|
||||||
dns_server="$PIA_DNS_FALLBACK"
|
dns_server="$PIA_DNS_FALLBACK"
|
||||||
fi
|
fi
|
||||||
@@ -252,7 +257,11 @@ connect_region() {
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
if [[ "$PIA_PF_ENABLED" == "true" ]]; then
|
if [[ "$PIA_PF_ENABLED" == "true" ]]; then
|
||||||
start_port_forwarding_loop "$token" "$wg_ip" "$wg_cn" "$region"
|
if [[ -z "$pf_gateway" ]]; then
|
||||||
|
>&2 echo "Port forwarding enabled but no server_vip/server_ip found in addKey response."
|
||||||
|
else
|
||||||
|
start_port_forwarding_loop "$token" "$pf_gateway" "$wg_cn" "$region" "$wg_ip"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user