IPマスカレードの設定



ここでは、ネットワークカードが1枚と2枚との場合についてのIPマスカレードの設定を説明します。

今回の作業で私自身が一番悩んで一番時間を労したところです。ここの部分で悩んでいる方が多いのではないかと思い

なるべく解り易く懇切丁寧に書いたつもりです。また、個人的にはネットワークカード1枚がお勧めします。

2001年8月23日全面改装!!!!!、特にセキュリティー重視となっています。





    ◆IPマスカレード以下の順序で行ってください、

  1. IPアドレスの説明

  2. カーネルの再構築

  3. rc.firewallの作成

  4. liloファイルの追加(NICが2枚のみ)

  5. c.inet1ファイルの追加・修正

  6. IPマスカレードの設定確認

     

  7. IPマスカレードのテスト

    ◆IPアドレスの説明

    IPマスカレード(IP-Masquerade)とは、グローバルIPアドレス(インターネット用のアドレス)とプライベートIPアドレス

    (インターネットに接続できないIPアドレス)の変換を行なう機能の一種です。

    プライベートIPアドレスはローカルネットワークの中で使用する意味のものですから、インターネットでは使用できません

    インターネットにアクセスする場合はグローバルIPアドレスが必要です。IPマスカレードは限られたグローバルIPアドレスを

    複数のコンピュータで共用することで、グローバルIPアドレスの制限を超えてインターネットに接続する方法です。

    1. IPマスカレードが必要な場合

      @グローバルIPアドレスが少ない場合、

      Aローカルネットワークをインターネットに接続したい場合、

      Bローカルネットワークを手間暇かけずに保護したい場合、(セキュリティ)

      CローカルネットワークのIPアドレスを変更しないでドメインサーバを構築したい。

        D外部からのアクセスからローカルネットワークを保護したい、

    2. IPマスカレードを設定しては駄目な場合、

      ◆御使用のルータ等で、IPマスカレードの機能を持っている場合は、そちらを御使用してください。

       

    3. hero−islandの例

      HERO−ISLANDで使用している、プライベートIPアドレス、グローバルIPアドレスは以下の通りです。

      これらのIPアドレスを使用して説明します。 インターネット(JPNICに登録してある)に接続するIPアドレスを設定します。


      グローバルIPアドレスローカルIPアドレス
      IPアドレス123.234.123.45〜123.234.123.60192.168.0.0〜192.168.0.255
      サブマスク255.255.255.240255.255.255.0
      ホスト名youyou-gw
      ドメイン名hero-island.ne.jphero-island.ne.jp

    トップへ戻る



    ◆カーネルの再構築

    カーネルの再構築はネットワークカードが1枚の場合も2枚の場合も共通作業です。

    # cd /usr/src/linux

    そして、

    # make menuconfig

    ネットワークオプションの設定

    Networking options」を選択してください。

    通常の MASQ 機能には不要です。
    Packet socketこれは任意ですが、IP MASQ に纏わるあらゆる問題をデバッグするために TCP DUMP を使えるようにする際に必要な機能です。Yes
    Kernel/User netlink socketれは任意ですが、経路情報等の高度なファイアウォールの問題点の記録を取るのに役立ちます。Yes
    Routing messageこのオプションはパケットファイアウォールの記録を取ることとは無関係です。No
    Netlink device emulationマスカレードに無関係のオプションを飛ばしますNo
    Network firewallsこのオプションは Linux マシンでファイアウォールを構築する際や IP マスカレードを行う際に有効にすべきです. 単に普通のクライアントマシンにするつもりならば no と設定するのが安全でしょう。 Yes
    Socket Filtering大抵の人にとっては, このオプションに no を設定しておくのが安全です. このオプションを使うと, ユーザ空間のフィルタを任意のソケットに接続して, パケットを受け取るか拒否するかを決めることができます. どうしても必要, かつフィルタのようなプログラムを組めないのなら, このオプションには no を設定すべきです。Yes
    Unix domain socketsこれで UNIX TCP/IP ソケット機構を有効にします。No
    TCP/IP networkingTCP/IP プロトコルを有効にします。Yes
    IP: multicastingマルチ・キャストをサポートをするのかの設定でビデオなどのストリーム転送をする場合は[Yes]No
    IP: policy routing (NEW)MASQ では不要ですが、 TCP/IP 発信元アドレスを用いるか、或は TOS (Type-Of-Service) 値を用いるルーティング等の高機能を必要とする人はこのオプションが必要です。これ以降の高機能 MASQ オプションの設定が有効になります。No
    IP: equal cost multipath (NEW)通常の MASQ 機能には不要です。No
    IP: use TOS values as routing key (NEW)通常の MASQ 機能には不要です。No
    IP: verbose route monitoring (NEW)IP アドレスを詐称したパケットを破棄し、ログ記録するルーティングコードを使う際には便利です (強くお薦めします) 。Yes
    IP: large routing tables (NEW)通常の MASQ 機能には不要です。No
    IP: kernel-level configuration support-No
    IP: Firewalling このオプションが必要になるのは, マシンをFirewallとして設定する時や, IP マスカレードを行う時に PPP のダイアルアップインタフェース経由で 何者かがダイアルアップマシンに入ってくるのを防ぎたい時です. Yes
    IP: Firewall packet netlink deviceこれは実に便利なオプションで, ユーザ空間プログラムのパケットの先頭の 128 バイトを解析し, 正当さに基づいてそのパケットを許すか拒否するかを決めるようにできます。Yes
    IP: transparent proxy supportこのオプションは, Linux マシンのFirewallの透過的リダイレクト機能を有効にします. つまり, ローカルネットワークが始点であり, かつ終点がリモートホストであるような任意のネットワークトラフィックが ローカルのサーバ (いわゆる「透過的プロキシサーバ」) にリダイレクトされます. これにより, ローカルのコンピュータにリモート側と通信していると思わせながら, 実際にはローカルのプロキシと接続した状態にします。Yes
    IP: masquerading Linux マシンがFirewallとして動作している場合, そのローカルネットワークのコンピュータのひとつが外部に接続しようとすると, Linux マシンはそのホストの「仮面を被る」ことができます。 つまり, Linux マシンはローカルネットワーク内のマシンが想定している 終点アドレスへトラフィックを転送しますが, このトラフィックがFirewallのマシンから来たように見せかけます。Yes
    IP: ICMP masquerading前のオプションは TCP トラフィックと UDP トラフィックのマスカレーディングしか行いませんが, このオプションは ICMP のマスカレーディングも行うようにします。Yes
    IP: masquerading spcial modules supportこのオプションは、これ以降のオプションで外側のネットワーク上のコンピュータと MASQ された内部ネットワーク上のマシン同士を直接的に接続する TCP/IP ポートフォワーディングを有効にするものです。Yes
    IP: ipautofw masq support(EXPERIMENTAL)IPautofw は ポートフォワーディングの古い方法です。殆どが古いコードで占められ、幾つかの問題点も見つかっております。お薦め*しません*。No
    IP: ipporttfw support(EXPERIMENTAL)外側のネットワーク上のコンピュータと MASQ された内部ネットワーク上のマシン同士を直接的に接続する IPPORTFW を有効にします。大概、この機能は内部の SMTP, TELNET, 及び WWW サーバへのアクセスに用いられます。FTP ポートフォワーディングは追加のパッチが必要です。Yes
    IP: ip fwmark masq support(EXPERIMENTAL)このオプションによって、 IPCHAINS は更なる働きが有効になり、パケットに印を付けられるようになります。IPMASQADMやIPPORFW 等のユーザ空間ツールを用いて、IPCHAINSは自動的にパケットのアドレスを書き換えます。現状では、PORTFW よりはテストされていませんが、信頼できるでしょう。現在、 IPMASQADM 及び IPPORTFW の使用が推奨されています。任意
    IP: optimize as router not hostこれはカーネルをネットワークサブシステムの為に最適化しますが、これによってパフォーマンスに重大な影響を及ぼすとは認められません。Yes
    IP: tunnelingこの任意の選択は IP マスカレードを通じるIPIPトンネルの為にあります。トンネリング/VPN 機能をお望みなら、GRE或はIPSECトンネルの使用をお薦めします。No
    IP: GRE tunnels over IPこの任意の選択は,IP MASQ ボックスを通じるPPTPとGREトンネルを実現させる為にあります。No
    IP: aliasing support一つのネットワークカードに複数のIPアドレスをふる場合は[Yes]任意
    IP: ARP demon support(EXPERIMENTAL)マスカレードに無関係のオプションを飛ばします-
    IP: TCP syncooke support (not enable per default)基本的な TCP/IP ネットワークセキュリティの為に強くお薦めします。Yes
    IP: Reverase ARPマスカレードに無関係のオプションを飛ばします-
    IP: Allow large windows (not recommended if <16Mb of memory)Linux の TCP ウィンドウを最適化する為にお薦めします。 (メモリが 16 MB 未満の場合は勧めません)Yes
    The IPv6 protocol (EXPERIMENTAL)Firewallで必要です。Yes
    IP: IPv6 enable EUI-64 token formatFirewallで必要です。Yes
    IP: IPv6 disable provider based addressesFirewallで必要です。Yes
    The IPX protocolFirewallで必要です。Yes


    #make modules

    #make modules_install

    ここでREBOOTをお勧めします。

