いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.065 / 読者数:840名

こんばんは、うすだです。

昨日、住んでいるマンションで、避難訓練がありました。
警報とともに階段で下まで降りたり、 粉末の薬剤の代わりに水を使用した消火器で試し打ちをしたりしました。

こういうのって、ついつい面倒くさいと思いがちですが、 参加してみると意外と興味深かったりします。今回も、いい(?)経験ができました。

しかし、20世紀末頃に似たような訓練を受けたはずなのに、 これっぽっちも覚えていませんでした。人間の記憶はあまりあてになりません。

何事も、大事なことは定期的にリマインドしないといけないなあ、 なんて思いました。

当たり前のことを言ったところで、今週もはりきってまいりましょう!

今週のお題 - お試しネットワーク環境を作る

システム管理者であれ開発者であれ、 はたまたカスタマサポートなどしている方々であれ、 ちょっとしたお試し環境的クローズドなネットワークがあると、 なにかと便利ですよね。

今や、ネットワークインタフェースも HUB もイーサネットケーブルも、 十数年前と比べると、ありえないくらい安くなりました。 数千円もあればちょちょいと一式が揃ってしまいますね。いい世の中になりました…。

しかし、そのネットワークが、社内 LAN から切り離された、 鉄壁完全なクローズド状態ですと、それはそれで不便です。
社内 LAN からは見えないけれど、社内 LAN へのアクセスはできる、 そのような都合のいいネットワークがあれば、なお便利ではないでしょうか。

というわけで今週は、そんなお試しネットワーク環境を、構築してみたいと思います。


…なんて、だいそれたことを書いてしまいましたが、IP マスカレードを利用すれば、 簡単に実現できます。

ああやっぱりとか、なーんだと思われた貴兄は、宿題まですっ飛んでってください。 (宿題の答えはがんばりましたので、できれば見てください。)

で、今回は、以下のような環境を想定して、話を進めます。
(等幅フォントでご覧ください。)

         社内 LAN                                  お試し LAN
  +------------------+-+                    +-+------------------+
     192.168.1.0/24  |                        |   172.16.0.0/16
                     +-----[Linux マシン]-----+
          192.168.1.55(eth0)            172.16.1.55(eth1)

  <------------------------------------><------------------------>
                既存の部分                  新たに構築する部分

192.168.1.0/24 というネットワークアドレスの社内 LAN があり、 そこに Linux マシンがつながっている、とします。
(このマシンは、あなたが自由気ままにいじくれるマシンです。\(^ε^)/)

今日は、その Linux マシンにネットワークインタフェースを増設して、 お試しネットワーク環境(お試し LAN)を作りたいと思います。
お試し LAN のネットワークアドレスは、172.16.0.0/16 としましょう。

ネットワークインタフェースはなんでもいいですが、 USB など気軽に増設できるものがあると、他の用途にも使い回せるので、 便利だと思います。

まあとにかく、ぷすっと増設して、eth1 で認識されたら、 172.16.1.55 というアドレスを割り振って、使えるようにします。
とりあえずその場でちょこっと確認したいだけなら、 ifconfig コマンドを実行して設定してください。

  # ifconfig eth1 172.16.1.55 up

…というところで、ようやく出発点にたどり着きました。


はい、では、設定方法を淡々とご紹介します。

まず、sysctl コマンドを使って、IP フォワーディングを有効にします。
(でないと、パケットがネットワーク間を行き来しません。)

  # sysctl -w net.ipv4.ip_forward=1
  net.ipv4.ip_forward = 1

恒久的に設定したい場合は、/etc/sysctl.conf に以下を追加しますと、 次回の起動から勝手に設定してくれるようになります。
(net.ipv4.ip_forward = 0 という行があれば、書き換えましょう。)

  net.ipv4.ip_forward = 1

次に、iptables コマンドを使って、IP マスカレードの設定を行います。
以下を実行してみてください。

  # iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE

送信元が 172.16.0.0/16 で、外へ出ていくパケットを、IP マスカレードで処理する、 という設定を追加しています。

