仙豆のレシピ

ちょっとしたことでも書いていく姿勢で

【誰か教えて→解決!】Linuxをルータにしてみて疑問が発生した

いろいろあって、以下のような構成でLinuxをルータとして使ってみました。そのパケットをwiresharkでキャプチャしてて「ん?」となる部分があったので記事にしてみます。
(だれか原因教えてくれないかな|ω・`)チラ )

f:id:senz:20140307014538p:plain

とりあえず備忘録

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からubuntupingが通るようになる。

ここから本題

kaliからubuntuping(kaliでping 10.0.3.5を実行)をそれぞれのwiresharkでキャプチャしたものが以下

kali
f:id:senz:20140307015822p:plain

ubuntu
f:id:senz:20140307015826p:plain


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)

追記

ブログを公開してしばらくすると以下のような天の声が。



@hdaisさんいつも本当にありがとうございますm(_ _)m

教えていただいたとおりiptablesを止めると…以下のような感じになりました。
f:id:senz:20140308011104p:plain
おぉ!srcが3.5、dstが4.4になっている!なぜだ…
結論からいうと、IPフォワーディングとIPマスカレードが頭の中でごちゃごちゃになっていました。頭の中でIPマスカレードとは以下の図のようなはたらきだと思っていましたが、
f:id:senz:20140308013756p:plain
これはIPフォワーディングというもので、IPマスカレードとは以下の図のようなはたらきでした。
f:id:senz:20140308014003p:plain
すなわち、IPフォワーディングのことをIPマスカレードと思っていたっぽいということです。これらの図をみるとどうして上のようなパケットがキャプチャされたのか一目瞭然です。ずいぶんとカンタンなことだ…orz

それと、上の「これじゃubuntuからのecho replyがkaliまで届かないんじゃ…という気がしますが」という疑問の回答は、「ipマスカレードを実行する=変換前のアドレスと変換後のアドレスを紐付けして保持する」である、ということだと思います。(すなわちここではCentOSが4.4と3.6を紐付けて保持している)

終わりに

助言をいただいて、調べて、解決して、思ったけど…相変わらずレベル低い(笑)こんなこともわからなかったのかと愕然とする。でもまあ将来この記事を見て「あーこんなときもあったなー」と笑えるようにがんばろw

あと、今回助言をいただけて思い出したんだけど、twitterも知らず普通科のため先生も友人も詳しい人がおらず本とwebだけで苦労してプログラミング勉強してた高校時代、つらかったなぁ(笑)