トップへ戻る



◆rc.firewallの作成

Linux2.1.x と 2.2.x カーネルでは、IP マスカレーディングの設定には、IPFWADMは前世紀の遺物であることを覚えておいてください。(ディストリビューションには関係ない)
21世紀では、IPCHAINSツールを使います。また、以下の説明は少し難しいかもしれませんが、セュリティ重視の設定とします。 以下に記すように /etc/rc.d/rc.firewallのファイルを作成します。

注意 #1 - 2.2.16以前の Linux カーネルには、 TCP 接続でルート権限 を奪取される危険性があり、更に 2.2.11 以前のものには IPCHAINS の フラグメンテーションに関するバグがあ ります。 このため、強固な IPCHAINS ルールセットを稼働させる際には、攻撃に対して 無防備です。 修正されたバージョンのカーネルを使ってください。

注意 #2 - もし、TCP/IPアドレスが PPP, ADSL, ケーブルモデムなどを 経由して ISP から動的に割り当てられる場合には、この強固なルールセットを 起動時に設定することはでき ません。 このような場合には、IP アドレスが割り当てられる度にこの ファイアウォール・ルールセットを再度読み込ませるか、あるいは /ec/rc.d/rc.firewall ルールセットをもっとインテリ ジェントに作る必要が あります。 PPP ユーザがこのルールセットを適用する場合には、後述する "Dynamic PPP IP fetch" と書かれた部分のコメントを注意深く適切に 外してください。 また、強固なルールセット及び動的に割り当てられる IP アドレスについての もっと詳しい解説は、 TrinityOS - Section 10 にあります。

