Trace home-ip

2009. május 5.

A kedvenc (vagy egyetlen?) otthoni szolgáltatóm már a hatodik 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 (2009. május 5.),
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.


#!/bin/sh
# /opt/tracehomeip/thip

param=false; step_=false; no_force_=true;

while getopts ":fst" OPT; do
	case $OPT in
		"s") param=true; step_=true;;
		"f") param=true; no_force_=false;;
	esac
done

if $param; then 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 "-";
else
#	az összes home-gep ip-cím aktualizálása
	awk_="awk '{ if((\$1!~\"#\")){ system ¬
 	     ( \""$0" -s "$no_force_" \"\$0 \"&>/dev/null\" )} }' "$0"_users"
	if [ ! -z $(eval $awk_) ]; then 
#		ha volt csere - tűzfalszabályok összeszerelése
		if [ -x $0"fw" ]; then $0"fw -f"; fi
	fi
fi

exit 0 

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 

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) (/opt/tracehomeip/@thip_users-megfelelő_sora)

első esetben „”ipcim-volt” értéke: ”?”

vagy - aktualizáláshoz:


-a

egyéni döntés, hogy az /etc/hosts.deny, ~/.ssh/config állományok is szerkesztődnek-é a tűzfalszabályokkal