2025-03-06 00:20:30 -08:00
|
|
|
# see if others see us connecting from a mullvad exit node
|
2025-02-20 14:55:55 -08:00
|
|
|
def check-mullvad [] {
|
2025-03-06 00:20:30 -08:00
|
|
|
print -n "checking mullvad status"
|
|
|
|
|
mut check = false
|
|
|
|
|
mut j = null
|
|
|
|
|
while not $check {
|
|
|
|
|
print -n "."
|
|
|
|
|
$j = (http get https://am.i.mullvad.net/json)
|
|
|
|
|
$check = $j.mullvad_exit_ip
|
2025-02-20 14:55:55 -08:00
|
|
|
}
|
2025-03-06 00:20:30 -08:00
|
|
|
print ""
|
2025-03-09 01:33:34 -08:00
|
|
|
return $"connected to ($j.city), ($j.country)"
|
2025-02-20 14:55:55 -08:00
|
|
|
}
|
2025-03-06 00:20:30 -08:00
|
|
|
|
|
|
|
|
# switch to a specific exit node, or none
|
2025-02-20 14:55:55 -08:00
|
|
|
def tse [exit_node: string = ""] {
|
|
|
|
|
if ($exit_node | is-empty) and (ps | find deluge | is-not-empty) {
|
|
|
|
|
return "stop summoning first!"
|
|
|
|
|
} else {
|
|
|
|
|
tailscale set --exit-node $exit_node
|
|
|
|
|
}
|
|
|
|
|
if ($exit_node | is-not-empty) {
|
2025-03-09 01:33:34 -08:00
|
|
|
check-mullvad | return $in
|
|
|
|
|
} else {
|
|
|
|
|
return "exit node set"
|
2025-02-20 14:55:55 -08:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-06 00:20:30 -08:00
|
|
|
|
|
|
|
|
# list all mullvad exit nodes
|
|
|
|
|
def tsx [] {
|
|
|
|
|
tailscale exit-node list
|
2025-03-06 17:44:40 -08:00
|
|
|
| lines
|
|
|
|
|
| drop 4
|
2025-03-06 00:20:30 -08:00
|
|
|
| skip 1
|
2025-03-06 17:44:40 -08:00
|
|
|
| to text
|
|
|
|
|
| detect columns --guess
|
2025-03-06 00:20:30 -08:00
|
|
|
| where HOSTNAME =~ mullvad
|
|
|
|
|
| reject STATUS
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# sort mullvad exit nodes by fastest ping
|
2025-02-20 14:55:55 -08:00
|
|
|
def tsp [] {
|
2025-03-06 00:20:30 -08:00
|
|
|
tsx
|
|
|
|
|
| where COUNTRY == USA
|
|
|
|
|
| par-each {
|
|
|
|
|
insert ping {
|
|
|
|
|
$in.HOSTNAME
|
|
|
|
|
| str replace "mullvad.ts.net" "relays.mullvad.net"
|
|
|
|
|
| try {
|
|
|
|
|
print $"pinging ($in)"
|
|
|
|
|
ping -c5 -q $in
|
|
|
|
|
| lines
|
|
|
|
|
| last
|
|
|
|
|
| split row ' '
|
|
|
|
|
| get 3
|
|
|
|
|
| split row '/'
|
|
|
|
|
| get 1
|
|
|
|
|
| into float
|
|
|
|
|
}
|
2025-02-20 14:55:55 -08:00
|
|
|
}
|
2025-03-06 00:20:30 -08:00
|
|
|
}
|
|
|
|
|
| sort-by ping
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# switch to a random mullvad exit node
|
2025-02-20 14:55:55 -08:00
|
|
|
def tsr [] {
|
2025-03-06 00:20:30 -08:00
|
|
|
tsx
|
|
|
|
|
| get (random int 0..($in | length))
|
|
|
|
|
| tse $in.IP
|
2025-03-08 22:57:46 -08:00
|
|
|
| return $in
|
2025-02-20 14:55:55 -08:00
|
|
|
}
|
2025-03-06 00:20:30 -08:00
|
|
|
|
2025-02-20 14:55:55 -08:00
|
|
|
alias ts = tailscale
|
|
|
|
|
alias tss = tailscale status
|
|
|
|
|
alias tsu = tailscale up
|
|
|
|
|
alias tsd = tailscale down
|
|
|
|
|
alias tsa = tailscale exit-node suggest
|