« 2006年02月 | メイン | 2006年05月 »
2006年03月28日
Win でコマンドラインで dial up
[ カテゴリ : memo - CUI環境 ]
rasdial /?
すれば使用法が解る。エントリ名ってのはネットワークとダイヤルアップ接続の中のアイコン名。
2006年03月07日
PPP over SSH で複数アカウント
[ カテゴリ : memo - VPN over SSH ]
http://om.pizzica.to/archives/2006/02/vpn_over_sshvin.htmlで書いた奴のさらなる続き。
複数アカウントっつーか、1つのサーバSに、複数のクライアントC1,C2 がアクセスし、C1,C2 同士が通信できる状態にする方法。
1.
今までは、http://www.kmc.gr.jp/proj/vpn/server-setting.htmlのログインスクリプトでclient-IPアドレスを指定していたが、ここを空欄にする& auth 有効にする。
もぐら謹製は
/usr/bin/sudo /usr/sbin/pppd local proxyarp nocrtscts server-IP:client-IP nodetach ms-dns dns-IP noauth
であるが、うちの場合仮に Linux ppp サーバが 192.168.10.1 でクライアントが 192.168.10.2-4 とすると
/usr/bin/sudo /usr/sbin/pppd local proxyarp nocrtscts 192.168.10.1: nodetach ms-dns auth
とかいうことになる。
2./etc/ppp/pap-secret に複数のアカウントと IP アドレスを書く。
(chap-secret でもいいんだろうが、ssh 通してるからどっちでもいいだろ)
書き方は
account1 * "password1" 192.168.10.2
account2 * "password2" 192.168.10.3
account3 * "password3" 192.168.10.4
とかになる。(これを使ってもらうために"auth" が1で必要。)
このアカウントとパスワードは Windows のダイアルアップ接続のユーザー名・パスワードになる。
つまり、ユーザー名ごとに割り当て IPアドレスは固定される(自分はそのほうが都合がいいのでそうしてる。)。
あとは、アカウントとパスワード使って繋ぐだけ。
2カ所から繋ぐと、それぞれの クライアント側で適当な Netmask 指定で routing 情報が入ってる状態になってる。
コマンドプロンプトで route PRINT 192* とかやれば、192.168.0.0/16 あたりへの Gateway が設定されてるはず。
で、ping でもなんでも、192.168.10.2 と 192.168.10.3 の間で通ってればよし。
要するに、複数箇所から同じネットワーク(この場合192.168.0.0/16) に ppp でつなげるってことだ。
---
(加筆2006/3/8)
なお、IPアドレスを動的に割り当てたい(固定したくない)場合は、pap-secret の書き方を
account4 * "password4" 192.168.1.240/28+
とかやると、240-255 の範囲で動的に割り当てられるようだ。
2006年03月06日
perl で Use of uninitialized value in pattern match
[ カテゴリ : google 迎撃テスト ]
久々 google 迎撃テスト。
perl で Use of uninitialized value な warning が出るのをどうにかしたい人が世に多いと見た。
加筆:
"Use of uninitialized value in pattern match" は「初期化されていない値がパターンマッチで使用されました」という警告です。他に置換や print でも出ます。(エラーメッセージ等は下のほうの例参照)
安直な回避方法としては、-w オプションをとっぱらって警告を出ないようにする。
まっとうな回避方法は、if で分岐して、未定義値じゃないときだけprintなりパターンマッチなりするようにする、です。
以下は旧コンテンツ。スクリプトの例と、どうだどエラーが出ないかの例。
加筆終わり:
で、以下のようなサンプルスクリプトを走らせてみる。
#!/usr/bin/perl -w
print $x;
print "1\n" if $x =~ /^$/;
$x =~ s/1/2/;
とかいうスクリプトを実行するとずらずら警告が出る。
Use of uninitialized value in print at ./x.pl line 2.
Use of uninitialized value in pattern match (m//) at ./x.pl line 3.
1
Use of uninitialized value in substitution (s///) at ./x.pl line 4.
ここで、3行目は警告は出るけど、パターンマッチでは該当している。
つまり、ぶっちゃけ警告されても動作は期待通りなのが普通なんだが、
cgi なんかでこの警告出ると apache のログがうるさくてしょうがない。
消し方1:
1行目の -w をなくすと warning が出なくなる。他の warning も出なくなるけど。
消し方2:
自分がスクリプト本体をそれなりに書き換えていいなら warning が出ないように厳密な分岐をする。
たとえば下記だと出ない。(下記のように if の条件式で uninitialized value を使っても怒られない)
#!/usr/bin/perl -w
if ($x) {
print $x;
print "1\n" if $x =~ /^$/;
$x =~ s/1/2/;
}
else {
print "1\n";
}
ちなみに if ( defined $x ) とかのほうが厳密で正しいですw