VPNを利用したRTMネットワーク設定方法

OpenRTM-aistを利用していると、ルータ・FirewallやNATの内と外のRTC同士を接続したい場合があります。 NATの設定を自分で変えることができる場合、NATのポートフォワーディング機能を利用し、rtc.conf の corba.alternate_iiop_addresses オプションを指定することでNAT内外のRTC同士を連携させることも可能です。 しかし、RTCの数だけポートフォワーディングの設定が必要であり、また自分で設定できないNATや会社や学校のFirewallに対してはこの方法を利用できません。

そこで、VPNにより仮想ネットワークを構築しRTC間の通信をすべてVPNで行うことにより、Firewallなどがあってもその内外のRTC同士を連携させることができます。 このドキュメントではVPNにより仮想ネットワーク

VPNサーバの設定 (Linux)

pptpdのインストール

まずはじめにVPNサーバ PPTPDをインストールします。Ubuntu や Debian などではパッケージが提供されていますので、以下のようにapt-getでインストールできます。

 $ sudo apt-get install pptpd
 [sudo] password for openrtm
 
 :
 
 Starting PPTP Daemon: pptpd.

pptpd.confの設定

次に/etc/pptpd.confを編集しpptpdサーバの設定を行います。

$ sudo vi /etc/pptpd.conf

viなどのエディタでpptpd.confを開き、設定ファイル下にあるlocalip, remoteipを設定します。 以下では最後の2行に localipとして 192.168.22.1、remoteipとして 192.168.22.10-100 を設定しています。

 [/etc/pptpd.confファイル]
 #localip 192.168.0.1
 #remoteip 192.168.0.234-238,192.168.0.245
 # or
 #localip 192.168.0.234-238,192.168.0.245
 #remoteip 192.168.1.234-238,192.168.1.245
 localip 192.168.22.1
 remoteip 192.168.22.10-100

ここに設定するアドレスは基本的に現在使用していないネットワークおよびIPアドレスを指定してください。 この例では外部から接続してきたクライアントには192.168.22.10~100までのアドレスを付与します。

ネットワーク構成

通常VPNクライアントに対してはサーバは適当なIPアドレスを割り振るように設定することが多いようですが、RTMネットワークとして設定する場合、クライアントPCのIPアドレスを固定に設定したほうがRTCの設定もやりやすくなります。

ここでは、RTM用のネットワーク設定として以下のものを想定します。

PC名 IPアドレス 備考
PC0 192.168.22.1 VPNサーバ, CORBAネームサーバ
PC1 192.168.22.10 RTCが動作するPC
PC2 192.168.22.11 RTCが動作するPC
PC3 192.168.22.12 RTCが動作するPC

/etc/ppp/chap-secretsの設定

上記のネットワーク構成を踏まえたうえで、次にPPTP接続用のユーザID、パスワードを/etc/ppp/chap-secretsファイルに設定します。

 $ sudo vi /etc/ppp/chap-secrets
 
 [/etc/ppp/chap-secretsファイル]
 # Secrets for authentication using CHAP
 # client     server     secret               IP addresses
 pc1 pptpd openrtm1 192.168.22.10
 pc2 pptpd openrtm1 192.168.22.11
 pc3 pptpd openrtm1 192.168.22.12

ここではclient(ユーザID)としてpc1, pc2, pc3を定義し、serverにpptpd、secret(パスワード)にopenrtm1, openrtm2, openrtm3、IP address(クライアントに割り振るIPアドレス)は上で決めたIPアドレスを設定しています。

サーバの再起動

以上ができたら、pptpdを再起動します。

 $ sudo /etc/init.d/pptpd restart

VPNクライアントの設定(Linux)

VPNクライアントの設定を行います。Linuxの場合は、サーバ同様にまずpptpdをインストールします。

エントリの作成

VPN接続する際の設定情報を pptpsetup コマンドを利用して作成します。

 $ sudo pptpsetup --create pc1 --server pc0.mydomain --username pc1 --password openrtm1 --encrypt

コマンドの引数の意味は以下の通りです。

  • pc1: エントリ名
  • --server pc0.mydomain: VPNサーバの指定
  • --username pc1: 上記で設定したユーザ名 pc1
  • --password openrtm1: 上記で設定したパスワード openrtm1
  • ''--encrypt::' 暗号化オプション

サーバへの接続

