当界面改变状态时运行脚本

当界面改变状态时运行脚本

当接口启动时我需要静态路由,并在接口关闭时删除该路由,但我没有接口配置文件来描述其中的 shell 命令。

我有使用 LibreSwan 创建的 IPSec 隧道和由 ipsec 守护进程创建的隧道接口 vti0。这是配置:

conn dc
    authby=secret
    auto=start
    type=tunnel
    esp={{ ipsec_ike_alg }}
    ike={{ ipsec_ike_alg }}
    ikelifetime={{ ipsec_ikelifetime }}
    keylife={{ ipsec_key_lifetime }}
    ikev2=insist
    rekey=no
    fragmentation=yes
    narrowing=yes

    left={{ ipsec_local_ip }}
    leftsubnet={{ ipsec_local_net }}
    right={{ ipsec_remote_ip }}
    rightsubnet={{ ipsec_remote_net }}

    mark=5/0xffffffff
    vti-interface=vti0
    vti-routing=no
    leftvti={{ ipsec_vti_local_ip }}

我需要通过 vti0 隧道将流量路由到此 ipsec 后面的子网。我可以手动完成,一切都会按计划进行:

ip route add {{ ipsec_static_route }} dev vti0 src {{ ipsec_source_ip }}

但我希望这条路由在 vti0 启动时自动出现,并在接口关闭时自动消失。我尝试将我的脚本放入 /etc/network/if-up.d/ 和 /etc/network/if-down.d/ 中,但它不起作用:

#!/bin/sh

if [ "$IFACE" = {{ ipsec_vti_interface }} ]; then
    route add -net {{ ipsec_static_route }} dev {{ ipsec_vti_interface }}
fi

也许 LibreSwan 有一些本地方法可以仅为某些网络创建路由?或者我的笔记中犯了一些错误?

相关内容