Linuxトンネリング・ネットワーク

  • 2021年4月16日

皆さん、こんにちは、
私は大阪の中之島で制御系ソフトウェア開発会社を経営しております
Imura と申します。東大阪在住の猫大好き人間です。

私が社会人に成りたての頃に、UNIXと出会い、様々なワークステーションのネットワーク機能やOSのドライバ開発とさまざまなLinuxのディストリビューションを使ったアプリケーション開発をおこなってきました。

今回のご紹介内容は、ネットワーク機能を活用した遠隔監視システムになります。
これにはLinuxの特徴を表現しているトンネリング機能とNAT及びIPマスカレードが利用されています。また、ユーザから見たネットワークコスト削減を実現したVPN機能を含めて解説させて頂きます。
ただし、専門はソフトウェア開発ですので、関連するプログラミングについても少しだけ触れながら説明をしていきますので、ソフトウェアの仕組みを想像しながら読んでください。
ネットワークやシステムへの理解が身近に感じられるかもしれません。

まず始めは、Linuxのネットワーク機能の利用方法について説明をします。

ネットワーク機能を理解するには、TCP/IPについて理解を深める必要がありますね。しかし、最初からこの部分を説明すると、ISOのネットワーク標準の階層説明が必要になるので、それだけで本を1冊書くほどの量の説明になってしまいます。

そこで大変申し訳ないですが、今回の読者はネットワークの基礎となるTCP/IPをご存知の方を対象に説明をさせて頂きます。ご理解ください。

NATとIPマスカレード

まず説明する前に、主人公のIPアドレスについて簡単にふれておきます。もう当たり前に使われていますIPアドレスは、人間の世界でいう「住所と名前」にあたります。
そのIPアドレスには、グローバルアドレスとローカルアドレスが存在します。グローバルアドレスとは、世界で唯一のユニークなアドレスになり、ローカルアドレスとは、閉じられた世界の中で自由に割り当てできるアドレスの体系です。この2つのアドレスの体系を持つ事で、世界の住所と名前をユニークで表現できる仕組みができています。

NAT

NAT (Network Address Transfer)という機能は、この2つのアドレスを相互に変換するための手法の事になります。
つまり、内部のIPアドレス機器が外出するときには、 外行き用の洋服に着替えさせてくれます。

NATは、IPのアドレス変換をします。
「グローバル←→プライベート」のIPアドレス変換
「グローバル←→グローバル」のIPアドレス変換
「プライベート←→プライベート」のIPアドレス変換

しかし、NATに似通った機能として、Linuxには、IPマスカレード機能が存在します。IPマスカレードとは、回線側(WAN側)には、プロバイダから割り当てられたグローバルIPアドレスがひとつありますが、LAN側では複数のパソコンによる複数のローカルIPアドレスがあります。

IPマスカレード

IPマスカレードは、UDP/TCPのポート番号を変換します。
静的なIPマスカレードをポートフォワーディングといいます。
これはWAN側のグローバルIP宛で着信したIPパケットのうち、指定ポートに向けられたパケットをNAT環境下の特定のノード(機器)に転送するというルーターの機能になります。

インターネット上では、グローバルIPアドレスを使って通信する必要がありますので、LANに接続されているパソコンのローカルIPアドレスを、自動的にグローバルIPアドレスに変換して通信します。

この機能を使用することで、プライベートIPアドレスを持ったLAN側の機器が、WAN側よりIPパケットを受信することが可能となります。
NAT環境下で、ビデオ会議装置が着信を行いたいときに有効な手段となります。

プログラミング

さてここでは、IPアドレス変換のプログラミングについてもふれておきますね。
簡単にいうとソケットプログラムになります。名前だけでも覚えておいてください。

ソケットプログラミンで最初に記述するのは、送信したり応答したりする端点(ノード)のIPアドレスの定義になります。
どこからソケットを受け付けるのか、ネットワークアドレスとホストアドレスを区別してイベントを受け取る準備をして、イベントが発生した時に、接続のパイプの中からデータを取り込みます。
ここでIPアドレスを内部のネットワークが解釈できるものに変換しますが、この変換についてはLinuxにより、共通機能が提供されています。基本的には、DNSだったり、routeだったり、rezolveだったり、目的に応じてシステムを使います。

この章ではアドレスの変換なので、IPアドレスの属性を理解して、自分のネットワークと相手のネットワークの変換を行うので、変換に必要なテーブルという入れ物を作るところから作成していきます。

トンネリング

トンネリングは、何らかの通信プロトコルを含むパケット等の全体を、別のレイヤ、あるいは同一のレイヤのプロトコルのデータ(ペイロード)に埋込んで通信するカプセル化(encapsulation) により実現されることが多く、通信したいプロトコルそのままでは通信することが不可能な場合などに利用されます。下図の通りです。

すなわち、インターネット等のなんらかのネットワークで接続されている、物理的、または、論理的に離れた2点間を、仮想の回線によりあたかも同一点であるかのように扱えるようにすることである。

もう少し簡単に表現すると、A点とB点をトンネリングして同じネットワークアドレスを利用するために、A-B間に大きな土管のような通信路を用意します。
その通信路は、A点の処理の塊を土管を通してB点まで運ぶ役割となります。この土管の事をトンネリングといいます。では、土管はどのようにつくられているかというと、単純なサーバ・クライアントのデータ送受信になっています。

しかし、土管というぐらいなので、その中に通るデータが他とは違い、A点のパケットのネットワーク情報が送りたいデータと共に隠蔽され土管データに格納されます。そのデータがB点まで送信され、B点でそのデータからA点で隠蔽されたデータを復活させ、Bネットワークにパケットとして流れていくという構造になります。

