server install & setup ver.2 に戻る

server & expect

server & IP address の 変化

Ntt west adsl modem sv3

変化の例

adsl modem の グローバルアドレスは 通常あまり 変化しないと 思っていた が 、5月2日 親切な NTT の 方に 設定を 御指導して頂いて 立ち上げた と いうより 立ち上げて 頂いた ものでありますが 本日(2005年 5月10日 (火) ) 迄に、何回か 変わっている
220.99.221.209
218.47.49.62
219.164.88.204
60.42.244.129
60.35.85.116
そこで 今回 暫定的に サーバーから サーバーへ 定期的に ファイルを 読み込 ますつまり 定期的に http リクエストを するようにした こうしておくと /apache2/logs/access_log に log が 残るので これから 発信元の IP アドレ スが 判明するので こちらから 一々サーバーまで 燦然里も 出かけなくとも 相 手の ip address が わかるようにした もっといい方法はあるのだろうが にゃ んたろうが 今現在できる ことは この方法である

システム の 状態
pc1 -- adsl modem (so-net NEC ATUR32J (C2)-A) -- innternet ;1.5M
pc2 -- adsl modem (Ntt west sv-3 ) -- innternet ; almost 40M
pc1 は no-ip での ddns にて 運用中 (半ば 固定 domain )
pc2 は ddns 未 での 運用中
pc1 は port 80 25 http smpt 外部から 接続 可能 に してある 明示的に処理
pc2 は port 80 22 http ssh 外部から 接続 可能 に してある 明示的 に処理
明示的に処理 とは 初期設定より 変更した点である、従って 機器の初期設定で 他の 機能は 当然異なるようである ちなみに pc1 側の ping は 受け付ける 様ですが pc2 側の ping わ 受け付けないようです 詳細は 未検討だが 、これ で 常時電源投入で サーバーの 動作試験を 運用出来ると 考えていたが 通常の 感覚では グローバルアドレスは adsl modem の 電源の 入りきり が ない場合 は ほとんど 変わらない 感覚であったが Ntt west さんの 方は どうも 色々 変わるようである そこで なんらかの 処置をしないと 一々 pc1 側の IP address を 問い合わせる或は そこまで 行って pc2 側の pc から adsl modem の 画面を みる 必要が ある。これでは サーバーを 置かせて 頂いている 方に 申し訳が ないので 何か 対応しないと 行けない という 事である。

expect

上に

色々捜しまくった 結果 expect の 導入で 対処しようという結果を得た、後 は これを cron 処理しよう という ことにした、最初に telnet にて サーバー に 要求した場合の log を 見る

mm@lx:~$ telnet 192.168.0.8 80
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
GET /index.html /HTTP/1.0
/* 空行を 送る Enter キーを 押すのみ  */
HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:32:51 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Fri, 21 Jan 2005 01:36:30 GMT
ETag: "1be85-af3-e139e380"
Accept-Ranges: bytes
Content-Length: 2803
Connection: close
Content-Type: text/html; charset=euc-jp
/* 内容省略  */
</body>
</html>Connection closed by foreign host.expect

やり取りは このように なるでしょう、その時点での log を サーバー pc1 のものを 見てみると

# cat access_log
192.168.0.5 - - [08/May/2005:21:32:51 +0900] "GET /index.html /HTTP/1.0" 200 2803

expect ちゅうもんの 中身を 見ておく プログラムの 名前は a_telnet です

$ cat a_telnet 
#!/usr/bin/expect --
set timeout 10  
spawn telnet 192.168.0.8 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n" 
expect "*200 OK*"
send "quit\r\n"

実行してみましょう、これは pc1 と 同じ ネットワークの 機器から の 実 行したばあいです

$ ./a_telnet 
spawn telnet 192.168.0.8 80
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
GET /index.html /HTTP/1.0 

HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:42:43 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Fri, 21 Jan 2005 01:36:30 GMT
ETag: "1be85-af3-e139e380"
Accept-Ranges: bytes
Content-Length: 2803
Connection: close
Content-Type: text/html; charset=euc-jp
</body>
</html>

この場合の pc1 の log の 該当する 部分は

# cat access_log 
192.168.0.5 - - [08/May/2005:21:42:43 +0900] "GET /index.html /HTTP/1.0" 200 2803

まったく 別の サーバー(クライアント)から 行って 見よう、今度は b_test である、これを まったく 別の ネットワークから 試みます pc2 での お仕事 です まず 内容は

# cat b_test 
#!/usr/bin/expect --
set timeout 10  

spawn telnet nyanta.no-ip.info 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n" 
expect "*200 OK*"
send "quit\r\n"

ほなら 実行してみましょう