#!/bin/sh
#
# /etc/rc.d/rc.firewall - やや強固な IPCHAINS ファイアウオール・ルールセット
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 必要なすべての IP マスカレードモジュールをロードする
#
#   注意 - 必要な IP マスカレードモジュールだけをロードします。すべての IP マスカレードモジュールが
#          以下に記述されていますが、ロードされないようにコメントとなっています。

# モジュールを最初にロードする時にまず必要
#
/sbin/depmod -a

# PORT 方式を使ってFTP ファイル転送における適切な IP マスカレードを提供します
#
/sbin/modprobe ip_masq_ftp

# UDP プロトコルを経由した、RealAudio のマスカレードを提供します。このモジュールがなくても
#       RealAudio は TCP モードで動作しますが、音質は低下します。
#
/sbin/modprobe ip_masq_raudio

# IRC DCC ファイル転送のマスカレードを提供します
#
#/sbin/modprobe ip_masq_irc


# 以下の指定によって Quake と QuakeWorld をデフォルトで提供します。このモジュールは Linux
#   の マスカレード・ボックスから内側の複数ユーザが存在する場合のためのものです。
#   もし、Quake I, II, あるいは III を使いたいならば、2番目の例を使ってください。
#
#   注意 - もし、QUAKE モジュールのロード時にエラーが出た場合は、古いバグの
#   ------ あるカーネルが動いています。
#          その場合はより新しいカーネルに置き換えてください。
#
#Quake I / QuakeWorld (ports 26000 and 27000)
#/sbin/modprobe ip_masq_quake
#
#Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960)
#/sbin/modprobe ip_masq_quake 26000,27000,27910,27960


# CuSeeme ビデオ会議ソフトウエアに対するマスカレードを提供
#
#/sbin/modprobe ip_masq_cuseeme

# VDO-Live ビデオ会議ソフトウエアに対するマスカレードを提供
#
#/sbin/modprobe ip_masq_vdolive


#非常に重要 - IP フォワーディングはデフォルトでは無効になっているので、有効にします。
#
#           Redhat ユーザの場合は、/etc/sysconfig/network のオプション指定行を
#
#                       FORWARD_IPV4=false
#                             から
#                       FORWARD_IPV4=true
#           に変更してください。
#
echo "1" > /proc/sys/net/ipv4/ip_forward


#非常に重要 - 2.2.x カーネルでは IP デフラグメンテーションのサポートはデフォルトでは無効です。
#
#           コンパイル時の指定によるものですが、2.2.12 カーネル以降は変更されています。
#           また、ディストリビューションによっては /proc テーブルから
#           このオプションが除外されていることもありますので、その場合は
#           /proc ディレクトリに存在しなければ気にしなくても構いません。
#
echo "1" > /proc/sys/net/ipv4/ip_always_defrag