プログラミングするには、その仕様(実装されている内容)を理解しておく必要があります。
Linuxには、RFC(Request For Comments.)というドキュメントが用意されているので、それを参考に技術者はプログラムを作成します。

その時、サーバとクライアントに分かれて双方のやるべき手順を順番にプログラムするのですが、その場合にTCPIPのプロトコルにある状態遷移にそった状態の変化とデータを構成するヘッダ情報を意識して送りたいデータを誤りなく送るための手続きをプログラムで書きます。

VPN( Virtual Private Network )

インターネットVPNは安定性や信頼性よりもコストを重視している場合が多いです。一般的なインターネットは不特定多数の利用者が存在するため、トラフィック増大による通信の遅延や、通信途中でのデータ盗聴や改ざんのリスクが高くなります。

VPN以前は、外部から社内に安全にアクセスするには、専用線が用いられてきました。しかし専用線には、帯域を保証する一方、距離と回線速度によりコストが上がることや、1対1接続であるために複数箇所と接続する場合にコストが掛かってしまうというデメリットがあります。

例えば下記の図のように拠点間のデータを安心して送受信するには、その通信経路を外部からアクセスできない専用線で繋ぐ必要がありますが、それにはそれなりの費用がかかります。

そこでインターネットを利用して安全な通信経路を提供する方法として、VPNが利用されます。
インターネットVPNとは、インターネット回線を利用して離れた拠点同士のLANをつなぐ仮想技術です。
VPN接続ルータを拠点に設置することで社内ネットワークを構築でき、スマートデバイスにVPN接続ソフトウェアを導入することで、外にいても社内ネットワークに入ることができるリモートアクセスVPNも可能です。
構築認証セキュリティの強さとコストの安さは大きなメリットです。また、ルータさえあれば、設置するだけでVPNが構築できるのも大きな特徴だと言えるでしょう。

安全な拠点間通信を可能にするVPNは、主に「インターネットVPN」と「IP-VPN」「広域イーサネット」の3種類に分類されます。

IP-VPNは、通信事業者が提供する閉域網を利用して離れた拠点のLANをつなぎます。通信事業者の閉域網は、その通信事業者と契約した企業のみが利用できる閉ざされたネットワークで構築され、抜群の安全性を誇っています。データの暗号化がないためレスポンス速度が早く、回線品質も安定しています。暗号化してほしい場合は事業者によって対応してくれるケースもあります。IP-VPNはインターネットVPNと違い、通信事業者との契約が必要になります。そのため、業者選びもVPNの品質を保つ重要な検討事項に入ります。IP-VPNは3種類に分類されます。

IP-VPN種類概要暗号化
IPsec(L3レイヤー)組織間の拠点間をつなぐため、暗号化し、データの改ざんや情報漏洩を防ぐ(大阪と東京)高い
L2TP
(Layer2 Tunneling Protocol)
L2レイヤでの拠点間のトンネリングで、IPSECと合わせて利用するなし
PPTP
(Point to Point Tunneling Protocol)
会社とスマートデバイスをつなぐための方式、セキュリティ面では、IPSECより弱いが、高速利用できる、企業のVPNルータの必須機能である。低い

広域イーサネットは、地理的に離れたLAN間などをイーサネットインターフェースで接続する技術もしくは電気通信役務である。つまり、離れているLAN同士をつないで1つの大きなLANのように扱えるサービスです。

VPNのプログラム実装は、基本IPアドレスとポート番号により実現されて、双方のプロトコルという手順によって実現されている。また、IPSECのように暗号化の規定があり、それぞれの部品をうまく組み合わせて機能を実現する事になる。

プロトコルとしては、前述したRFCに詳しい解説があるので、それに準じた手順をプログラムしていくことになります。

遠隔監視システム

弊社では、Wallabyという遠隔監視システム(バーチャル・プライベート・ネットワークシステム)を開発しました。
その構造は、クラウドサーバにトンネリング機能を持たし、送信する側のネットワークと送信したい相手側のネットワークをつなげるというものです。今まで説明をしてきましたネットワーク機能をすべて利用して、WPNS(Wallaby Private Network System)と称しました。

下記の図は、生産工場で良く利用されているPLC(シーケンサ)と管理する事務所をつなぐ事例を紹介しています。

もちろん両端にはそれなりのアプリケーションが存在できるので、あたかも同じ場所でアプリケーションが動作しているようにできるものです。すなわち、遠隔地に設置されたPLC内で動くソフトと自分のPCの中で動くソフトが会話する事ができるようになります。もちろん、モニタリングは当たり前に可能です。

いまでは当たり前に利用出来ている機能ではありますが、Linuxがあって初めてできるものなのです。現在はルーターやブリッジと呼ばれる機械には、必ずと言ってよいほどLinuxが活用されています。

この仕組みは、M2M(マシンtoマシン)として産業利用されていました。20年前には、車の盗難防止として、車に設置されたセンサーとユーザをつなぐ重要な役割をもっています。

私たちは、M2Mを消費電力を監視するシステムに応用しておりましたが、今日は、IoTという名前で呼ばれています。

まとめ

最後までお読みいただきありがとうございます。

今回ご紹介したLiunxのネットワーク機能は、Linuxの一部のものになります。Linuxが優れているのは、オープンソースである事と、あらゆるネットワークに必要な機能の実証がこの中で実施されている事です。

私がネットワークにハマった40年前は、電話カップラで人がつながっている時代でしたが、それから10年毎に、ネットワークは進歩し続けております。そのネットワークの進歩の中に技術の基盤となっているのが、経路制御という技術になっていると思います。
電力向けには超高速なネットワークが必要となるでしょう。

次回は経路制御の面白さについて、大阪からお届けしてみたいと思います。
お楽しみに。

SSコラムは、こちらから
他のブログIoTシステムもご覧ください。

最新情報をチェックしよう!