Свежий Network Manager и vpn туннели

Не знаю, кому в голову пришла эта мысль, и что это вообще было за гениальность, но при подъёме туннеля в NM 1.40 помимо маршрута до впн-сервера через шлюз по умолчанию создаётся и маршрут до этого-же сервера через вновь созданный туннель. В результате туннель падал через некоторое время после запуска, а пока работал – ничего не ходило всё равно. В логе:

Sep 9 13:30:01 comp NetworkManager[2572]: [1662719401.8775] device (ppp0): state change: unmanaged -> unavailable (reason ‘connection-assumed’, sys-iface-state: ‘external’)
Sep 9 13:30:01 comp NetworkManager[2572]: [1662719401.8786] device (ppp0): state change: unavailable -> disconnected (reason ‘none’, sys-iface-state: ‘external’)

В чём гениальность я не понял, честно. Но работать как-то было надо, а копаться в исходниках NM неохота, потому был быстро накидан скрипт (положить в /etc/NetworkManager/dispatcher.d/vpn-up.sh):

#!/bin/bash

logger -t network-manager-vpn "vpn $1 status: $2"

export LC_ALL=C
# For NetworkManager consider only selected events
vpn_int=$1
if [ $# -ge 2 ]; then
    case "$2" in
        vpn-up)
	    gateway=$(/sbin/ip r show to 0/0 | awk '{ print $3 }')
	    logger -t network-manager-vpn "Found default gateway: ${gateway}"
	    /sbin/ip r | grep via | grep "${gateway}" | grep "^[0-9]" | while read PEER_ROUTE; do
		peer_ip=$(echo "${PEER_ROUTE}" | awk '{ print $1 }')
	        logger -t network-manager-vpn "Check ip ${peer_ip} for vpn $vpn_int"
		is_vpn=$(/sbin/ip r | egrep "^${peer_ip}\s+dev\s+${vpn_int}\s+")
		if [ -n "${is_vpn}" ]; then
		    logger -t network-manager-vpn "Remove vpn-server ip ${peer_ip} from vpn interface $vpn_int"
		    /sbin/ip r d ${peer_ip} dev ${vpn_int}
		    fi
	    done
            ;;
        *)
            exit 0;;
    esac
fi

exit 0

Обсуждение закрыто.