Trace home-ip - WL-500GP-hez újra töltve

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