FutureStandard MAKERS

東京にある映像解析プラットフォーム「SCORER」の開発をしているスタートアップのブログです

複数のネットワーク間を跨いだ通信を行う環境を簡易的に作成する

1.はじめに

先日、社内でネットワーク関連の試験をしていた際に、複数のネットワークを跨いだ通信試験を行う必要がありました。弊社の社内ネットワークは、一つのルータによる単一ネットワークとなっています。そこで色々と試行錯誤した結果、社内に複数のネットワークを一時的に構築し、ネットワークを跨ぐ通信試験を行う事が出来たので、今後のメモとしてブログに残したいと思います。

f:id:FutureStandard:20170601130218j:plain

弊社のオフィスのネットワークは、上図で示すとおり、一つのルータから各個人の端末、ラズベリーパイ等にIPアドレスが振られており、すべてのマシンが同一のサブネットに属しています。

ルータの設定によりサブネットを分けるのは難しそうでしたので、オフィスにあるモバイルルータとラズパイを組み合わることにしました。

f:id:FutureStandard:20170601130318j:plain

具体的には、上図のようにモバイルルータを用意します。そして、オフィスのルータと、モバイルルータの両方に接続する中継器となるラズベリーパイ(以下、中継器)を用意します。こうする事で、この中継器となったラズベリーパイは、社内ネットワーク、モバイルルータのネットワークの両方のネットワークに接続されます。

f:id:FutureStandard:20170601130330j:plain

今回、こちらの上図において、左側にあるモバイルルータに接続されている私のWindowsPC(192.168.50.4)から、オフィスのネットワークに属しているラズベリーパイ(192.168.1.201)にネットワーク接続(SSH, HTTP, HTTPS)を可能にする事を目標とします。

そこで、こちらの目標を満たすために今回行ったことは次の2つです。

1)Windows PCおよび通信目標となるラズベリーパイに対して、相手のネットワークに通信が届くように、それぞれのルーティングテーブルを変更する。

2)中継器となるラズパイにおいて、ネットワーク間のフォワーディングに関する設定を行う

ではそれぞれ手順を見ていきます。

2.ルーティングテーブルの変更

まずはWindows PCから中継器とであるラズベリーパイpingを打ってみます。中継器となるラズベリーパイは、2つのネットワークに属しているため、IPアドレスを2つ(オフィス側ネットワーク:192.168.1.46とモバイルルータ側ネットワーク:192.168.55.3)持っています。そこで、それぞれのIPアドレスpingを打ってみたっ結果がこちらです。

f:id:FutureStandard:20170601130722p:plain

オフィス側ネットワークにはpingが通りませんでした。これは、WindwosPCのルーティングテーブルにおいて、192.168.1のネットワークに対する経路が設定されていないためとなります。

そこで、WindowsPCのルーティングテーブルを見てみます。

f:id:FutureStandard:20170601130833p:plain

原状では、WindowsPCから192.168.1のネットワークにアクセスしようとすると、デフォルトゲートウエイに行ってしまいます。そこで、192.168.1のネットワークに接続する場合は、中継器となるラズベリーパイ(192.168.55.3)に届くように経路を設定します。

ルーティングテーブルの設定には管理者権限が必要となります。そこで管理者権限を付与した状態でコマンドプロンプトを立ち上げて、下記のコマンドを入力します。

f:id:FutureStandard:20170601130916p:plain

ルーティングテーブルが変わったことを確認するために、あらためてルーティングテーブルを確認してみます。赤く囲われたところに、新しいルーティング情報が追加されたことがわかります。

f:id:FutureStandard:20170601131159p:plain

そこで、あらためて先ほどのpingを打てみます。

f:id:FutureStandard:20170601130952p:plain

すると、前回では192.168.1.46へのpingが通りませんでしたが、今回はこちらまでのpingが通っている事がわかります。これで、WindowsPCから192.168.1のネットワークへの足がかりが出来ました。

続いて、同じように今回の到達目標である192.168.1.201のマシンにたいしても、ルーティングの設定を行い、192.168.50のネットワークに到達できるようにします。

f:id:FutureStandard:20170601131423p:plain

ルーティングテーブルを確認すると、赤で囲った部分に192.168.50のネットワークへの経路が設定された事がわかります。

f:id:FutureStandard:20170601132926p:plain

3.iptablesを用いたフォワーディング

今回の目的は、モバイルルータのネットワークに属するWindows PC(192.168.55.4)からオフィスのネットワークに属するラズベリーパイ(192.168.1.201)に接続する事が目的です。そこで、WindosPCから対象となるラズベリーパイpingを打ってみます。

f:id:FutureStandard:20170601131646p:plain

原状では、Windows PC(192.168.55.4)からラズベリーパイ(192.168.1.201)までのpingは通りません。中継器となるラズベリーパイまでは通信が届いているものの、中継器から先へはネットワークパケットが届いていない状態です。

そこで、中継器のラズベリーパイにおいて、ネットワークパケットを転送するようにiptablesフォワーディング設定を行います。

まずは、IP転送が可能かどうか、下記のコマンドで確認します。「net.ipv4.ip_forward = 1」と表示されればIP転送が可能な状態です

f:id:FutureStandard:20170601131753p:plain

つづいて、iptablesの設定を行います。今回設定した内容は、オフィスのネットワークに属している有線側(eth0)からのパケットを、モバイルルータのネットワークに属している無線側(ra0)に転送する事、およびその反対側の設定です。そこで、rootユーザとなって下記のようなコマンドを実施します。

f:id:FutureStandard:20170601131846p:plain

これでネットワークパケットの転送設定が出来ました。

以上で、モバイルルータ側に属するWindowsPC(192.168.1.55.4)からオフィスのネットワークにあるターゲットラズベリーパイ(192.168.1.201)への接続準備が整いましたので、pingを打ってみます。

f:id:FutureStandard:20170601132001p:plain

pingが無事に通じる事が確認されました。WindowsPCからターゲットラズベリーパイへのSSH接続を行ったうえで、ipコマンドを実行すると、下記のように表示され、無事にネットワークを跨いで接続できている事が確認出来ました。

f:id:FutureStandard:20170601132027p:plain

4.最後に

今回のブログでは、ラズベリーパイを利用して、社内ネットワークとモバイルルータのネットワークを接続する手順を示し、ネットワーク間の通信を行える環境を作成しました。こちらは日常的には使う事は無いかもしれませんが、ネットワークに関する試験等で一時的に複数ネットワークを構築したいときには役立つ方法かと思います。