次のページ 前のページ 目次へ

4. 2.0、2.2系カーネルからの手っ取り早い移行

2.0 系(ipfwadm)から 2.2 系(ipchains)への移行の後遺症を未だ抱えている方 には申し訳ありませんが、良いニュースと悪いニュースがあります。

まず第一に、これまで通り ipchains と ipfwadm をそのまま使えます。 そうするには、最新の netfilter ディストリビューションの中の、ipchains.o もしくは ipfwadm.o カーネルモジュールを組み込む必要があります。 これら二つのモジュールは(知っての通り)互いに排他的なので、 他のいかなる netfilter モジュールとも一緒に使うべきではありません。

一旦モジュールが組み込まれれば、これまで通り ipchains や ipfwadm を利用 できますが、以下の相違点があります:

  • ipchains -M -S や ipfwadm -M -s でマスカレードのタイムアウトを設定しても意味 がありません。というのも、これらのタイムアウト時間は新しい NAT の内部で用い られているタイムアウトより長いので、これらのタイムアウト時間は適用されること がありません。
  • 冗長なマスカレードリストにおける、init_seq, delta, そして previous_delta フィールドが常に 0。
  • `-Z -L' で、カウンタのゼロ化とリスト表示を同時に行うことはできません  −カウンタが 0 にならないからです。
  • 下位互換性レイヤは、多数のコネクションにあまりうまく追従できません。 あなたの会社のゲートウェイには、それを利用しないでください!

ハッカーの人達は以下のことにも注意してください:

  • 現在は、IP マスカレードをしていても、61000-65095 番ポートを bind 可能です。 以前の IP マスカレードは、この範囲のポートを占有することは正当と考えて作られ ていたので、他のプログラムが使うことはできませんでした。
  • (ドキュメント化されてなかった)`getsockname' をハックして透過プロクシに用い、 コネクションの本当の宛先がどこであるか知るということはもうできなくなりました。
  • (ドキュメント化されてなかった)未知のアドレスへの bind のハッキングもできま せん。この手法は透過プロクシの錯覚を完璧にするのに用いられました。

4.1 僕は IP マスカレードを使いたいだけなんです! 助けて!

これこそ大部分の人が求めるものでしょう。もし PPP ダイヤルアップで動的に IP アドレスを割り当てられているのでしたら(分からないとしても、 あなたのはそうなっています)、内部ネットワークからの全てのパケットが、 PPP ダイヤルアップボックスからのパケットであるかのようにしたいのです。

# Load the NAT module (this pulls in all the others).
modprobe iptable_nat

# In the NAT table (-t nat), Append a rule (-A) after routing
# (POSTROUTING) for all packets going out ppp0 (-o ppp0) which says to
# MASQUERADE the connection (-j MASQUERADE).
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

ここでは全くパケットをフィルタリングしてないことに注意してください。 パケットフィルタリングに関しては、Packet Filtering HOWTO の中の、 「Mixing NAT and Packet Filtering(NAT とパケットフィルタリングの混合)」を参照してください。

4.2 ipmasqadm はどうしたの?

これはずっと範囲の狭いユーザベースのためのものなので、 他の機能と同じほどには下位互換性を気にかけていませんでした。 ポートフォワーディングをやるなら、`iptables -t nat' でだってできます。 ですから例えば Linux カーネル 2.2 系でやってきた:

# Linux 2.2
# Forward TCP packets going to port 8080 on 1.2.3.4 to 192.168.1.1's port 80
ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80

の代わりに今なら:

# Linux 2.4
# Append a rule before routing (-A PREROUTING) to the NAT table (-t nat) that
# TCP packets (-p tcp) going to 1.2.3.4 (-d 1.2.3.4) port 8080 (--dport 8080)
# have their destination mapped (-j DNAT) to 192.168.1.1, port 80
# (--to 192.168.1.1:80).
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 \
        -j DNAT --to 192.168.1.1:80


次のページ 前のページ 目次へ

[