基本的には、これで設定は完了です。
では、お試し LAN に、適当なマシンを接続して、試してみましょう。
適当なマシンには、172.16.0.0/16 に属する適当なアドレスを割り振ってください。 そして、デフォルトルートには、172.16.1.55 を忘れずに指定してください。
適当マシンが Linux で、その場で刹那的に設定するなら、 以下のように実行します。(以下では、172.16.1.101 を割り振っています。)

  # ifconfig eth0 172.16.1.101 up
  # route add default gw 172.16.1.55

そして、192.168.1.0/24 上のマシンにアクセスします。
うまくつながらない場合は、tcpdump などを使って、パケットが来ているかどうか、 パケットの中身が正しいかどうかを確認してください。
あるいは、 それぞれのマシンの syslog やアプリケーションのログを確認してみてください。
(それでもだめなら、一度ご連絡ください。)

上記の動作確認がうまくいって、この設定を恒久的に残したいなら、 以下を実行しましょう。

  # /etc/init.d/iptables save

今の設定が、 そっくりそのまま /etc/sysconfig/iptables というファイルに記録されます。 そして、次回起動時には、このファイルの設定を戻してくれます。おー便利!


以上、IP マスカレードでお試しネットワーク環境を作る方法を、 ご紹介しました。

IP マスカレードでは、経路制御などで悩む必要がないので、気軽に接続できます。 ニーズがなくても、お暇でしたら、是非やってみてください。
ネットワークをつなぐ喜びを、感じることができる…と思います。
(わたしはそうでした。暇さえあれば、いろんなネットワークをつなぎ、 喜んでいた時期がありました。みなさまもそうなりますように…。)

上記の通りにやって、一発で動いてしまいますと、それで終ってしまうのですが、 打ち間違えたりなどしますと、いろいろ悩むことができます。
そんなときのために、少々補足させていただきます。

今の状態を知りたいときは、iptables コマンドを -L オプションつきで実行します。

  # iptables -t nat -L
  Chain PREROUTING (policy ACCEPT)
  target     prot opt source               destination

  Chain POSTROUTING (policy ACCEPT)
  target     prot opt source               destination
  MASQUERADE  all  --  172.16.0.0/16        anywhere

  Chain OUTPUT (policy ACCEPT)
  target     prot opt source               destination

また、設定をそっくり全部消したい場合は、-F オプションを使います。

  # iptables -t nat -F

他に設定があって、全部消すのはまずいという貴兄は、-D オプションを使って、 条件に合うものだけを消すことができます。

  # iptables -t nat -D POSTROUTING -s 172.16.0.0/16 -j MASQUERADE

これだけ知っていれば、そこそこ試行錯誤できると思います。(^ε^)

宿題の答え

先週の宿題は、

  root のパスワードを入力しなくても、一般ユーザがシステム管理ツール
  を実行できるようにしてみましょう。

でした。

まずは、ありがちな sudo を使う方法ですね。
visudo を実行し、以下のエントリを追加しましょう。

  ALL ALL=(root) NOPASSWD:/usr/sbin/tcpdump

そして、sudo 経由で tcpdump を実行します。

  % sudo /usr/sbin/tcpdump

次にありがちなのが、setuid を用いる方法です。

  # ls -l /usr/sbin/tcpdump
  -rwxr-xr-x  1 root   root   393176 Jun 13  2004 /usr/sbin/tcpdump
  # chmod u+s /usr/sbin/tcpdump
  # ls -l /usr/sbin/tcpdump
  -rwsr-xr-x  1 root   root   393176 Jun 13  2004 /usr/sbin/tcpdump

setuid をつけると、そのコマンドの所有者の権限で、 コマンドを実行することができます。

  % /usr/sbin/tcpdump

…試しおわって、特に必要なければ、以下を実行して元に戻しましょう。

  # chmod u-s /usr/sbin/tcpdump

それから、inetd 経由で起動する、という方法も考えられます。
/etc/inetd.conf に以下を追加して、

  12345  stream  tcp   nowait  root    /usr/sbin/tcpdump tcpdump -l

