プライベートネットワーク上に重要な情報がある場合には、IP マスカレードを 使う前に慎重に検討してください。IP マスカレードはあなたがインターネットへ 出てゆくゲートウェイともなりますが、逆に外側の世界にいる誰かがあなたの ネットワークに侵入するゲートウェイともなるのです。
お使いの Linux ディストリビューションが、下記の必要な機能とモジュールを 組み込んでコンパイルされている (大部分のモジュラーカーネルには必要なものは すべて含まれています) ならば、カーネルの再コンパイルは 必要ありません。その場合でも、このセクションには役立つ情報が含まれて いますので、ぜひお読みになることをお勧めします。
/usr/src/
に
展開します。tar xvzf linux-2.2.x.tar.gz -C /usr/src
、ここで
x は 2.2 以降のパッチレベルです。linux
というディレクトリまたはシンボリックリンクがある
ことを確認してください) tar xvzf linux-2.2.6.tar.gz -C /usr/src
とします。tar の引数の
x はカーネルのバージョンとは関係なく、そのままです。
以下の質問には YES と答えてください。
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
- これによって実験段階の IP マスカレードのコードを選択してカーネルに
組み込むことが可能になります。
* Enable loadable module support
CONFIG_MODULES
- ip_masq_ftp.o のような IP マスカレードモジュールをロードできるように
なります。
* Networking support
CONFIG_NET
* Network firewalls
CONFIG_FIREWALL
* TCP/IP networking
CONFIG_INET
* IP: forwarding/gatewaying
CONFIG_IP_FORWARD
* IP: firewalling
CONFIG_IP_FIREWALL
* IP: masquerading
CONFIG_IP_MASQUERADE
* IP: ipportfw masq support
CONFIG_IP_MASQUERADE_IPPORTFW
- 推奨します。
* IP: ipautofw masquerade support
CONFIG_IP_MASQUERADE_IPAUTOFW
- 必要に応じて組み込んでください。
* IP: ICMP masquerading
CONFIG_IP_MASQUERADE_ICMP
- ICMP パケットのマスカレードをサポートします。推奨します。
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- 強く推奨します。
* Dummy net driver support
CONFIG_DUMMY
- 推奨します。
* IP: ip fwmark masq-forwarding support
CONFIG_IP_MASQUERADE_MFW
- 必要に応じて組み込んでください。
原注: 上に示したのは IP マスカレードに必要なものだけです。 その他のオプションは、必要に応じて指定してください。
make modules; make modules_install
/lib/modules/2.2.x/ipv4/
中の必要な
モジュールをロードするために、/etc/rc.d/rc.local
(または
それ以外の適当と思われるファイル) に、以下の行を追加します。
.
.
.
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
(パッチを当てた場合には、ip_masq_cuseeme や ip_masq_vdolive のような
その他のモジュールも書き加えてください)
.
.
.
重要: カーネル 2.2.x のデフォルトでは、IP フォワーディングはディセーブル
にされています。以下のコマンドを実行し、IP フォワーディングをイネーブルにする
ことを忘れないでください。echo "1" > /proc/sys/net/ipv4/ip_forwarding
Redhat のユーザは、/etc/sysconfig/network
ファイル中の
FORWARD_IPV4=false
を FORWARD_IPV4=true
に書き換える
こともできます。
/usr/src/
に
展開します。tar xvzf linux-2.0.x.tar.gz -C /usr/src
、ここで
x は 2.0 以降のパッチレベルです。linux
というディレクトリあるいはシンボリックリンクがある
ことを確認してください) tar xvzf linux-2.0.36.tar.gz -C /usr/src
とします。tar の引数の
x はカーネルのバージョンとは関係なく、そのままです。
以下の質問には YES と答えてください。
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
- これによって実験段階の IP マスカレードのコードを選択してカーネルに
組み込むことが可能になります。
* Enable loadable module support
CONFIG_MODULES
- ロードモジュールが使えるようになります。
* Networking support
CONFIG_NET
* Network firewalls
CONFIG_FIREWALL
* TCP/IP networking
CONFIG_INET
* IP: forwarding/gatewaying
CONFIG_IP_FORWARD
* IP: firewalling
CONFIG_IP_FIREWALL
* IP: masquerading (EXPERIMENTAL)
CONFIG_IP_MASQUERADE
- 実験段階ですが、*不可欠*です。
* IP: ipautofw masquerade support (EXPERIMENTAL)
CONFIG_IP_MASQUERADE_IPAUTOFW
- 推奨します。
* IP: ICMP masquerading
CONFIG_IP_MASQUERADE_ICMP
- ICMP パケットのマスカレードをサポートします。
必要に応じて組み込んでください。
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- 強く推奨します。
* Dummy net driver support
CONFIG_DUMMY
- 推奨します。
原注: 上に示したのは IP マスカレードに必要なものだけです。
その他のオプションは、必要に応じて指定してください。
make modules; make modules_install
/lib/modules/2.2.x/ipv4/
中の必要な
モジュールをロードするために、/etc/rc.d/rc.local
(または
それ以外の適当と思われるファイル) に、以下の行を追加します。
.
.
.
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
(パッチを当てた場合には、ip_masq_cuseeme や ip_masq_vdolive のような
その他のモジュールも書き加えてください)
.
.
.
重要: カーネル 2.0.34 から、デフォルトで IP フォワーディングはディセーブル
にされています。以下のコマンドを実行し、IP フォワーディングをイネーブルにする
ことを忘れないでください。echo "1" > /proc/sys/net/ipv4/ip_forward
Redhat のユーザは、/etc/sysconfig/network
ファイル中の
FORWARD_IPV4=false
を FORWARD_IPV4=true
に書き換える
こともできます。
クライアントマシンには公式にはアドレスが割り当てられていないわけですから、 これらのマシンに適切な方法でアドレスを割り当てなければなりません。
IP マスカレード FAQ からの引用:
外部に接続されていないネットワークでどのような IP アドレスを使うべきかに
ついて、RFC (#1597、今はもう古くなっているかもしれません) が
発行されています。
訳注: 現在は RFC1918 が最新です。
この目的のために、3つのブロックが予約されています。
私が使っているのは、この中の 192.168.1.n から 192.168.255.n までの255個の
クラス C サブネットです。
RFC 1597 からの引用:
Section 3: プライベートアドレス空間
Internet Assigned Numbers Authority (IANA) は、IP アドレス空間のうち
以下の3つのブロックをプライベートネットワーク用に予約しています。
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
最初のブロックは「24ビットブロック」、2番目のブロックは「20ビット
ブロック」、3番目のブロックは「16ビット」ブロックと呼ばれます。
最初のブロックは単一のクラス A ネットワーク番号以外のなにものでもなく、
2番目のブロックは連続する16個のクラス B ネットワーク番号の集合であり、
3番目のブロックは連続する255個のクラス C ネットワーク番号の集合であることに
注意してください。
従って、クラス C ネットワークを使っている場合、マシンのアドレスは
192.168.1.1、192.168.1.2、192.168.1.3、…、192.168.1.x と割り当てる
ことになります。
192.168.1.1 は通常ゲートウェイマシン、つまりインターネットに接続された Linux ホストとなります。 192.168.1.0 と 192.168.1.255 はネットワークアドレスとブロードキャストアドレス として予約されています。これらのアドレスをマシンに割り当てることは避けて ください。
適切な IP アドレスを設定したら、次は適切なゲートウェイを設定しなければ なりません。普通はそう難しいことではありません。Linux ホストのアドレス (普通は 192.168.1.1)をゲートウェイとして入力すればいいのです。
DNS には任意のサーバーを指定することができますが、
Linux マシンと同じサーバーを指定するのが分かりやすいでしょう。
また、ドメインサーチサフィックスを追加することもできます。
訳注: Linux マシンが 0.0.0.0 または 127.0.0.1 (どちらも自分自身を
示すアドレスです) を DNS サーバーとして指定している場合、これをこのまま
クライアントマシンに指定してはいけません!
この場合には、Linux マシンの IP アドレス(この例では 192.168.1.1)を指定
します。
IP アドレスを設定し直した後、適当なサービスを再起動するか、リブートする ことを忘れないでください。
以下の設定方法は、クラス C ネットワークを使い、Linux ホストのアドレスが 192.168.1.1 であると仮定しています。192.168.1.0 と 192.168.1.255 は予約 されていることに注意してください。
/etc/resolv.conf
にあり
ます)。必要に応じて「ドメインサフィックスの検索順」を追加する。
ping
し、ネットワーク接続をテストする。
「ファイル名を指定して実行」 を選択し、ping 192.168.1.1
と
入力する。ping
することはできません。)
HOSTS
ファイルを windows ディレクトリに作成すれば、
LAN 上のマシンをホスト名で参照できるようになります。
windows ディレクトリには、HOSTS.SAM
という名前のサンプルファイルが
あります。
訳注: 日本語版の Windows for Workgroup 3.11 は、発売されていません。
ping
し、ネットワーク接続をテストする。
「Start/Run」 を選択し、 ping 192.168.1.1
と入力する。ping
することはできません。)
[1]Novell NE2000 Adapter
。
IP アドレスを 192.168.1.x (1 < x < 255) に、サブネットマスクを
255.255.255.0 に、デフォルトゲートウェイを 192.168.1.1 に設定する。
ping
し、ネットワーク接続をテストする。
「ファイル/ファイル名を指定して実行」 を選択し、
ping 192.168.1.1
と入力する。ping
することはできません。)
/etc/sysconfig/network-scripts/ifcfg-eth0
ファイルを編集するか、
コントロールパネルを使って上の設定を行ないます。/etc/resolv.conf
に DNS サーバーと
ドメインサーチサフィックスを追加する。
/etc/networks
file depending on your settings.
ping
コマンドを発行し、ゲートウェイマシンへの接続をテストする。
ping 192.168.1.1
ping
することはできません。)
nwpd 0x60 10 0x300
を実行する。
pkunzip tel2308b.zip
config.tel
ファイルをオープンする。
myip=192.168.1.x
(1 < x < 255)、netmask=255.255.255.0 と
設定する。
hardware=packet, interrupt=10, ioaddr=60
と
設定する。
name=default
host=yourlinuxhostname
hostip=192.168.1.1
gateway=1
name=dns.domain.com ; hostip=123.123.123.123; nameserver=1
原注: Linux ホストが使用している DNS 情報で置き換えてください。
config.tel
ファイルをセーブする。
telnet 192.168.1.1
ping
することはできません)。
HOSTS
ファイルをシステムフォルダに作成すれば、
LAN 上のマシンをホスト名で参照できるようになります。
このファイルはすでにシステムフォルダに存在し、必要に応じて変更できるように
いくつかのコメントアウトされたサンプルエントリを含んでいます。
ping
することはできません)。
HOSTS
ファイルをシステムフォルダに作成すれば、
LAN 上のマシンをホスト名で参照できるようになります。
このファイルはすでにシステムフォルダに存在するかもしれないし、ないかも
しれません。存在する場合には、必要に応じて変更できるように
いくつかのコメントアウトされたサンプルエントリを含んでいます。
存在しない場合には、MacTCP が動作しているシステムからこのファイルの
コピーを取得することもできますし、自分で作成することもできます
(このファイルのフォーマットは、RFC952 に記述されている Unix の
/etc/hosts
ファイルと同じです)。このファイルを作成したら、
TCP/IP コントロールパネル を開き、「Hosts ファイルの選択...」
ボタンをクリックし、Hosts
ファイルをオープンします。
c:\nwclient\startnet.batの編集: (これは私の場合です)
SET NWLANGUAGE=ENGLISH LH LSL.COM LH KTC2000.COM LH IPXODI.COM LH tcpip LH VLM.EXE F:
c:\nwclient\net.cfgの編集: (リンクドライバをお使いのもの、例えば NE2000 に変更してください)
Link Driver KTC2000 Protocol IPX 0 ETHERNET_802.3 Frame ETHERNET_802.3 Frame Ethernet_II FRAME Ethernet_802.2 NetWare DOS Requester FIRST NETWORK DRIVE = F USE DEFAULTS = OFF VLM = CONN.VLM VLM = IPXNCP.VLM VLM = TRAN.VLM VLM = SECURITY.VLM VLM = NDS.VLM VLM = BIND.VLM VLM = NWP.VLM VLM = FIO.VLM VLM = GENERAL.VLM VLM = REDIR.VLM VLM = PRINT.VLM VLM = NETX.VLM Link Support Buffers 8 1500 MemPool 4096 Protocol TCPIP PATH SCRIPT C:\NET\SCRIPT PATH PROFILE C:\NET\PROFILE PATH LWP_CFG C:\NET\HSTACC PATH TCP_CFG C:\NET\TCP ip_address xxx.xxx.xxx.xxx ip_router xxx.xxx.xxx.xxx
c:\bin\resolv.cfg:
SEARCH DNS HOSTS SEQUENTIAL NAMESERVER 207.103.0.2 NAMESERVER 207.103.11.9
ping 192.168.1.1
と入力する。
ping パケットが受信できればすべて OK。
他のプラットフォームの設定に関しても、同じロジックが適用できるはずです。 今までのセクションを参照してください。 これらのシステムの設定について書いてみようと思う方は、 詳細な設定方法を ambrose@writeme.com と dranch@trinnet.net にメールしてください。
この時点で、カーネルと必要なパッケージがインストールされ、モジュールが ロードされているはずです。また、クライアントマシンの IP アドレス、 ゲートウェイ、それに DNS 設定もすべてできているはずです。
あと残っているのは、IP ファイヤウォールツールを使って、適当なパケットを 適当なマシンに転送することだけです。
これには、いろいろなやり方があります。これから説明する方法は私にとっては うまくいきましたが、あなたはまた別の考えを持っているかもしれません。 セクション 4.4 と ipchains(2.2.x) / ipfwadm(2.0.x) マニュアルページを参照してください。
ここで提供するのは、IP マスカレードを動かすための必要最小限のルールセット だけです。セキュリティの問題は考慮されていません。ある程度の時間を費やして、 適切なファイヤウォールのルールを適用し、セキュリティを強化することを 強くお勧めします。
カーネル 2.2.x では、IP マスカレードのルールを設定するためのツールとして ipfwadm はもう使われていません。ipchains を使ってください。
ipchains -P forward DENY
ipchains -A forward -s yyy.yyy.yyy.yyy/x -j MASQ
ここで x はサブネットのクラスによって決まる数 (次の表を参照してください)、
また yyy.yyy.yyy.yyy はネットワークアドレスです。
netmask | x | Subnet
~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~
255.0.0.0 | 8 | Class A
255.255.0.0 | 16 | Class B
255.255.255.0 | 24 | Class C
255.255.255.255 | 32 | Point-to-point
yyy.yyy.yyy.yyy/xxx.xxx.xxx.xxx というフォーマットも使えます。 ここで xxx.xxx.xxx.xxx は、例えば 255.255.255.0 のように、 サブネットマスクを指定します。
例えば、クラス C サブネットを使っている場合には、次のように入力します。
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -j MASQ
または
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ
マシンごとに設定することもできます。 例えば、192.168.1.2 と 192.168.1.8 にインターネットへのアクセスを許可し、 他のマシンには禁止したい場合には、次のように入力します。
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.2/32 -j MASQ
ipchains -A forward -s 192.168.1.8/32 -j MASQ
デフォルトポリシーでマスカレードを行なわないでください。 ルーティングを操作することができる外部の人間が、あなたのゲートウェイを 使って正体を仮装 (マスカレード) し、あなたのネットワークに侵入して くるおそれがあるのです!
これらのコマンドを /etc/rc.local
ファイル (または適当と思われる
rc ファイル) に追加しておくのが良いでしょう。
そうでなければ、IP マスカレードが必要になるたびに実行する必要があります。
ipchains の詳しい使い方については、 Linux IPCHAINS HOWTO を参照してください。
ipfwadm -F -p deny
ipfwadm -F -a m -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
または
ipfwadm -F -p deny
ipfwadm -F -a masquerade -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
ここで x はサブネットのクラスによって決まる数 (次の表を参照してください)、
また yyy.yyy.yyy.yyy はネットワークアドレスです。
netmask | x | Subnet
~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~
255.0.0.0 | 8 | Class A
255.255.0.0 | 16 | Class B
255.255.255.0 | 24 | Class C
255.255.255.255 | 32 | Point-to-point
yyy.yyy.yyy.yyy/xxx.xxx.xxx.xxx というフォーマットも使えます。 ここで xxx.xxx.xxx.xxx は、例えば 255.255.255.0 のように、 サブネットマスクを指定します。
例えば、クラス C サブネットを使っている場合には、次のように入力します。
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
bootp クライアントは自分の IP アドレスを知らないため、bootp リクエストパケットは正しい IP ソースアドレスを持っていません。 したがって、bootp サーバがマスカレード/ファイヤウォールマシンで 動いている場合、次のコマンドが deny コマンドの前に必要です。
ipfwadm -I -a accept -S 0/0 68 -D 0/0 67 -W bootp_clients_net_if_name -P udp
マシンごとに設定することもできます。 例えば、192.168.1.2 と 192.168.1.8 にインターネットへのアクセスを許可し、 他のマシンには禁止したい場合には、次のように入力します。
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.2/32 -D 0.0.0.0/0
ipfwadm -F -a m -S 192.168.1.8/32 -D 0.0.0.0/0
よくある間違いとして、最初のコマンドを次のように入力することがあげられます。
ipfwadm -F -p masquerade
デフォルトポリシーでマスカレードを行なわないでください。 ルーティングを操作することができる外部の人間が、あなたのゲートウェイを 使って正体を仮装 (マスカレード) し、あなたのネットワークに侵入して くるおそれがあるのです!
これらのコマンドを /etc/rc.local
ファイル (または適当と思われる
ファイル) に追加しておくのが良いでしょう。
そうでなければ、IP マスカレードが必要になるたびに実行する必要があります。
ipfwadm の詳しい説明は、セクション 4.4を参照してください。
設定お疲れ様でした。いよいよ試運転です。 Linux ホストとインターネットの接続に問題がないことを確認しておいてください。
クライアントマシンから「インターネット上の!!!」ウェブサイトに アクセスして、うまくつながるかどうか見てみましょう。 DNS の設定が間違っているかもしれないので、 最初はホスト名ではなく IP アドレスを使うことをおすすめします。
例えば、Linux Documentation Project サイト http://metalab.unc.edu/mdw/linux.html を、 http://152.19.254.81/mdw/linux.html としてアクセスしてみましょう。
Linux Documentation Project のホームページが見えましたね? おめでとうございます! IP マスカレードはちゃんと動いています! 次の段階としてホスト名でのアクセスや、ping、telnet、ssh、ftp、Real Audio、True Speech などなど、IP マスカレードでサポートされているクライアントを 試してみましょう。
これまでに説明した設定で、今のところ私は何のトラブルも経験していません。 この素晴らしい機能を実現してくれた人たちに感謝します。