2008年6月20日金曜日

LinuxマシンのGRUB MBR復旧にはGRUB CDを

デキの悪いバックアップ ソフトウェアなどにより、MBRの復旧に失敗してリカバリが不完全に終わった場合は、 CDブート可能な GRUB で以下の作業を行うと復旧できる事が多いです。

root (hd0,0)  … (1)
setup (hd0)  … (2)

(1) では、 GRUB のファーストステージ、セカンドステージおよび menu.lst ファイルがあるパーティーションを指定します。 (2) では、 GRUB をインストールするディスク、もしくはパーティーションを指定します。

私は、Red Hat Enterprise Linux 3 までであれば、 GRUB の再インストールはレスキューモードから行っていましたが、 EL4 から udev の採用により "おまじない" が増えて大変になってしまいました。もちろんいざという的にはレスキューディスクを使った復旧作業を行うのですが、考えることが増えるため、最近は素直に CD ブート可能な GRUB を利用しています。この方法であれば有る程度作業内容を簡略化できますので、他のエンジニアやオペレータへの引き継ぎも比較的容易となります。


ループバップアダプタとSSHポート転送で透過のような通信を確保する

SSHのポートフォワーディングを利用すると、直接経路がないホストのポートまでも、手軽に TCP 経路を確保できます。他ネットワークのゲートウェイまで SSH を接続し、ポートフォワーディングを利用してプライベートなサービスへのアクセスを確保する方法は、皆さんもよく利用されているのではないでしょうか。


例:手元のホストから辿りつけないホストのIPアドレス


192.168.30.1 :  destination1
192.168.30.2 :  destination2
192.168.30.3 :  destination3
192.168.30.4 :  destination4


例:destinaion1~4に辿りつける remotehost を経由した SSH ポートフォワーディング


Host remotehost
   LocalForward 11000 destination1:1000
   LocalForward 12000 destination1:2000
   LocalForward 21000 destination2:1000
   LocalForward 22000 destination2:2000
   LocalForward 31000 destination3:1000
   LocalForward 32000 destination3:2000
   LocalForward 41000 destination4:1000
   LocalForward 42000 destination4:2000


しかしこの方法では実際に connect() する際の宛先IPアドレス・ポート番号の両方、もしくは片方がかわってしまい、透過的とはいえません。


SSHで何段もポートフォワーディングしなければたどり着けないホストや、例えば IRC の DCC コネクションなどのように、プロトコル中に IP アドレスが含まれていたり、 Web ページの中にホストの IP アドレスが入るケースでは透過的な通信を確保したいケースもあります。


ここで、手元のホスドのループバックアダプタなどに接続先のホストのアドレスを割り当て、バインド先としてIPアドレスとポートを明示的に指定しポートフォワーディングを行うと、TCPのあらかじめ指定したポートだけでも、まるで透過的なようにアクセスできます。


例:ループバックアダプタと組み合わせて利用する SSH ポートフォワーディングの例(~/.ssh/config ファイルの例)


Host remotehost
   LocalForward 192.168.30.1:1000 destination1:1000
   LocalForward 192.168.30.1:2000 destination1:2000
   LocalForward 192.168.30.2:1000 destination2:1000
   LocalForward 192.168.30.2:2000 destination2:2000
   LocalForward 192.168.30.3:1000 destination3:1000
   LocalForward 192.168.30.3:2000 destination3:2000
   LocalForward 192.168.30.4:1000 destination4:1000
   LocalForward 192.168.30.4:2000 destination4:2000


なお、ループバックアダプタに 192.168.30.0/24 をアサインしている場合、本来 destination1~4 のセグメントにルーティングができるネットワーク上に移動したとすると、このループバックアダプタが邪魔をして通信に支障をきたします。このような場合には、 Windows の場合はアダプタ単位で無効化することで回避でき、具合がいいでしょう。