Не знаю, кому в голову пришла эта мысль, и что это вообще было за гениальность, но при подъёме туннеля в 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
Обсуждение закрыто.