Hallo,
ich hab das Problem, daß auf dem IPCop die IPsec-Verbindungen nach
Verbindungsproblemen nicht wieder neu aufgebaut werden. "Dead Peer
Detection" ist zwar eingeschaltet, funktioniert aber nicht richtig.
Für einen Workaround bin ich inzwischen soweit gekommen, daß ich mit
ipsec eroute | grep -v tun | awk '{print $4}' | awk -F / '{print $1}'
die fehlerhafte Verbindung identifiziere und die IP(s) der
Gegenstelle(n) (rightsubnet ohne netmask) als Ergebnis erhalte.
für die 2 awk-Aufrufe gibt es bestimmt auch hier eine bessere Lösung.
# ipsec eroute
362 192.168.0.0/24:0 -> 192.168.20.0/24:0 => tun0x1006@...
36 192.168.0.0/24:0 -> 10.129.4.128/25:0 => %trap
^^^^^^^^^^^^
Die 1. Verbindung steht, die 2. nicht mehr.
Damit kann ich mir aus der config wiederum die zugehörige Connection-ID
holen.
Config-Schema:
ConnID,aktiv,ConnName,...,rightsubnet,...
1,off,VPN-A,...,10.129.4.128/255.255.255.128,...
2,on,VPN-A2,...,10.129.4.128/255.255.255.128,...
4,on,VPN-B,...,192.168.20.0/255.255.255.0,...
Ich benötige hier demzufolge die Zeile 2, da Zeile 1 eine alte
deaktivierte Config ist. Ein grep auf on kommt nicht in Frage, da es
noch mehr on/off-Felder in den Zeilen gibt und u.U. auch in ConnName
vorkommen könnte. Ein grep auf die IP möchte ich ebenfalls vermeiden, da
es auch hier zu unerwünschten Nebeneffekten kommen kann.
awk scheint hier erst recht das Mittel der Wahl zu sein:
for CONN in $FAILCONN; do
awk -F , '($2 == "on") {printf "%s %s %s\n", $1, $3, $13}' $CONFIG
done
ergibt pro fehlender Verbindung ($13 ist rightsubnet):
2 VPN-A2 10.129.4.128/255.255.255.128
4 VPN-B 192.168.20.0/255.255.255.0
Als Rückgabewert braucht ich lediglich $3 für logger bzw. $1 für den
Neustart der Verbindung. $13 wird nur zum Vergleich benötigt.
Wie kann ich das jetzt in dem awk-Aufruf noch mit der IP 10.129.4.128
vergleichen? Ich bräuchte innerhalb der Bedingung so etwas wie:
($2 == "on" && $CONN == ( awk -F / '{print $1}' $13 ) )
Kann mir hier jemand auf die Sprünge helfen?
Gruß
Rico