LAN上にDHCPサーバが複数出現してしまった。さてどうする?
私がずいぶんお世話になっている取引先から問い合わせがありました。 「藤岡さん、以前にも相談したことあるんですが、LANと全然違うIPアドレスが勝手に振られることがあるんですよ。192.168.10.xが勝手に振られてしまってインターネットに繋がりません。」
この取引先のLANは私が整備しているので大体のことはわかっています。 ははーん、さてはDHCPサーバが複数あるんだなということまではすぐにピンときました。 元々はDHCPサーバは私が設置したブロードバンドルーターです。 おそらく、何か別のDHCPサーバを割りこませたんじゃないかなと思いました。
まず、DHCPサーバのIPアドレスを調べます。 Windowsだったら、コマンドプロンプトを開き、ipconfig /allと打てばわかります。
DHCPサーバからIPアドレスをもらって振っているのがわかりました。DHCPサーバのIPアドレスがわかったので、そのmacアドレスを調べます。macアドレスはEtherカード特有のアドレスです。詳しくは自分で調べてね。Windowsだったらarp -aを叩くと通信しているIPアドレスとmacアドレスの対応表が出てきます。
このmacアドレスの製造メーカーを引きます。macアドレス ベンダーなどでググってください。
上のmacアドレスはVMWare上のものなので、VMWareが出てくるのですが、実際のトラブルでは以下のようにFONが出てきました。
さて、ここまで来たらこっちのものです。NICのメーカーのものが出てくるとパソコンが犯人なのでやりにくいのですが、それ以外が出てくると犯人探しがしやすいです。 問い合わせてきたお客さんに電話をしました。 「社内のLANにFONを入れてないですか?」 「あー、ある!」 「じゃ、そのケーブル、抜いてみてもらえますか?」 この間、DHCPサーバに向かってpingを打ち続けます。 ・・・・・・・ そして、pingの反応がなくなりました。 「原因はこれですね。今度行ったときにLANを整備しましょう。」
というわけで無事解決しました。
- 実際は私はリモートにいるので、まず、お客さんにWindowsマシンのコマンドプロンプトを開いてもらい、DHCPサーバのIPアドレスを教えてもらいました。
- お客さんのLANにVPNで入り、Linuxサーバにログインし、間違って振られたIPアドレスと同じサブネットのIPアドレスを名乗ります。(そうしないとpingがルータ越えをしようとするので。)この時、自分が接続しているIPを切るわけには行かないので、IPエイリアスを使います。debian系だと、/etc/network/interfacesにeth0:0の項目を追加して、ifup eth0:0 を実行すると楽です。以下の様な感じ。
- その後、pingを打ち続けました。
iface eth0:0 inet static address 192.168.10.120 netmask 255.255.255.0 network 192.168.10.0 broadcast 192.0.10.0
餃子を食いながらビールを飲む会をやります
餃子と言えば宇都宮が有名ですが、 福島市でもかなり餃子が食されておりまして、 餃子を出すお店がかなり多いです。 仙台にいるときにid:monyakataさんに言っていたのですが、 今週の金曜日(10/24)に福島に来て、餃子を食いながら ビールを飲む会を開催することになりました。 18:30から開催です。
せっかくなので、参加者募集です。 参加したい人は @xibbar にでもmentionを送るなり、 Facebookでの友達はメッセージ送るなりしてください。
福島市ではとりわけ満腹が発祥の円盤餃子が有名なのですが、 私の気に入っている店は円盤餃子じゃないです。 円盤だからビールがうまくなるわけじゃないので。^^; 安くてうまいので店名は書きません。
ビールを飲みながらITの話なり、 それ以外の話をしたりしてクダをまきましょう。
逆ポーランド法(RPN)電卓が好きすぎて、iOSアプリを作ってしまった
RPN電卓が好きだー!
おそらく、id:masanobuimaiさんのIntelliJが好きだー!ぐらいに 私はRPN電卓が好きなんです。 Macの電卓も
この状態ですし、iOSの電卓も https://itunes.apple.com/jp/app/active-rpn-calculator/id317847341?mt=8&uo=4&at=10l8JW&ct=hatenablog これが愛用でした。
逆ポーランド法電卓とはなんぞや?
メリットから説明する逆ポーランド法講座です。
(1+2)x(3+4)
ふつうの電卓を使っているみなさんはこれをどうやって計算しますか?
1+2=
をM+して、
3+4=
した後に
x MR =
ですね。(挙動は電卓によりますが。)
さて、RPN電卓だとこうなります。
1 Enter 2+ 3 Enter 4+ x
動画で撮ってみました。
スタックに入れた値に対して、計算しているのがわかります。 使えりゃいいんだから表記なんてどうでもいいと私は思っているのですが、RPNの表記としては、
1 2 + 3 4 + x
と表記します。知らなくても電卓使えるので私はどうでもいいのですが、特長としてはカッコは要りません。おそらく、どんな計算でもカッコは不要です。
((1x2)+(3x4))x((5x6)+(7x8))
このような計算は、RPN的には
1 2 x 3 4x + 5 6 x 7 8 x + x
こんな感じです。電卓的には値をスタックに押しこむにはEnterが必要なので、
1 Enter 2 x 3 Enter 4x + 5 Enter 6 x 7 Enter 8 x + x
となります。
RPN電卓のメリットはスタックを使えることです。 慣れると普通の電卓に戻れなくなってしまいました。
Active RPNが使えなくなってしまった
私はiPhoneでは以下のActive RPNを長い間愛用していました。
https://itunes.apple.com/jp/app/active-rpn-calculator/id317847341?mt=8&uo=4&at=10l8JW&ct=hatenablog
しかし、Active RPNは2009年に開発がとまってしまい、iPhone5からはなんだかギザギザ画像でした。それでも愛用していたのですが、iOS6からはテザリングすると、一切の操作を受け付けないという何かのバグに引っかかってしまい、なんとも使い物にならなくなってしまいました。他のを使えばいいじゃない?と思うかもしれませんが、RPN電卓の定番はHPの12Cなのですが、見ての通りのデザインです。
不満は2つ。- キーが小さくて使いづらい(多機能のトレードオフですが)
- スタックが見えない(最低3つぐらいを表示して欲しい)
です。私はそんなに変な計算は多くないので、シンプルなもので十分なのです。必要な条件としては、
たったこれだけなのですが、満足するものがありませんでした。探せばあるかもしれませんが、面倒くさくなってました。
作ってみた
そういうわけでカッときて勉強がてら作ったのが
https://itunes.apple.com/jp/app/xrpn/id918330293?mt=8&uo=4&at=10l8JW&ct=hatenablog
これです。(バグがあります。起動していきなりEnterで落ちますwww) でも、私は自分で使いやすいRPN電卓を手に入れたのでした。 通常の卓上電卓でも、HP以外にCASIOとかCANONとか作ってくれないかなと思うのでした。
中国フィルターを作った
自社の問い合わせに中国からスパムが来る。 先月辺りからRailsアプリに
require 'ipaddr' class ApplicationController < ActionController::Base protect_from_forgery before_filter :china_filter private def china_filter begin if IPAddr.new("175.42.0.0/15").include?(request.remote_ip) || IPAddr.new("175.44.0.0/16").include?(request.remote_ip) || IPAddr.new("36.248.0.0/14").include?(request.remote_ip) || IPAddr.new("112.111.0.0/16").include?(request.remote_ip) render :text=>"" return end rescue => e logger.info e.message logger.info request.remote_ip.inspect end end end
とかやっていたのですが、敵もさるもので、どんどんIPを変更して スパムを送ってきます。イタチごっこも疲れてきたので、 iptablesで中国を丸ごとフィルタにかけることにしました。
まず、IPdeny IP country CIDR blocksからリストをとってきます。
wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
を実行すればOKです。 んで、
#!/usr/bin/env ruby open("cn.zone","r").readlines.each do |l| l.strip! system("iptables -A INPUT -i eth0 -s #{l} -j LOG --log-prefix '[CN FILTER]'") system("iptables -A INPUT -i eth0 -s #{l} -j DROP") end
でいいでしょう。1行目はロギングのためのものです。 iptables -L -n |lv とかで確認して下さい。 大丈夫そうなら、iptables-saveで保存して(ubuntuの場合)、再起動した時も読み込まれるようにします。 4600行ぐらいのボリュームなので、これをRailsでやったら酷いことになるとおもって iptablesでフィルタすることにしました。
結果はこれからです。どうなるやら。
追記
とりあえずはうまくはじけているようです。中国からのアクセスを拒否しているログが残っています。 プロキシ使われたらアウトなんですよね。それが問題ですが、とりあえずいいでしょう。