2009年8月1日土曜日

職場鯖への自宅からのssh接続

今自宅の光回線は、固定IPアドレスではない。
で、たまにIPアドレスが変わったりしている。家サーバプロジェクトやDymanic Dns Serviceに入って(無料)、サブドメインをもらっている。
で職場の鯖はhttpポートとhttpsポートしか外部と通信できないように、外側のポートが塞がれている。私も鯖の管理者だが、ほとんどの管理者はなにも出来ないので、そこらいらに合わせている。
で、前からhttpsポートを使って、職場の鯖に通信をしているのだが、家サーバープロジェクトのperlスクリプトを改編して、職場の鯖から、家鯖の動的IPアドレスが変わったら、それに応じて新しい家鯖のIPアドレスをiptablesのnat変換テーブルに入れて(古いipアドレスは削除する)、家から職場に通信させる手段にcronで定期実行させることにした。


#!/usr/bin/perl

$CURRENT_IP_FILE = "current_ip";
$LOG_FILE = "ip_update.log";
$ACCOUNT = "xx";
$DOMAIN = "yyyy.zz";
$NAME="$ACCOUNT.$DOMAIN";

if(!open(FILE,"$CURRENT_IP_FILE")) {
$CURRENT_IP = '0.0.0.0';
} else {
$CURRENT_IP = ;
close FILE;
}

$NEWADDR = '0.0.0.0';

my $NEWADDR = join(".",unpack C4=>(gethostbyname $NAME)[4]);

if ($NEWADDR ne "0.0.0.0" and $CURRENT_IP ne $NEWADDR) {
if (!($CURRENT_IP =~ m/$NEWADDR/)) {
open (FILE0 ,"$CURRENT_IP_FILE");
$OLD_IP=;
print `/sbin/iptables -t nat -D PREROUTING -s $OLD_IP -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 22`;
close FILE0;
print `/sbin/iptables -t nat -A PREROUTING -s $NEWADDR -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 22`;
open (FILE1 ,">$CURRENT_IP_FILE");
print FILE1 $NEWADDR;
close FILE1;
$TIME = localtime;
open (FILE2 ,">>$LOG_FILE");
print FILE2 "$TIME $ACCOUNT.$DOMAIN Updated $OLD_IP to $NEWADDR\n";
close FILE2;
} else {
$TIME = localtime;
open (FILE1 ,">>$LOG_FILE");
print FILE1 "$TIME $ACCOUNT.$DOMAIN Update aborted $CURRENT_IP to $NEWADDR\n";
close FILE1;
}
}
exit;
まあ、ここまでやっとけば、結構楽ちんでしょう。

0 件のコメント: