【誰か教えて→解決!】Linuxをルータにしてみて疑問が発生した
いろいろあって、以下のような構成でLinuxをルータとして使ってみました。そのパケットをwiresharkでキャプチャしてて「ん?」となる部分があったので記事にしてみます。
(だれか原因教えてくれないかな|ω・`)チラ )
とりあえず備忘録
CentOSで以下のiptablesを実行(めんどくさいからNATだけ)
iptables -F iptables -t nat -F echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A PORTROUTING -s 10.0.3.0/24 -j MASQUERADE iptables -t nat -A PORTROUTING -s 10.0.4.0/24 -j MASQUERADE
ここから本題
kaliからubuntuへのping(kaliでping 10.0.3.5を実行)をそれぞれのwiresharkでキャプチャしたものが以下
kali
kaliのほうはsrcが4.4、dstが3.5になっている。これはいい。だけどubuntuのほうはreplyのsrcが3.5、dstが3.6になってる…?!(srcが3.5、dstが4.4ならわかる)これじゃubuntuからのecho replyがkaliまで届かないんじゃ…という気がしますが実際は届いてます。ルータの役割をしているCentOSがなにがしかやってるんでしょうが、調べてもなにもでてこない…。
もし原因わかる方いらっしゃったら教えていただけるとありがたいです><(@senz1024)
追記
ブログを公開してしばらくすると以下のような天の声が。
@senz1024 えっIPマスカレードってこういうもんじゃないんですか
— dais (@hdais) 2014, 3月 7
@senz1024 まずはiptables (service iptables stop かな) をとめれば、CentOSは普通の何もしないルータになって期待通りの結果になるはずです
— dais (@hdais) 2014, 3月 7
@hdaisさんいつも本当にありがとうございますm(_ _)m
教えていただいたとおりiptablesを止めると…以下のような感じになりました。
おぉ!srcが3.5、dstが4.4になっている!なぜだ…
結論からいうと、IPフォワーディングとIPマスカレードが頭の中でごちゃごちゃになっていました。頭の中でIPマスカレードとは以下の図のようなはたらきだと思っていましたが、
これはIPフォワーディングというもので、IPマスカレードとは以下の図のようなはたらきでした。
すなわち、IPフォワーディングのことをIPマスカレードと思っていたっぽいということです。これらの図をみるとどうして上のようなパケットがキャプチャされたのか一目瞭然です。ずいぶんとカンタンなことだ…orz
それと、上の「これじゃubuntuからのecho replyがkaliまで届かないんじゃ…という気がしますが」という疑問の回答は、「ipマスカレードを実行する=変換前のアドレスと変換後のアドレスを紐付けして保持する」である、ということだと思います。(すなわちここではCentOSが4.4と3.6を紐付けて保持している)