- - PR -
iptables の FORWARD の使い方
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-19 18:25
iptables の設定の内、FORWARD について教えてください。
FORWARD の設定を行うと、「通過できる」と思っています。 で、 iptables -A FORWARD -j ACCEPT とすればなんでも通過できるだろうということで、 LANカードを2枚刺した LINUX (eth0, eth1)で、 eth0にぶら下がっているPC-A から eth1 にぶら下がっている PC-Bへ ping を通そうとしても返答がありません。 ちなみに、PC-Aからeth1への応答はあります。 こんな感じです。 PC-A - (eth0)LINUX(eth1) - PC-B ここまで設定したあと、HPをいろいろ参照していると FORWARD≒IPマスカレードのような記述がありました。 そこで、IPマスカレードの設定も行ってみました。 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A PREROUTING -i eth1 -j DNAT --to PC-B そうすると、PC-Bからのpingの応答がありました。 ここからが問題なのですが、 この状態だと、PC-BはPC-Aからのアクセスとは認識せず ルータからのアクセスだ という認識になってしまうと思うのです。 PC-BでWEB環境+JSPを用意して確認したところ、 REMOTEADDRが予想どおりeth1のアドレスとなっていました。 これが”普通”なんでしょうか? FORWARDの設定だけで PC-Bへアクセスできそうな予感がしていますが... はまってしまってます。 よろしくお願いします。 | ||||
|
投稿日時: 2005-10-19 18:28
まちがってました。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A PREROUTING -i eth1 -j DNAT --to PC-B は、ただしくは iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -t nat -A PREROUTING -i eth0 -j DNAT --to PC-B です。(ethxが逆になってました) (実験のときはつけましたがPREROUTINGは必要ないかもしれません。) | ||||
|
投稿日時: 2005-10-19 18:51
こんばんわ.
ip forwarding は有効にしていますか? # echo 1> /proc/sys/net/ipv4/ip_forward として見て packet を通すようであれば,そこが有効になっていません. 上記のやり方は再起動すると失効してしまうので, /etc/sysctl.conf の net.ipv4.ip_forward = の値を 1 に指定しましょう. 以上,ご参考までに. | ||||
|
投稿日時: 2005-10-19 19:03
kazさん。こんばんは。
ip forwarding は確かに 1 になっています。 再起動しても大丈夫です。 また、 /etc/sysctl.conf は次のようになっています。 net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 思ったのですが、もしかして、 FORWARD の設定が行われていれば POSTROUTING だの PREROUTING は やらなくてよいということでしょうか? ブロードバンド+ルータっていうのは よく例があるのですが、ルータだけっていうのが あんまりなくて困ってます。 | ||||
|
投稿日時: 2005-10-19 19:11
ゴメンナサイ,ちゃんと読んでませんでした.
その通りです. 単なる router であれば,NAT は必要ありません. ※とくに masquerade してしまうと戻って来れなくなりますね. というか,単なる router であれば netfilter は必要ありませんよ. 通常は,iptables -P FORWARD DROP として 「FORWARD の default policy は DROP」に定義して, さらに必要な通信だけ絞り込んで iptables -A FORWARD 〜 と追加していきます. なので,いきなり -A するのではなくまず -P してから 徐々に -A していくのが一般的かと. 以上,ご参考までに. | ||||
|
投稿日時: 2005-10-19 19:37
kazさん。回答どうもです。
非常に助かりました。 今回のkazさんのアドバイスで問題点がはっきりしました。 フォワードができてないということですね。 なぜフォワードができていなかは調べてみます。 わかったらまた投稿しておきます。 ありがとうございました。 | ||||
|
投稿日時: 2005-10-19 19:38
こんばんは。
・IPマスカレード ( NAT ) を行っていれば、PING疎通 O.K. ・素のルータとした場合は、PING疎通 N.G. ということであれば…、 PC-B に適切なルートが設定されていない可能性も考えられます。 ( マスカレードをかませば、PCにとっては同一セグメント内通信と同じなので、ルートを設定していなくともPINGが通る、とか ) PCのデフォルトゲートウェイや、追加ルートを確認してみては如何でしょうか。 あとは、どこで通信が途絶えるかは、Linux上で tcpdump をしていれば、ある程度見えますよ。 ※ 勿論、各PC上でも ethereal 等でキャプチャしておくとなお良し PINGの状況を監視するなら…、 # tcpdump -vvi eth0 icmp & tcpdump -vvi eth1 icmp & 位でどうでしょう。 ( バックグラウンドで2ジョブ実行させるので、終了させる場合は、それぞれ fg してから Ctrl-C で止めてください ) 以上、ご参考まで。 | ||||
|
投稿日時: 2005-10-19 21:15
angelさん、こんばんは。
おみごとです。 PC-B のルーティングに問題がありました。 どうやら、PC-Bまでは届いていて、 応答をルータで受け取れない状態だったようです。 今日は朝までエンジョイかと思っていたので非常に助かりました。 ありがとうございました。 完全解決です。 |