inetd に通知します。

  # kill -HUP `cat /var/run/inetd.pid`

そして、localhost に接続します。

  % telnet localhost 12345

うっかり eth0 経由でつなぎにいくと、自身のパケットをキャプチャしてしまい、 怒涛のごとく出力される恐怖に苛まれます。ご注意ください。

あ、xinetd の場合は、/etc/services に以下を登録してから、

  tcpdump     12345/tcp

以下の内容の /etc/xinetd.d/tcpdump というファイルを作成し、

  # default: off
  # description: tcpdump
  service tcpdump
  {
      disable = yes
      socket_type = stream
      wait = no
      user = root
      server = /usr/sbin/tcpdump
      server_args = -l
  }

chkconfig コマンドで有効にする必要があります。

  # chkconfig tcpdump on

あと、ちょっと邪道ですが、consolehelper でも、 パスワードなしで起動することができます。
たとえば、VineLinux 3.2 で、/etc/pam.d/tcpdump が以下の内容だったとします。

  #%PAM-1.0
  auth       sufficient   pam_rootok.so
  auth       sufficient   pam_timestamp.so
  auth       required     pam_stack.so service=system-auth
  session    required     pam_permit.so
  session    optional     pam_xauth.so
  session    optional     pam_timestamp.so
  account    required     pam_permit.so

この場合、4行目の auth required のところを、

  auth       required     pam_permit.so

などパスワード不要のモノに差し替えれば、聞かれなくなります。
(すみませんが、他のディストリビューションでは試していません。)

…わたしが思いついたのは、以上です。
他に、もっと面白い裏技があったら、ぜひ教えてください! (^ε^)

今週の宿題

今週の宿題は、

  IP マスカレードを使用したときの、お試し LAN 上のパケットと、社内
  LAN 上のパケットを、見比べてみましょう。

です。

書籍などを斜め読めば、IP マスカレードの仕組みはなんとなくわかると思いますが、 tcpdump などを用いて、実際に確かめてみましょう、ということです。
(百聞は一見にしかず、ってことですね。)

あとがき

で、消火器のことをいろいろ教えてもらいましたので、ご紹介します。

  • ホースの先端を持ち、安全栓を引っ張り抜き、レバーを握ると使える。
    規格で決まっているので、この操作でどれでも使えるそうです。
    ホースの先端を持った方がいいのは、勢いでぶれるのを防ぐためです。
  • 3〜6メートルくらい離れたところで、避難路を背にして使う。
    避難路を背にするのは、すぐ逃げられるようにするためですね。 当たり前っぽいですが、焦っているときにはうっかりやってしまいそうです。
  • レバーは一度握ると、中の薬剤がなくなるまで、勝手に出続ける。
    レバーを握ると、ガスを格納している容器が破れ、消火器の中にガスが充満して、 薬剤がどばっと出る仕組みになっているからです。ちなみに15秒くらい出続けます。
  • 腐食している消化器は使わない方がいい。
    ガスの圧力に消火器が耐え切れず、爆発することがあるそうです。
  • 使用後の掃除はけっこう大変らしい。
    液体じゃなく粉末なので、掃除機で吸えます。ただ、粒子が細かいですので、 じゅうたんの場合、そうとう叩かないと取れないそうです。
    まあ、後処理のことまでは考えられてない、ということですね。

最後のは、住人のひとが質問してわかったことです。 まさに、主婦の視点って感じですね。わたしでは、そういう疑問は思いつきません。

消火器を使う機会は、一生に一度あるかないかくらいじゃないか、 という気もしますが、もしものための知識は、必要ではないかと思いました。

さて、来週は三連休。専用サーバへの移行など、 いろいろやるべきことがありますので、個人的な理由で申し訳ありませんが、 来週は、おやすみをいただきたいと思います。

今週も、ここまで読んでいただき、ありがとうございました。
それでは、来々週に、お会いしましょう!

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−いつの間にか検索で1位じゃなくなってるけどまあいいや。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本