技術戦略部より、tipsやノウハウなど技術的な話題を発信いたします。by2015.12.21インフラネットワークiptablesを利用してNATサーバを構築iptablesこんにちは、えのもとです。弊社では本番リリース直前検証環境として、ステージング環境を利用しています。この環境が古くなってしまったため、環境再構築を実施することになりました。再構築する上で、今後のこともあるので再構築しやすい環境に切り替えることにしました。構築上でポイントとなったのは以下の2つです。本番環境はVMで稼働しているので、そのバックアップを活用するサーバ設定(ネットワーク設定など)はできる限り変更したくないこれらを達成するため、閉鎖されたネットワークを構築しその中に環境を構築することにしました。そこで問題となるのは閉鎖された環境内外との通信なのですが、iptablesを利用してnatサーバを構築することで解決しました。今回はこのiptablesの検証の様子を紹介します。NATとiptablesについて今回環境を構築するに当たり、以下を参考にしました。要点だけ羅列すると以下のような内容になります。パケット内IPヘッダに送信元アドレスと宛先アドレスが記載されている。送信元アドレスを変換するNATのことをSNAT宛先アドレスを書き換えるNATのことをDNATと呼ぶ。iptablesのSNATはPOSTROUTINGチェインで、DNATはPREROUTINGチェインで行う。存在しないIPアドレス宛てのパケットをiptablesでnatし、別のIPアドレスで受けとることができるか検証しました。検証には以下のような環境を利用しました。存在するように見えます。(赤線)実際はvm02を経由してセグメントBにいるvm03へ届きます。(青線)事前確認iptablesに余計な設定があると誤作動の原因になるので、一旦どのサーバもクリアしておきます。saveまた、vm02はパケットを転送する必要があるので以下の設定を加えます。】宛のpingを実行し、その様子をvm01とvm02の両方でtcpdumpを使いパケットをキャプチャして確認します。】へパケットを送る場合、同一セグメント内なのでゲートウェイなどは経由せず直接通信することになります。通信するためには相手のMACアドレスを知る必要があります。ARPリクエストをブロードキャストへ送信しMACアドレスを探している様子が確認できました。これを無理やりvm02へ送るようにvm01にスタティックルーティングを追加します。】へpingを実行し確認します。】宛のパケットがvm02へ届くようになりました。】変換するため、vm02のiptablesにDNATの設定を追加します。】へpingを実行し、vm02とvm03で確認します。64vm03にvm01のPINGが届いていることが確認できました。vm02にSNAT(NAPT)設定を追加vm01から送るpingは無事vm03へ届けることができたのですが、vm03がセグメントAの情報を持っていないため、送信元であるvm01に返信することができません。そのため、vm02へSNAT(NAPT)を追加します。destination確認します。64無事にpingが返ってくることが確認できました。まとめ作成した環境を利用して、どんなサービスが利用できるのかも検証しました。oracleipヘッダ以外でipのやり取りをするものについては正常に動作しないのですが、動作したものについては、特に問題もなく使えることが分かりました。何かの役に立てばと思います。Excel以外でネットワーク構成図を書きたくなったのでPlantUMLとnwdiagを試してみました。