# ./b_test 
spawn telnet nyanta.no-ip.info 80
Trying 218.221.17.88...
Connected to nyanta.no-ip.info.
Escape character is '^]'.
GET /index.html /HTTP/1.0 

HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:51:29 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Sun, 08 May 2005 12:45:02 GMT
ETag: "1be85-af5-a9a5b780"
Accept-Ranges: bytes
Content-Length: 2805
Connection: close
Content-Type: text/html; charset=euc-jp
# 

上記の 内容は 省略してあります ポイントは アクセス してるかどうか と いうことです ここで アクセスされた側 pc1 の log を 見てみると

# cat access_log 
60.42.244.129 - - [08/May/2005:21:51:29 +0900] "GET /index.html /HTTP/1.0" 200 2805

ほたら cron で 何分か毎に こちらに アクセスさせてみよう log に 余分なものが 残るが 仕方がない 良ければ 1時間毎でも よいであろう、 へたら cron て 何処に あるの

# find / -name cron*
/var/log/cron
/var/spool/cron
/var/spool/cron/crontabs
/usr/man/man1/crontab.1.gz
/usr/man/man8/crond.8.gz
/usr/sbin/crond
/usr/bin/crontab

ほんでもって 移動して 中身を みてみよう

# cd /var/spool/cron/crontabs/   
# sed -e '/^#/d' root 
0 6 * * *       /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a
# sed -e '/^#/d' nobody 
40 04 * * *       updatedb 1> /dev/null 2> /dev/null

編集してみよう

# crontab -e
# diff -s org_root root 
13a14
> 0-59/5 * * * * ./try_cron1 
lx:/var/spool/cron/crontabs# ls -l
total 20
-rw-r--r--    1 root     root            5 May  8 16:58 cron.update
-rw-------    1 root     root          105 Mar  3  1998 nobody
-rw-------    1 root     root          786 May  8 16:38 org_root
-rw-------    1 root     root          814 May  8 16:58 root
-rwx------    1 root     root          224 May  8 16:54 try_cron1*
lx:/var/spool/cron/crontabs# ls -l  
total 16
-rw-------    1 root     root          105 Mar  3  1998 nobody
-rw-------    1 root     root          786 May  8 16:38 org_root
-rw-------    1 root     root          814 May  8 16:58 root
-rwx------    1 root     root          224 May  8 16:54 try_cron1*
~~~~~~~~~~~~~

No execute あきまへん 所謂 パスが 無いようです

# mkdir cron_dir
# cd cron_dir/
# pwd
/etc/cron_dir
# mv /var/spool/cron/crontabs/try_cron1 .
# pwd
/var/spool/cron/crontabs
# crontab -e

# diff -s org_root root 
13a14
> 0-59/5 * * * * /etc/cron_dir/try_cron1 

要するに 何処か この場合 /etc/cron_dir に 実行する expect の プログラ ムを 置いて それに 合うように root の cron を crontab -e で 修正したの です、これは pc1 と 同じ ネットワークの 機器での 処理です これで pc1 の log を 見てみましょう

# cat access_log 
192.168.0.5 [08/May/2005:21:50:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:21:55:05 +0900] "GET /index.html /HTTP/1.0" 200 2805

これで 一応基本完了してると 考えようそこで 遠隔の pc2 の サーバーに 設置する ことに しよう その前に プログラムの 書きなおしを しておく

# cat try_cron1 
#!/usr/bin/expect --
set timeout 10  
spawn telnet 192.168.0.8 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n" 
expect "*200 OK*"
send "quit\r\n"
# cp try_cron1 esapcron  
# vi esapcron
# cat esapcron 
#!/usr/bin/expect --
set timeout 10  
spawn telnet nyanta.no-ip.info 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n" 
expect "*200 OK*"
send "quit\r\n"

pc2 に もって 行こう

# ls -l esapcron 
-rwx------    1 root     root          224 May  8 18:01 esapcron*
# chmod 775 esapcron 
# chown mm esapcron 
# chgrp users esapcron 
# ls -l esapcron 
-rwxrwxr-x    1 mm       users         224 May  8 18:01 esapcron*
# mv esapcron /home/mm
# pwd
/etc/cron_dir
# exit
logout

$ pwd
/home/mm

$ ls -l esapcron 
-rwxrwxr-x    1 mm       users         224  5月  8日  18:01 esapcron*

プログラムを送信

$ scp esapcron 60.42.244.129:/home/mm
Password: 
esapcron 
esapcron
                  100%  224    26.4KB/s   00:00  
$

相手に乗り込もう と いいたいが cron を 停止させておこう、でないと log が わかりにくくなる

