- PR -

iptables の FORWARD の使い方

投稿者投稿内容
未記入
会議室デビュー日: 2005/10/19
投稿数: 5
投稿日時: 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
投稿数: 5
投稿日時: 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は必要ないかもしれません。)
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 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
投稿数: 5
投稿日時: 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 は
やらなくてよいということでしょうか?

ブロードバンド+ルータっていうのは
よく例があるのですが、ルータだけっていうのが
あんまりなくて困ってます。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2005-10-19 19:11
ゴメンナサイ,ちゃんと読んでませんでした.
引用:

未記入さんの書き込み (2005-10-19 19:03) より:

思ったのですが、もしかして、
FORWARD の設定が行われていれば
POSTROUTING だの PREROUTING は
やらなくてよいということでしょうか?


その通りです.
単なる router であれば,NAT は必要ありません.
※とくに masquerade してしまうと戻って来れなくなりますね.
というか,単なる router であれば netfilter は必要ありませんよ.

通常は,iptables -P FORWARD DROP として
「FORWARD の default policy は DROP」に定義して,
さらに必要な通信だけ絞り込んで
iptables -A FORWARD 〜 と追加していきます.
なので,いきなり -A するのではなくまず -P してから
徐々に -A していくのが一般的かと.

以上,ご参考までに.
未記入
会議室デビュー日: 2005/10/19
投稿数: 5
投稿日時: 2005-10-19 19:37
kazさん。回答どうもです。
非常に助かりました。

今回のkazさんのアドバイスで問題点がはっきりしました。
フォワードができてないということですね。

なぜフォワードができていなかは調べてみます。
わかったらまた投稿しておきます。

ありがとうございました。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 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
投稿数: 5
投稿日時: 2005-10-19 21:15
angelさん、こんばんは。

おみごとです。
PC-B のルーティングに問題がありました。

どうやら、PC-Bまでは届いていて、
応答をルータで受け取れない状態だったようです。

今日は朝までエンジョイかと思っていたので非常に助かりました。

ありがとうございました。
完全解決です。

スキルアップ/キャリアアップ(JOB@IT)