VPNサーバへの接続はpppdコマンドを使って以下のように行います。

 $ sudo pppd call pc1

これでVPNサーバに接続されます。IPアドレスが上で設定したpc1のアドレス(192.168.22.10) 確認してみます。

 $ ifconfig ppp0
 
 ppp0      Link encap:Point-to-Pointプロトコル  
           inetアドレス:192.168.22.10  P-t-P:192.168.22.1  マスク:255.255.255.255
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  メトリック:1
           RXパケット:5 エラー:0 損失:0 オーバラン:0 フレーム:0
           TXパケット:5 エラー:0 損失:0 オーバラン:0 キャリア:0
           衝突(Collisions):0 TXキュー長:3 
           RXバイト:62 (62.0 B)  TXバイト:68 (68.0 B)

上で設定したIPアドレス 192.168.22.10 が割り当てられていることが確認できました。

ルーティングの設定

以上の操作でpc1とpc0の間にVPNトンネルができました。従って、pc1からはpc0に対して192.168.22.1というIPアドレスがアクセス可能です。 しかし、VPNサーバに接続された他のクライアントには到達できません。PC2 (192.168.22.11) をVPN接続した状態でpingを打ってみます。

 $ ping 192.168.22.11
 PING 192.168.22.11 (192.168.22.11) 56(84) bytes of data.

このように表示され止まってしまいます。Ctrl+Cで抜けてください。

VPNクライアント間で通信できるようにルーティングを設定します。

 $ sudo route add -net 192.168.22.0 gw 192.168.22.1 netmask 255.255.255.0

再度pingを打って確かめます。

 $ ping 192.168.22.11
 PING 192.168.22.11 (192.168.22.11) 56(84) bytes of data.
 64 bytes from 192.168.22.11: icmp_seq=1 ttl=127 time=46.2 ms
 64 bytes from 192.168.22.11: icmp_seq=2 ttl=127 time=32.3 ms
 64 bytes from 192.168.22.11: icmp_seq=3 ttl=127 time=29.8 ms
 ^C
 --- 192.168.22.11 ping statistics ---
 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
 rtt min/avg/max/mdev = 29.868/36.146/46.203/7.185 ms

これで、別のクライアントにも到達できるようになりました。

VPNの切断

VPNから切断するときは pkill を使ってpptpのプロセスをkillします。

 $ sudo pkill pptp

VPNクライアントの設定(Windows)

Widnowsでは標準でVPNが組み込まれており、ウィザードを利用して簡単にVPNをセットアップすることができます。

VPN設定ウィザード

まず、コントロールパネルから「ネットワークと共有センター」を開きます。 「ネットワーク設定の変更」→「新しい接続またはネットワークのセットアップ」をクリックします。

vpn_windows_00.png
ネットワークと共有センター

すると、以下の画面「接続またはネットワークのセットアップ」に遷移します。ここで「職場に接続します」をクリックし「次へ」ボタンを押します。

vpn_windows_01.png
接続またはネットワークのセットアップ

次に新規接続を作成します。上のラジオボタン「いいえ、新しい接続を作成します(C)」を選択し「次へ」ボタンを押します。

vpn_windows_02.png
職場への接続(1):新しい接続の作成

次に接続方法を選びます。ここではVPNを選択してください。

vpn_windows_03.png
職場への接続(2):VPNの使用

次にVPNサーバのアドレスと接続名を入力します。VPNのサーバ名またはIPアドレスを入力してください。接続先の名前は接続を他と区別するためにつける名前です。ここではRTM-VPNとしました。

vpn_windows_04.png
職場への接続(3):サーバアドレスの設定

次にユーザ名とパスワードを入力します。サーバ上で設定したユーザ名とパスワードを入力します。ここではpc2/openrtm2を設定しています。最後に「接続」ボタンを押し接続します。

vpn_windows_05.png
職場への接続(4):ユーザ名とパスワードの入力

接続には10数秒程度かかります。

vpn_windows_06.png
職場への接続(5):接続中

接続が完了すると以下の画面になります。

vpn_windows_07.png
職場への接続(6):接続完了

ルーティングの設定

上述のLinuxの場合と同様に、ルーティングの設定をする必要があります。

