2009年2月18日

[linux-users:108207] Re: iptablesでポートフォワード

鈴木さん

下田です。
こんにちは。

> tail -f /var/log/message とすると以下のようなログがとれました。
>
> 1行目: Feb 18 09:51:42 dandelion kernel: prerouting: IN=eth1 OUT=

> MAC=00:1e:4f:97:be:fc:00:0c:29:40:0f:da:08:00 SRC=192.168.11.3
> DST=192.168.11.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=52930 DF PROTO=TCP
> SPT=59497 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
> 2行目: Feb 18 09:51:42 dandelion kernel: forward: IN=eth1 OUT=eth1
> SRC=192.168.11.3 DST=192.168.11.2 LEN=60 TOS=0x00 PREC=0x00 TTL=63
> ID=52930 DF PROTO=TCP SPT=59497 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
>
> 2行目のログがずっと続きました。3行目以降はでてくる間隔が倍々になっている
> 感じでした。FORWARDチェーンの中でぐるぐる回っているのでしょうか。

kenrouse さんの指摘のとおり、パケットの経路が行きと帰りで、
行き : .3 -> .1(ここで宛先を.1から.2へ変換) -> .2
帰り : .2 -> .3

となっているのが原因と思われます。

通常のTCP/IP通信では行きと帰りの経路が変わることは問題になりませんが、
NATが絡む場合は行きも帰りもNATを行ったノードを必ず経由させる必要があります。


よって、パケットの経路が
行き : .3 -> .1(ここで宛先を.1から.2へ変換) -> .2
帰り : .2 -> .1(ここで送信元を.2から.1へ変換) -> .3

となるように、
1.) .1のNATテーブルに、SNAT or SNAPT(IPマスカレード)の設定を追加する、または
2.) .2のルーティングテーブルに、.3宛は.1に投げるルーティングを個別に追加する

のどちらかを実施すれば通信はできるようになると思います。(どちらも動作未確認)
1.) [root@xxxxx ~]# iptables -t nat -A PREROUTING (その他条件追加) -j MASQUERADE
2.) [root@xxxxx ~]# route add -host 192.168.11.3 gw 192.168.11.1

ただし、副作用も大きいので設計/設定は慎重に行ってください。(特に2.)の方)


--
下田正明
SHIMODA Masa-aki
shimoda.masaaki@xxxxx


投稿者 xml-rpc : 2009年2月18日 12:56
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/82341
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。