2009. május 5.
A kedvenc (vagy egyetlen?) otthoni szolgáltatóm már a sokadik nnn.nnn.0.0/16-os hálózatból oszt ki nekem dinamikus címet.
A routerem jól együtt működik a dyndns.com-mal viszont a munkahelyi tűzfal nincs felkészülve az ekkora változásokra.
2009. május 18.
Annyira ocsmány scriptet raktam ki ide a múltkor,
hogy muszály volt átírnom - már csak azért is, mert az otthoni routeren is akarom futtatni - viszont Asus WL-500gP-n "Oleg 1.9.2.7-10" esetében nincs se host, se dig, se getopts.
#!/bin/sh
# /opt/tracehomeip/thip
opts=false; step_=false; no_force_=true;
case $1 in *-*) opts=true;; esac
if $opts; then
case $1 in *f*) no_force_=false;; esac
case $1 in *s*) step_=true;; esac
shift
fi
if $step_ ;
then
home_name=$(echo $* | awk '{ print $2 }')
most=$(ghost $home_name); volt="?"
if [ "$most" = "" ]; then exit 0 ; fi
ip_file=$0".ip."$home_name
if [ -r $ip_file ];
then volt=$(cat $ip_file | awk '{ print $NF }'); fi
# $1: no_force_
if $1; then if [ "$most" = "$volt" ]; then exit 0 ; fi; fi
echo $most > $ip_file
# tűzfalszabály részletek kiírasa, user/.ssh/config aktualizalasa, stb...
if [ -x $0"fw" ]; then $0"fw" "-s" $most $volt $* ; fi
logger -t HOME_IP $home_name": "$most
echo "." >> $0".ch";
else
echo "" > $0".ch"
# az összes home-gep ip-cím aktualizálása
eval "awk '{ if((\$1!~\"#\")){ system ¬
( \""$0" -s "$no_force_" \"\$0 \"&>/dev/null\" )} }' "$0"_users"
if [ ! -z "$(cat $0".ch" | awk '{ print $1 }')" ]; then
# volt csere - tűzfalszabályok összeszerelése
if [ -x $0"fw" ]; then $0"fw" "-f"; fi
fi
fi
exit 0
Ha -f opcióval inditjuk, mindenképpen újraszerkeszti a tűzfalat - akár volt változás, akár nem.
hozzá a ghost:
#!/bin/sh
# ghost
# ip.cim hostname-ből
# OpenDNS servercímek dig-be bevasalva
# UHU-linux 2.1 (kipróbálva)
# Asus WL-500GP - Oleg 1.9.2.7-10 (kipróbálva)
if [ "$1" = "" ]; then exit; fi
case "$HOME" in
/usr/local/root)
# oleg csak egy csövet bír el egyszerre
# viszont, ha adsl-modemre csatlakozik: lehet ”-m 1”
ipcim=$(traceroute -w 2 -m 1 $1 2>&1 | grep "traceroute" )
ipcim=$(echo $ipcim | awk '{ print $4 }')
lc=”(” ; rc=”),”
ipcim=$(echo $ipcim | sed -e 's/'$lc'//g' -e 's/'$rc'//g')
;;
*)
ipcim=$(dig @208.67.222.222 @208.67.220.220 $1 ¬
| head -n 13 | tail -n 1 | awk '{ print $NF }')
;;
esac
if [ "$(echo $ipcim | awk ' BEGIN { FS = "." } ¬
{ print $1"."$2}')" != "67.215" ]; then
if [ $(echo $ipcim | awk ¬
' BEGIN { FS = "." }{ print NF}') = 4 ];
then echo $ipcim; fi
fi
exit 0
/usr/local/sbin-ben, és /usr/local/bin-ben:
@ghost (symlink az ”/opt/tracehome/ghost”-ra )
@tracehomeip (symlink az ”/opt/tracehome/thip”-re )
/etc/cron.d/cron-ba a következősor ( ha 5 percenként akarjuk ellenőriztetni ):
-*/5 * * * * root tracehomeip &>/dev/null
/etc/tracehomeip_users:
# formatum:
# space-el elválasztott lista
# $1: távoli gep neve
# $2: sshport,tovabbi,portok,vesszővel,elválasztva
# $3-$NF: home_könyvtárak
hostname1 sshport /home/user1
hostname2 sshport,masikport,megegyport /home/user1 /home/user2
/opt/tracehomeip/@thip_users (symlink az ”/etc/tracehomeip_users”-re )
A tűzfalszabály és /home/user/.ssh/config aktualizáló program (alapesetben):
/opt/tracehomeip/thipfw
ezeket a bemenő paramétereket kapja
step - lépésenként:
-s (ipcim-most) (ipcim-volt) (/etc/tracehomeip_users-megfelelő_sora)
első esetben „”ipcim-volt” értéke: ”?”
vagy - aktualizáláshoz:
-f
egyéni döntés, hogy az /etc/hosts.deny, ~/.ssh/config állományok is szerkesztődnek-é a tűzfalszabályokkal