# 動的に割り当てられる IP アドレスを使用するユーザ向け -
#
#   IP アドレスを SLIP, PPP, DHCP などから動的に取得する場合は、次のオプションを有効にしてください。
#   このオプションは、IP マスカレードで動的 IP アドレスの操作を許可し、Diald や同様なプログラムの
#   使用をより容易にするものです。
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr


# インターネットを必要とする、いくつかのプログラムに対する LooseUDP パッチを有効にする
#
#  IP マスカレードを経由してインターネットゲームを動かそうとしていて、どうしてもそれが動かないという
#  のなら、このオプションを有効にしてみてください(以下の "#" を削除します)。UDP ポートスキャンに
#  対する脆弱性の可能性があるので、このオプションはデフォルトで禁止されています。
#
#echo "1" > /proc/sys/net/ipv4/ip_masq_udp_dloose


# あなたの静的な IP アドレスを以下に指定します
#
#   動的に割り当てられる IP アドレスを使用するなら、新しい IP アドレスが割り当てられるたびに適用
#   するように、ルールセットを書き換えなければなりません。そのためには、、以下のような一行のスクリプトを
#   有効にする必要があります。(スクリプト例内の一重引用符と二重引用符の違いは意味を持ちますので注意)
#
#
#   DHCP を利用する場合 -
#   -----------
#   TCP/IP アドレスを DHCP から取得する場合は、ppp セクションの下にある"#"でコメントアウトされた
#   部分を有効にし、"ppp0" とある部分を、インターネット接続用のインタフェースの名前に置き換えなければ
#   なりません(たとえば、eth0 や eth1 などに)。
#   DHCP は割り当てた IP アドレスを随時変更することに注意してください。この変更を正しく反映させるには
#   DHCP リースが更新されるたびに、DHCP クライアントを再度実行してファイアウオールルールセットを反映
#   させなければなりません。
#
#     注意 1 -   いくつかの DHCP クライアントは古いバージョンの "pump" で(新しいバージョン
#               では問題点は修正されています)、それはリース更新後にスクリプトを実行することが
#               できないものです。その場合は、"dhcpcd" か "dhclient" に置き換えなければ
#               なりません。
#
#     注意 2 -   "dhcpcd" は最近のバージョンでは、コマンド文法が変わっています。
#
#               旧バージョンでの指定方法は、次のようなものでした -
#                         dhcpcd -c /etc/rc.d/rc.firewall eth0
#
#               新しいバージョンでは次のように指定します -
#                         dhcpcd eth0 /etc/rc.d/rc.firewall
#
#
#     注意 3 -   Pump を使う場合、/etc/pump.conf ファイルに次の記述を追加してください。
#
#                   script /etc/rc.d/rc.firewall
#
#   PPP を利用する場合 -
#   ----------
#   お気づきではないかもしれませんが、PPP 接続が行われるたびに、/etc/ppp/ip-up スクリプトが
#   常に動作します。このことを利用して、新しい IP アドレスの取得と強固なファイアウオール・ルール
#   セットの再設定を行います。
#
#   もし、/etc/ppp/ip-up がすでに存在しているなら、それを編集して"/etc/rc.d/rc.firewall"
#   という記述を最後のあたりに追加するようにしてください。
#
#   もし、/etc/ppp/ip-up スクリプトが存在しなかったなら、/etc/rc.d/rc.firewall スクリプト
#   を実行するための次のようなリンクを作成する必要があります。
#
#       ln -s /etc/rc.d/rc.firewall /etc/ppp/ip-up
#
#   * 続いて、以下のコメントアウトされたシェルコマンドを必要に応じて有効にしてください *
#
# PPP 及び DHCP を利用する場合 -
# -------------------
# 次の行の "#" を削除して、その次の行の先頭に "#" を入れてください。
#extip="`/sbin/ifconfig ppp0 | grep 'inet addr' | awk '{print $2}' | sed -e
's/.*://'`"

# 静的な IP アドレスで PPP を使う場合 -
#
extip="your.static.PPP.address"

# PPP と DHCP を使う場合は、必ずこの部分に正しい外部インタフェースの名前を指定します
extint="ppp0"

# 内部の IP アドレスの割り当てを指定します
intint="eth0"
intnet="192.168.0.0/24"


# マスカレードのタイムアウト
#
#   2 時間= TCP セッション
#  10 秒 = TCP/IP の "FIN" パケットが受信されたあとのトラフィック
#  60 秒 = UDP トラフィック (マスカレードされた環境での ICQ 利用者は ICQ 自体の設定の中で
#          30秒のファイアウオールタイムアウトを指定しなければなりません)
#
#
ipchains -M -S 7200 10 60

#############################################################################
# 到着パケットについて、既存のルールを破棄し、初期ポリシーを
# 拒絶【訳注: reject】に設定。実際は、拒絶してログに記録する
# 最終ルールを用意するので、このポリシーは動作には無関係になる。
# 【訳注: ルールを REJECT にすると、ルールに合致したパケットを破棄して、
# "destination-unreachable" (目的地に到達しない) という ICMP パケットを
# 相手側 (送信元アドレスのマシン) に発信します。
# DENY にすると、"destination-unreachable" パケットも出さずに、受信した
# パケットを単に破棄します。
#
ipchains -F input
ipchains -P input REJECT

# ローカルマシン側からローカルインタフェースに入るパケットは、どこに
# 向かうものも有効とする。
#
ipchains -A input -i $intint -s $intnet -d 0.0.0.0/0 -j ACCEPT

# リモートインタフェース側から入って来る IP スプーフィング【訳注: IP 偽装】
# パケットや迷子パケットは、本来ならローカルマシンからであるべきものなので、
# 拒絶する。
#
ipchains -A input -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT


# リモートインターフェースに入って来る、宛先アドレスが PPP アドレスの
# パケットは、どの発信元アドレスからのものも有効とする。
# 【訳注: 以下のコマンドの前に、
# ipchains -A input -i $extint -S 0/0 -d $extip/32 -p tcp -y -j DENY -l
# があるか、或は以下のコマンドが
# ipchains -A input -i $extint -S 0/0 -d $extip/32 -p tcp ! -y -j ACCEPT
# となっている方がより好ましいと思います。】
#
ipchains -A input -i $extint -s 0.0.0.0/0 -d $extip/32 -j ACCEPT

# ループバックインタフェースを有効とする
#
ipchains -A input -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# 最終ルール。その他の到着パケットは拒絶され、ログに記録される。ポリシーには
# ログ記録のためのオプションがないため、これがその役割を代わりに果たすことに
# なる。
#
ipchains -A input -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

#############################################################################
# 送出パケットについて、既存のルールを破棄し、初期ポリシーを
# 拒絶【訳注: reject】に設定。実際は、拒絶してログに記録する最終ルールを
# 用意するので、このポリシーは動作には無関係になる。
#
ipchains -F output
ipchains -P output REJECT

# ローカルインタフェースから出力される、ローカルネットへ向かうパケットは
# どこからのものも有効とする。
#
ipchains -A output -i $intint -s 0.0.0.0/0 -d $intnet -j ACCEPT

# リモートインタフェース上でローカルネットへ送出されるパケットは、
# 偽装ルーティングなので、拒絶する。
#
ipchains -A output -i $extint -s 0.0.0.0/0 -d $intnet -l -j REJECT

# リモートインタフェース上でローカルネットから送出されるパケットは、
# あり得ないマスカレーディングなので、拒絶する。
#
ipchains -A output -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT

# リモートインタフェースからのそれ以外の送出パケットは有効
#
ipchains -A output -i $extint -s $extip/32 -d 0.0.0.0/0 -j ACCEPT

# ループバックインタフェースを有効とする。
#
ipchains -A output -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# 最終ルール。その他の送出パケットは拒絶され、ログに記録される。
# ポリシーにはログ記録のためのオプションはないため、これがその役割を
# 代わりに果たすことになる。
#
ipchains -A output -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

#############################################################################
# 転送パケットについて、既存のルールを破棄し、初期ポリシーを
# 否定【訳注: deny】に設定。実際は、否定してログに記録する最終ルールを
# 用意するので、このポリシーは動作には無関係になる。
#
ipchains -F forward
ipchains -P forward DENY

# ローカルインタフェースでのローカルネットからその他の宛先へのパケットをマスカレードする
#
ipchains -A forward -i $extint -s $intnet -d 0.0.0.0/0 -j MASQ
#
# 最終ルール。その他の転送パケットは拒絶され、ログに記録される。
# ポリシーにはログ記録のためのオプションはないため、これがその役割を
# 代わりに果たすことになる。
#
ipchains -A forward -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

# ファイルの終わり
ここでファイルができたら、パーミッションを指定します。
chmod 700 /etc/rc.d/rc.firewall

さて、ファイアウォールのルールセットの準備が整いました。 これをリブート後に実行させる必要があります。 実行には、毎回手で行う方法 (苦痛です) か、ブートスクリプトに追加する方 法 があります。 以下に 2つの方法を記しておきました。

Redhat 及び Redhat から派生したディストリビューション
起動スクリプトのロードに関し、 Redhat には 2つの方法があります - /etc/rc.d/rc.local 或は /etc/rc.d/init.d/ の中にある init スクリプトです。 前者の方法が最も簡単です。 やるべきことは以下の行を /etc/rc.d/rc.local ファイルの最後に追加することです

echo "Loading the rc.firewall ruleset.." /etc/rc.d/rc.firewall

この手法の問題点は、強固なファイアウォールのルールセットを動作させようと する際に、ファイアウォールはブート終了に至るまで実行されない、という点に あります。 好ましい 手法としては、ネットワークサブシステムの設定がロードされた直後に、ファイアウォールの設定がロードされるようにすることです。 今の所、この HOWTO は /etc/rc.d/rc.local の設定のみを扱っています。


Slackware

起動スクリプトのロードに関し、 Slackware には 2つの方法があります - /etc/rc.d/rc.local 或は /etc/rc.d/rc.inet2 ファイルを編集することです。 前者の方法が最も簡単で す。やるべきことは以下の行を /etc/rc.d/rc.local ファイルの最後に追加することです

echo "Loading the rc.firewall ruleset.."

/etc/rc.d/rc.firewall

この手法の問題点は、強固なファイアウォールのルールセットを動作させようと する際に、ファイアウォールはブート終了に至るまで実行されない、という点に あります。 好ましい 手法としては、ネットワークサブシステムの設定がロードされた直後に、 ファイアウォールの設定がロードされるようにすることです。 今の所、この HOWTO は /etc/rc.d/rc.local の設定のみを扱っています。

トップへ戻る



◆liloファイルの追加(NICが2枚のみ)

ここは、カーネル2.2.19では不要です。
/etc/lilo.confファイルにappend="ether=0,0,eth1"を追加します。
image = /vmlinuz
append="ether=0,0,eth1"  ←ネットワークカードが2枚の場合。
root= /dev/hda1
label=linux

ここでネットワークカードを追加した場合は必ず #lilo をしておいてください、

トップへ戻る



◆rc.inet1ファイルの追加・変更

/etc/rc.d/rc.inet1の追加・変更、これによりifconfigおよびrouteコマンドが実行できるようになります。

  1. ネットワークカードが1枚の場合

    #/etc/rc.d/rc.inet1に赤字の部分を追加、青色部分を変更しました。
    #! /bin/sh
    #
    # rc.inet1	This shell script boots up the base INET system.
    #
    # Version:	@(#)/etc/rc.d/rc.inet1	2.00	10/06/1999
    #
    
    HOSTNAME=`cat /etc/HOSTNAME`
    
    # Attach the loopback device.
    /sbin/ifconfig lo 127.0.0.1
    /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
    
    # IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the 
    # eth0 interface.
    IPADDR="123.234.123.59"                                      グローバルIPアドレス関連の指定
    NETMASK="255.255.255.240"       
    NETWORK="210.234.123.45"        
    BROADCAST="210.234.123.60"      
    GATEWAY="210.234.123.46"    
    
    # Edit for your setup.
    IPADDR1="192.168.0.1"   # REPLACE with YOUR IP address!                   ローカルIPアドレス関連の指定  
    NETMASK1="255.255.255.0"        # REPLACE with YOUR netmask!
    NETWORK1="192.168.0.0"  # REPLACE with YOUR network address!
    BROADCAST1="192.168.0.255"      # REPLACE with YOUR broadcast address, if you
    # have one. If not, leave blank and edit below.
    
    # To use DHCP instead of a static IP, set this value to "yes":
    DHCP="no"            # Use DHCP ("yes" or "no")
    
    # OK, time to set up the interface:
    if [ "$DHCP" = "yes" ]; then # use DHCP to set everything up:
      echo "Attempting to configure eth0 by contacting a DHCP server..."
      /sbin/dhcpcd
    elif [ ! "$IPADDR" = "127.0.0.1" ]; then # set up IP statically:
      # Set up the ethernet card:
      echo "Configuring eth0 as ${IPADDR}..."
      /sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}             グローバルはeth0となります。
      /sbin/ifconfig eth0:0 ${IPADDR1} broadcast ${BROADCAST1} netmask ${NETMASK1}    ローカルはeth0:0となります。
    
      # If that didn't succeed, give the system administrator some hints:
      if [ ! $? = 0 ]; then
        cat << EOF
    Your ethernet card was not initialized properly.  Here are some reasons why this
    may have happened, and the solutions:
    1. Your kernel does not contain support for your card.  Including all the 
       network drivers in a Linux kernel can make it too large to even boot, and
       sometimes including extra drivers can cause system hangs.  To support your
       ethernet, either edit /etc/rc.d/rc.modules to load the support at boottime,
       or compile and install a kernel that contains support.
    2. You don't have an ethernet card, in which case you should comment out this
       section of /etc/rc.d/rc.inet1.  (Unless you don't mind seeing this error...)
    EOF
      fi
    
      # Older kernel versions need this to set up the eth0 routing table:
      KVERSION=`uname -r | cut -f 1,2 -d .`
      if [ "$KVERSION" = "1.0" -o "$KVERSION" = "1.1" \
       -o "$KVERSION" = "1.2" -o "$KVERSION" = "2.0" -o "$KVERSION" = "" ]; then
        /sbin/route add -net ${NETWORK} netmask ${NETMASK} eth0
      fi
    
      # If there is a gateway defined, then set it up:
      if [ ! "$GATEWAY" = "" ]; then
        /sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1
      fi
    fi
    
    # End of rc.inet1
    
    eth0にグローバルIPアドレス関連として、eth0:0をローカルIPアドレス関連としています。




  2. ネットワークカードが2枚の場合

    #/etc/rc.d/rc.inet1に赤字の部分を追加、青色部分を変更しました。
    #! /bin/sh
    #
    # rc.inet1	This shell script boots up the base INET system.
    #
    # Version:	@(#)/etc/rc.d/rc.inet1	2.00	10/06/1999
    #
    
    HOSTNAME=`cat /etc/HOSTNAME`
    
    # Attach the loopback device.
    /sbin/ifconfig lo 127.0.0.1
    /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
    
    # IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the 
    # eth0 interface.
    IPADDR="123.234.123.59"                                      グローバルIPアドレス関連の指定
    NETMASK="255.255.255.240"       
    NETWORK="123.234.123.45"        
    BROADCAST="123.234.123.60"      
    GATEWAY="123.234.123.46"    
    
    # Edit for your setup.
    IPADDR1="192.168.0.1"   # REPLACE with YOUR IP address!                   ローカルIPアドレス関連の指定  
    NETMASK1="255.255.255.0"        # REPLACE with YOUR netmask!
    NETWORK1="192.168.0.0"  # REPLACE with YOUR network address!
    BROADCAST1="192.168.0.255"      # REPLACE with YOUR broadcast address, if you
    # have one. If not, leave blank and edit below.
    GATEWAY=""	# REPLACE with YOUR gateway address!
    
    # To use DHCP instead of a static IP, set this value to "yes":
    DHCP="no"            # Use DHCP ("yes" or "no")
    
    # OK, time to set up the interface:
    if [ "$DHCP" = "yes" ]; then # use DHCP to set everything up:
      echo "Attempting to configure eth0 by contacting a DHCP server..."
      /sbin/dhcpcd
    elif [ ! "$IPADDR" = "127.0.0.1" ]; then # set up IP statically:
      # Set up the ethernet card:
      echo "Configuring eth0 as ${IPADDR}..."
      /sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}             グローバルはeth0となります。
      /sbin/ifconfig eth1 ${IPADDR1} broadcast ${BROADCAST1} netmask ${NETMASK1}       ローカルはeth1となります。
    
      # If that didn't succeed, give the system administrator some hints:
      if [ ! $? = 0 ]; then
        cat << EOF
    Your ethernet card was not initialized properly.  Here are some reasons why this
    may have happened, and the solutions:
    1. Your kernel does not contain support for your card.  Including all the 
       network drivers in a Linux kernel can make it too large to even boot, and
       sometimes including extra drivers can cause system hangs.  To support your
       ethernet, either edit /etc/rc.d/rc.modules to load the support at boottime,
       or compile and install a kernel that contains support.
    2. You don't have an ethernet card, in which case you should comment out this
       section of /etc/rc.d/rc.inet1.  (Unless you don't mind seeing this error...)
    EOF
      fi
    
      # Older kernel versions need this to set up the eth0 routing table:
      KVERSION=`uname -r | cut -f 1,2 -d .`
      if [ "$KVERSION" = "1.0" -o "$KVERSION" = "1.1" \
       -o "$KVERSION" = "1.2" -o "$KVERSION" = "2.0" -o "$KVERSION" = "" ]; then
        /sbin/route add -net ${NETWORK} netmask ${NETMASK} eth0
      fi
    
      # If there is a gateway defined, then set it up:
      if [ ! "$GATEWAY" = "" ]; then
        /sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1
      fi
    fi
    
    # End of rc.inet1
    
    eth0にグローバルIPアドレス関連として、eth1をローカルIPアドレス関連としています。


トップへ戻る



◆IPマスカレードの設定確認

  1. ifconfigの設定確認

    # ifconfigをrootから入力すると以下のように表示されます。赤色の部分を確認してください。

    もし、不幸にして赤色の部分が違う場合は,/etc/rc.d/rc.inet1の/sbin/ifconfigが間違えています。
    # ifconfig
    lo Link enacap:Local LOOKPACK inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX Packets:20 errors:0 dropped:0 overruns:0 TX Packets:20 errors:0 dropped:0 overruns:0 eth0 Link enacap:10Mbps Ethernet HWaddr 00:40:05:31:57:D7 inet addr:123.234.123.45 Bcast:123.234.123.60 Mask:255.255.255.240 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX Packets:20 errors:0 dropped:0 overruns:0 TX Packets:20 errors:0 dropped:0 overruns:0 eth0:0 Link enacap:10Mbps Ethernet HWaddr 00:40:05:31:57:D7 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX Packets:20 errors:0 dropped:0 overruns:0 TX Packets:20 errors:0 dropped:0 overruns:0
    ネットワークカードが2枚の場合はeth0:0がeth1と表示されます。



  2. routeの確認

    # routetを力すると以下のように表示されます。赤色の部分を確認してください。

    もし、不幸にして赤色の部分が違う場合は,/etc/rc.d/rc.inet1の/sbin/routeが間違えています。
    
    # route
    Kernel routing table
    Destinnation      Gateway         Genmask          Flages    Metric Ref  Use  Iface
    
    210.234.123.59      *            255.255.255.240       U          0     0    0    eth0 
    localnet               *            255.255.255.0          U          0     0    0    eth0:0 (カードが2枚の場合はeth1) 
    loopback              *            255.255.255.0          U          0     0    1    lo
    default          210.234.123.46   0.0.0.0                UG         1     0    0    eth0   
    
    
    
    
    
    







トップへ戻る



◆IPマスカレードのテスト

  1. pingによるテスト
    ping 192.168.0.1 ←ローカルアドレスを入れる。
    ping 210.234.123.46 ←ゲートウェイアドレスを入れる。

  2. "netstat -rn" のテスト

    # "netstat -rn" 以下のように表示されます。

    Kernel IP routing table
                Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
                192.168.0.1     0.0.0.0         255.255.255.255 UH        0 16384      0 eth1
                12.13.14.15     0.0.0.0         255.255.255.255 UH        0 16384      0 eth0
                12.13.14.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
                192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
                127.0.0.0       0.0.0.0         255.0.0.0       U         0 16384      0 lo
                0.0.0.0         12.13.14.1      0.0.0.0         UG        0 16384      0 eth0 
    
    0.0.0.0 で始まっている最後の行に注目してください。
    その Gateway フィールドに IP アドレスがありますね。
    そのフィールドの中に設定した IP アドレスが見えなければなりません。

  3. "cat /proc/sys/net/ipv4/ip_forward" のテスト
    "cat /proc/sys/net/ipv4/ip_forward"を実行してください。
    - その結果が "1" になっていることを確認してください。そうなっていれば Linux のフォワーディングは有効となっています。

  4. ipchainsのテスト
    2.2.x ユーザなら "/sbin/ipchains -n -L" というコマンドを、2.0.x ユーザなら "/sbin/ipfwadm -F -l" というコマンドを実行してみてください。
    特にforwardを調べて、あなたがマスカレードを有効に しているか確認してください。 単純な rc.firewall ルールセットを使ったユーザーの場合、IPCHAINS の 出力結果の一例は以下のようになるでしょう。
                .
                .
                Chain forward (policy REJECT):
                target     prot opt     source                destination           ports
                MASQ       all  ------  192.168.0.0/24       0.0.0.0/0             n/a
                ACCEPT     all  ----l-  0.0.0.0/0            0.0.0.0/0             n/a
                .
                .  
                  
    



トップへ戻る


LINUXのページに戻る。















ご質問・お問い合わせ - 免責事項
Copyright (C) 1998 hero-island. All Rights Reserved.