$ su -
Password: 
# cd /var/spool/cron/crontabs/
# cp root 01_root_test_apache 
# cp org_root root 
# sed -e '/^#/d' root 
0 6 * * *       /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a

元に 戻しておいて 相手に pc2 へ乗り込もう

# cd
lx:~# exit
# exit
logout
念の為 pc1 の log を 覗いてみよう
$ date
2005年 5月 8日 (日) 22:11:12 JST
/*    相手の機器の index.html  内容 5分毎に 要求している  */
# cat access_log 
192.168.0.5 [08/May/2005:21:50:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:21:55:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:00:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:05:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:10:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:15:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:20:06 +0900] "GET /index.html /HTTP/1.0" 200 2805

ほたら

$ ssh -l mm 60.42.244.129
Password: 
$ su -
Password: 
# ls -l  /home/mm/ | grep esapc
-rwxr-xr-x    1 mm       users         224 May  8 18:05 esapcron*

転送されている まず cron に 登録しよう

nyan:/etc# mkdir cron_dir
nyan:/etc# cd cron_dir/
nyan:/etc/cron_dir# mv /home/mm/esapcron .
nyan:/etc/cron_dir# ls -l esapcron 
-rwxr-xr-x    1 mm       users         224 May  8 18:05 esapcron*
nyan:/etc/cron_dir# chown root.root esapcron 
nyan:/etc/cron_dir# chmod 700 esapcron 
nyan:/etc/cron_dir# ls -l esapcron 
-rwx------    1 root     root          224 May  8 18:05 esapcron*
nyan:/etc/cron_dir# cd /var/spool/cron/crontabs/
nyan:/var/spool/cron/crontabs# ls -l
total 8
-rw-------    1 root     root          105 Mar  3  1998 nobody
-rw-------    1 root     root          786 Oct  5  2000 root
nyan:/var/spool/cron/crontabs# cp root org_root 
nyan:/var/spool/cron/crontabs# vi root 
nyan:/var/spool/cron/crontabs# diff -s root org_root 
14,15d13
< 0-59/5 * * * * /etc/cron_dir/esapcron
< 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nyan:/var/spool/cron/crontabs# date
Sun May  8 21:48:43 JST 2005
~~~~~~~~~~~~~~~~~~~~~

5分間間って見よう駄目みたいである なんで? この log は 当然 pc1 の log ですよ

# date
Sun May  8 21:51:05 JST 2005
# cat access_log 
60.42.244.129[08/May/2005:22:00:01 +0900] "GET /index.html /HTTP/1.0"200 2805

来た 来た来た だいぶ 時間差があるようだ 後は 1時間毎に 設定を 換えて みよう、以下は 抜粋です

60.42.244.129 [08/May/2005:22:00:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:05:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:10:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:15:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:20:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:25:02 +0900] "GET /index.html /HTTP/1.0" 200 2805

では再度 pc1 に 移動して

$ ssh -l mm 60.42.244.129
Password: 
mm@nyan:~$ su -
Password: 
nyan:~# cd /var/spool/cron/crontabs/
nyan:/var/spool/cron/crontabs# 
nyan:/var/spool/cron/crontabs# cp root 001_root_e5min_http 
nyan:/var/spool/cron/crontabs# vi root 
nyan:/var/spool/cron/crontabs# sed -e '/^#/d' root 
0 6 * * *       /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a
0 * * * * /etc/cron_dir/esapcron
nyan:/var/spool/cron/crontabs# diff -s org_root root 
13a14,15
> 0 * * * * /etc/cron_dir/esapcron
> 
nyan:/var/spool/cron/crontabs# date
Sun May  8 22:39:18 JST 2005
nyan:/var/spool/cron/crontabs# cd
nyan:~# exit 
logout
mm@nyan:~$ exit
logout
Connection to 60.42.244.129 closed.
mm@lx:~$ 

これで 1時間毎に なるはず 23時の log にて 確認してみよう後は 待つだけ

# sed -e '/60.42.244.129/d' access_log 
# sed -n -e '/60.42.244.129/p' access_log >qq
# diff -s access_log qq
Files access_log and qq are identical
# sed -e '/60.42.244.129/d' access_log >ss

log の整理をして 後はひたすら 待って 確認する

# cat access_log 
60.42.244.129 [08/May/2005:22:45:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:50:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:23:00:01 +0900] "GET /index.html /HTTP/1.0" 200 2805

5分毎が 終わったようだ これで 遠隔の ip address が 換えられても 捜さなくても 良くなった (一々 三千里 の 旅をしなくても 済む )ちゃんちゃん

上に

にゃんたろう 拝!
2005年 5月10日 (火) 22:52:32 JST 作成


server install & setup ver.2 に戻る

Copyright © 2004.-2007. nyantarou All Rights Reserved.