まず、コマンドプロンプトを管理者権限で開きます。 スタートメニューの「プログラムとファイルの検索」に cmd と入力し Ctrl+Shift+Enterを押します。 画面全体が暗くなりユーザアカウント制御のダイアログが現れますので「はい」を押して続けます。

 C:\> route add 192.168.22.0 mask 255.255.255.0 192.168.22.1

ipconfigコマンドでVPNのアドレスが 192.168.22.11 になっていることを確認します。

 C:\> ipconfig

さらに、もう一つのクライアント pc1 に対して ping を打ってみます。

 C:\ ping 192.168.22.11

これでpingが通っていればVPN接続成功です。

VPNの接続・切断

VPNの切断は「ネットワークと共有センター」から右の「アダプタの設定の変更」を選択します。

vpn_windows_00.png
ネットワークと共有センター

アダプタの一覧の中にRTM-VPNがありますので、右クリックで「切断」を選ぶと切断できます。 再度接続する場合もこの画面からRTM-VPNを右クリックし「接続」を選ぶことで接続できます。

vpn_windows_08.png
アダプタの設定の変更

RTC等の設定

以上の設定でVPNネットワークが構成できました。このネットワーク上でRTCを動作させるための設定を行います。

ネームサーバ

ネームサーバはVPNサーバと同じpc0上で動作させることになっていました。 VPN接続後rtm-namingコマンドでネームサーバを再起動します。

 $ rtm-naming

RTCの設定 (rtc.conf)

VPNサーバ(pc0)またはVPNクライアント(pc1,pc2,pc3)上でRTCを動作させる場合は、以下のようにendpointを設定します。

 [pc0用のrtc.conf]
 corba.nameservers: 192.168.22.1
 corba.endpoints: 192.168.22.1
 
 [pc1用のrtc.conf]
 corba.nameservers: 192.168.22.1
 corba.endpoints: 192.168.22.10
 
 [pc2用のrtc.conf]
 corba.nameservers: 192.168.22.1
 corba.endpoints: 192.168.22.11
 
 [pc3用のrtc.conf]
 corba.nameservers: 192.168.22.1
 corba.endpoints: 192.168.22.12

これで、すべてのRTC間通信はVPNを通じて行われます。

パフォーマンス

VPN接続経由で通信すると、通常よりもパフォーマンスが低下する場合があります。 パフォーマンスを上げる方法に関してはここでは詳しく述べませんが、簡単なベンチマークとしてカメラコンポーネントとビューアコンポーネントで画像の転送を行った場合のパフォーマンスの例を挙げます。

  • pc0
    • Ubuntu 10.04 x86_64
    • Dell PowerEdge 2900
      • Intel(R) Xeon(R) CPU X5450 @3.00GHz x2
      • Memory 16GB
  • pc1
    • Ubuntu 10.04 i386
    • VMware Fusion 6 (on Mac Book Retina 2.7GHz Corei7, 16GB Memory, OS X 10.9)
      • 2.7GHz Corei7 x2
      • Memory 1GB
  • pc2
    • Windows7 64bit
    • VMware Fusion 6 (on Mac Book Retina 2.7GHz Corei7, 16GB Memory, OS X 10.9)
      • 2.7GHz Corei7 x2
      • Memory 4GB
通常 暗号化あり 暗号化なし
pc1->pc2 (VGA) 8 fps 0.5 fps 1.1 fps
pc2->pc1 (QVGA) 22 fps 2.3 fps 5.8 fps

暗号化有りの場合と無しの場合では約倍程度の速度の差がありますが、いずれの場合も通常の通信時に比べ1/10~1/20程度の速度になっていることがわかります。 WindowsのVPNが特に遅いという報告もありますが、詳細は不明です。

最新バージョン

初めての方へ

Windows msi(インストーラ) パッケージ (サンプルの実行ができます。)

C++,Python,Java,
Toolsを含む
1.1.2-RELEASE

RTコンポーネントを開発するためには開発環境のインストールが必要です。詳細はダウンロードページ

統計

Webサイト統計
ユーザ数:1629
プロジェクト統計
RTコンポーネント286
RTミドルウエア21
ツール20
文書・仕様書1

Join our slack

Enter email address for slack invite.

旧Webサイト

OpenRTM.org旧Webサイト

OpenHRP3

動力学シミュレータ

Choreonoid

モーションエディタ/シミュレータ

OpenHRI

対話制御コンポーネント群

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク

VirCA

遠隔空間同士を接続し、実験を行うことが可能な仮想空間プラットホーム