当 VPN 关闭时,如何让 openconnect 卸载分区?

当 VPN 关闭时,如何让 openconnect 卸载分区?

我的 fstab 中有以下条目:

sc-netapp48.nvidia.com:/vol/scratch9/scratch.securesign_new /home/scratch.securesign_new nfs _netdev,comment=systemd.automount 0 0

我不确定它具体是如何工作的,但是当我使用 VPN 并需要访问时/home/scratch.securesign_new,它就会神奇地出现。

但是,当我断开与 VPN 的连接时,似乎/home/scratch.securesign_new仍处于挂载状态。这会导致各种问题。例如,每当我安装程序时,安装程​​序都会尝试访问/home/scratch.securesign_new/.config不存在的。

所以我需要能够umount -l /home/scratch.securesign_new在 VPN 关闭时执行此操作。我该怎么做?我尝试在 中添加一个脚本/etc/network/if-down.d/,但 VPN 关闭时不会执行该脚本。

我正在运行 Kubuntu 20.04。

答案1

我确认,断开与 openconnect vpn 的连接时,脚本/etc/network/if-down.d/似乎根本没有被调用。

但是确实/etc/network/if-post-down.d/会被调用,因此您可以将脚本放在那里。请确保脚本的权限为 755。

答案2

有两个选项:要么检查进程是否存在openconnect,要么每 1 秒检查一次 IP 地址,以确定我们是否仍在 VPN 上。我假设 IP 地址在OpenConnect会话。所以这应该有效:

#######   BASED ON THE PRESENCE OF OPENCONNECT   #######

while [ 1 ]
do
    if  [ -n `pgrep openconnect` ] 
         then sudo umount -l /home/scratch.securesign_new
    fi
    sleep 1
done

######   OR BASED ON THE IP ADDRESS   ######

sudo openconnect -u user --passwd-on-stdin vpnserver
sleep 10
vpn_ip=`curl ifconfig.me`
while [ 1 ] 
do
    current_ip=`curl ifconfig.me`
    if [ "$vpn_ip" != "$current_ip" ]
        then sudo umount -l /home/scratch.securesign_new
    fi
    sleep 1
done

您可以随意调整前面的数字sleep。我在启动 VPN 服务后添加了 10 秒的延迟,因为 VPN 连接可能需要一段时间才能真正开始。

我使用了该网站ifconfig.me来获取 IP 地址。但如果你想经常使用它,它可能不是一个可靠的信息来源(我的意思是它可能会因为某种原因而关闭,我不知道)。如果你的终端不通过 OpenConnect 发送流量(抱歉我对此很无知,因为我不使用它),你必须在根据 IP 地址部分脚本:

$ export http_proxy="http://USER:PASSWORD@PROXY_SERVER:PORT"

如果有更好的解决方案,我很高兴听到。

希望能帮助到你。

相关内容