首页 > 解决方案 > 如果 ping 失败,将wireguard 重新连接到另一个 VPN 服务器?

问题描述

我正在使用 WireGuard 连接到 Mullvads(= vpn 服务)vpn 服务器。我总共使用了 5 种不同的wireguard vpn 配置(vpn 服务器*)。称为 server1、server2、server3、server4、server5。

所以要连接到我运行的server3 wg-quick up server3,并断开与当前服务器-server3-的连接-wg-quick down server3

有时 vpn 服务器出现故障。我想要几乎立即重新连接到 5 台可用服务器中的另一台。我该怎么做才能自动完成这项工作?

crontab:

*/3 * * * * ping -c4 google.com || wg-command-here?

所以每 3 分钟 google.com 都会被 ping 通。如果失败,那么它将运行wg-command-here。哪个会是什么=D?

因此,每当 ping 失败 => 与当前的wireguard 服务器断开连接=> 连接到总共 5 个可用服务器中的另一个(随机,但由于显而易见的原因,最好不是当前连接的那个)。

有没有人有一个可以解决这个问题的简洁脚本?我用谷歌搜索了2 天,根本没有找到该死的解决方案。有可能是什么鬼:o。我的编程知识为零,所以我真的希望在这里有一个复制粘贴解决方案。

标签: bashshellscriptingcron

解决方案


您需要运行一个脚本,该脚本检查连接时间脚本在服务器在线时对服务器执行 ping 操作,它连接到 wiregaurd vpn,如果连接的服务器 ping 失败 3 次,它会不时检查连接的服务器它通过 ping 检查另一台服务器

在运行之前更改脚本中的 serverip

脚本

#!/bin/bash
server1IP= 84.18.418.64 #change server1 ip or name 
server2IP= 84.18.418.687 #change server2 ip or name 
server3IP= 845.158.418.64 #change server3 ip or name 
server4IP= 44.168.418.64 #change server4 ip or name 
server5IP= 64.68.418.64 #change server5 ip or name 
while true
do
if /bin/ping -c 1 $server1Ip
    then
            sudo wg-quick up server1
            tries=0
            while [[ $tries -lt 3 ]]
            do
            if /bin/ping -c 1 $server1Ip
                then
                        tries=0
                        continue
            fi
            tries=$((tries+1))
            done
            sudo wg-quick down server1
fi

if /bin/ping -c 1 $server2Ip
    then
            sudo wg-quick up server2
            tries=0
            while [[ $tries -lt 3 ]]
            do
            if /bin/ping -c 1 $server2Ip
                then
                        tries=0
                        continue
            fi
            tries=$((tries+1))
            done
            sudo wg-quick down server2
fi

if /bin/ping -c 1 $server3Ip
    then
            sudo wg-quick up server3
            tries=0
            while [[ $tries -lt 3 ]]
            do
            if /bin/ping -c 1 $server3Ip
                then
                        tries=0
                        continue
            fi
            tries=$((tries+1))
            done
            sudo wg-quick down server3
fi

if /bin/ping -c 1 $server4Ip
    then
            sudo wg-quick up server4
            tries=0
            while [[ $tries -lt 3 ]]
            do
            if /bin/ping -c 1 $server4Ip
                then
                        tries=0
                        continue
            fi
            tries=$((tries+1))
            done
            sudo wg-quick down server4
fi

if /bin/ping -c 1 $server5Ip
    then
            sudo wg-quick up server5
            tries=0
            while [[ $tries -lt 3 ]]
            do
            if /bin/ping -c 1 $server5Ip
                then
                        tries=0
                        continue
            fi
            tries=$((tries+1))
            done
            sudo wg-quick down server5
fi
done

将此脚本保存为wiregaurd.sh 或下载 https://anonfiles.com/p3Y94av1u6/wiregaurd_sh

sudo chmod +x Wiregaurd.sh

sudo sed -i -e 's/\r$//'wiregaurd.sh

sudo nohup "./wiregaurd.sh" &

或者

在启动时运行此脚本,将其放入 crontab

@reboot [wiregaurd 脚本的路径]


推荐阅读