■ IPマスカレーディングの接続の制限時間 ssh などで接続を行い, しばらく何もしないでいると, 次に何らかの操作を行った場合に接続が突然切れてしまう場合が ある. これは, IPmasqurade ルータ側の設定で, TCP 接続に関してはアイドル状態(無通信状態)が 15 分続くと 接続を切断するようになっているからである. デフォルトの設定では, TCP … 15分 TCP_FIN … 2分 UDP … 5分 となっている. ・ 参考コマンド, ファイル コマンド … ipchains , ipfwadm , ipfw (ipchains と ipfwadm はほとんど同効果のコマンド. ただし, ipchains の方が新しい. ipfwadm は古いために, ちゃんと日本語マニュアルが あったりする.) ファイル … /usr/src/linux/include/net/ip_masq.h ・ 「TCP_FIN」とは? TCP, UDP パケットはいうまでもなくそのまま プロトコルの名前である. で, 「TCP_FIN」とは, TCP プロトコルを切断する際に 送信するプロトコルの名前である. 具体的には, HTTPやSSHなどの TCP 接続終了時に クライアント側は TCP_FINパケットをサーバ側に送信し, 接続を終了することを通知する. サーバ側はこれを受け取り, 接続が終了したことを認知, ソケットをクローズする. ◇ 参考ホームページ ・ Linux V2.2 カーネル内部解析報告 第3版 http://www03.u-page.so-net.ne.jp/da2/h-takaha/internal/index.html - ネットワーク > TCPプロトコルスタック > コネクションの切断 http://www03.u-page.so-net.ne.jp/da2/h-takaha/internal/node289.html ・ 68user's page http://x68000.startshop.co.jp/~68user/ (上記の内容とはあまり関係ないが, UNIX や Perl や CGI に関していろいろ詳しい) □ 設定値の変更 ssh 接続に関して 15 分では使いにくいので, その設定を変更する. 例えば, TCPの制限時間を 6時間 (21600) に変更し, TCP_FIN , UDP の制限時間は変更しない場合は # /sbin/ipchains -M -S 21600 0 0 とする. (「0」にすると, 既存の設定をそのまま残す.) これで, 6時間未満ならアイドル状態になっていても接続が途切れない. □ この設定をシステムのデフォルトにする. /etc/network/interfaces に以下の一行を書き込む. --ここから下-- up ipchains -M -S 21600 0 0 --ここから上-- IPmasqurade をやっているコンピュータなら, 他にも 「up ipchains 〜」という行があるはずなので, これと一緒のところに書き込んでおくと良い. □ 参考ホームページ Linux JF (Japanese FAQ) Project http://www.linux.or.jp/JF/JFdocs/IP-Masquerade-HOWTO.txt http://www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-4.html ■ portについて port番号はトランスポート層(第4層)のTCPヘッダ (UDPを使用する場合はUDPヘッダ)に書き込まれる番号で 送信元port番号(source number)と宛先port番号(destination number) が書き込まれている. このport番号によってどのアプリケーションへの要求を出しているのかを 判断することができる 例えば,joho3からブラウザでwwwサーバへHTMLなどのデータを要求する 場合,joho3からのport番号は 送信元port番号は 1083 (大抵は1000前後のようだがよくわからない) 宛先port番号は 80(これはhttpに割り当てられているport番号) wwwサーバはこの要求を受け,データを返すが,この際のport番号は 送信元port番号は 80 宛先port番号は 1083(これはjoho3からの送信元port番号) この様にport番号によってどのアプリケーションへどこから要求を 行ったのかを判別できる. ■ IPマスカレードでのportの変換について IPマスカレードでは中継するルータでport番号を変換 joho01(内部ネットワークのマシンのport番号) から mail(133.87.45.71)へsshを行う場合 送信元port番号 1300 (動的に割り振られているが範囲は不明) 宛先port番号 22 IPマスカレードルータで送信元port番号を変換する (この際にどのport番号をどのport番号に変換したのかをルータは記憶しておく) 送信元port番号 1300を 61000 へ変換して宛先に送信 (だいたい60000以上を使用するらしいが詳細は不明) sshのサーバはこの要求を受け,データを返すが,この際のport番号は 送信元port番号は 22 宛先port番号は 61000(これはルータからの送信元port番号) IPマスカレードルータで宛先port番号を変換する (送信の際にどのport番号をどのport番号に変換したのかをルータは記憶して いたので,このサーバからの返信がどの内部ネットワーク内のマシンから 来たものかがわかる) 宛先port番号 61000を 1300 へ変換して始めに要求を出したマシンに送信 ■ IPマスカレードの制御について   $ man 8 ipfwadm を参照すること ■ man ついて(余談)   ・Windowsで使用した際の文字化けを防ぐ方法 英語しかないマニュアルはWindowsから見ると変に文字化けする. この文字化けを防ぐためには以下のように「-7」オプションを つけると良い. ただし,日本語が用意されているマニュアルではこのオプションを つけると 逆に文字化けするので注意 $ man -7 cd ・セクション番号の選択 man でマニュアルを表示すると netstat(8) や ipfwadm(8) などのように後ろに数字がついている. これはセクション番号というらしく $ man 8 ipfwadm などとすることで指定できる