TomatoVPNでOpenVPNルーティングモード

TomatoVPNはTomatoにOpenVPNを導入したファームです
参考
TomatoVPN 1.25vpn3.4  TomatoVPN 1.27vpn3.4 (OpenVPN 2.1.1) http://tomatovpn.keithmoyer.com/
OpenVPN 2.1.1+OpenVPN GUI for Windows 1.0.3 [日本語版] http://www.openvpn.jp/guijp.html
TomatoVPNのWebGUIの説明 http://www.linksysinfo.org/forums/showpost.php?p=334426

ルーティングモード(TUN)かブリッジモード(TAP)か
VPNを構成する場合、2つのモードがあります
ルーティングモード:異なるサブネットをルーターで継いだようなイメージ
ブリッジモード:全てのPCが1つのサブネットに属するようなイメージ
ルーティングモードで設定してみました

============================================================================

ルーティングモード(TUN)

============================================================================

実験のため親ルーターをインターネットに見立てTomatoルーターがインターネットに繋がっていると仮定して設定する
PC1,PC2,PC3がお互いアクセスできるように構成するのが目標
接続図

Tomato1,Tomato2 は Buffalo WHR-HP-G54,WHR-G54S に TomatoVPN を導入したもの
PC1,PC2,PC3 はWindowsXPパソコンで、PC3にはOpenVPNをインスツールしている
[親ルーター]
インターネット回線と見立てる
普通にDHCPで子にIPを配り、NAPTでインターネットに接続する設定
ここではDHCPで192.168.11.*のIPを配るよう設定した(Buffaloデフォルト)

----------------------------------------------------------------------------
----------------------------------------------------------------------------

【静的鍵での設定】


利点:簡単
欠点:1つのサーバーに1つのクライアントしか接続しかできない

[静的鍵の作成]
OpenVPN / OpenVPN GUI for Windows 日本語版
http://www.openvpn.jp/guijp.html
からダウンロードしてインスツール
スタート→すべてのプログラム→OpenVPN→Utilities→Generate a static Open VPN key を選択
C:\Program Files\OpenVPN\config に key.txt が作成される

[サーバー側(Tomato1)]
Basic の項目
 WAN側でインターネット接続の設定をする。
  ここではDHCP。192.168.11.2が振られた。
 LAN側でDHCPの設定
  Router IP Address は 192.168.12.1。
  DHCP Server:ON。192.168.12.*のIPを配るよう設定した。*範囲はデフォルトで100-149。
VPNの設定
VPN Tunneling→server→server1→Basic
  Start with WAN を チェック(手動で起動する場合はチェック不要)
  Interface Type は TUN
  Protocol は UPD(デフォルト)
  Port は 1194(デフォルト)
  Firewall は Automatic(デフォルト)
  Authorization Mode は StaticKey
  Local/remote endpoint addresses は 10.8.0.1 10.8.0.2
  [Save]を押す
VPN Tunneling→server→server1→Advanced
  Custom Configuration に
   route 192.168.13.0 255.255.255.0
  [Save]を押す
VPN Tunneling→server→server1→Keys
  Keys StaticKey にKey.txtの中身を全てコピー
  [Save]を押す
VPN Tunneling→server→server1→status
  [StartNow]を押す
  Server is not running or status could not be read の表示が消えてGeneral Statisticsが表示されればOK
  起動しないときはStatus→Logs→でLOGのエラーを確認

[クライアント側1(Tomato2)]
Basic の項目
 WAN側でインターネット接続の設定をする。
  ここではDHCP。192.168.11.3が振られた。
 LAN側でDHCPの設定
  Router IP Address は 192.168.13.1。
  DHCP Server:ON。192.168.13.*のIPを配るよう設定した。*範囲はデフォルトで100-149。
VPNの設定
VPN Tunneling→Client→Client1→Basic
  Start with WANをチェック(手動で起動する場合はチェック不要)
  Interface Type は TUN
  Protocol は UPD(デフォルト)
  Server Address/Port :接続先のIP/Port 192.168.11.2/1194(Tomato1のWAN側IP)
  Firewall は Automatic(デフォルト)
  Authorization Mode は StaticKey
  Create NAT on tunnel をチェックorチェックはずす(どっちか良くわからない)
  Local/remote endpoint addresses は 10.8.0.2 10.8.0.1
  [Save]を押す
VPN Tunneling→server→Client1→Advanced
  Custom Configuration に
   route 192.168.12.0 255.255.255.0
   ping 10 (これを書いておくとサーバーからクライアントへの接続が保たれる)
  [Save]を押す
VPN Tunneling→Client→Client1→Keys
  Keys StaticKey にKey.txtの中身を全てコピー
  [Save]を押す
VPN Tunneling→Client→Client1→status
  [StartNow]を押す
  Server is not running or status could not be read の表示が消えてGeneral Statisticsが表示されればOK
  起動しないときはStatus→Logs→でLOGのエラーを確認

サーバー側(Tomato1)のLANにPC1を接続
  DHCPで192.168.12.112が振られた

クライアント側(Tomato2)のLANにPC2を接続
  DHCPで192.168.13.111が振られた

PC1からPing 192.168.13.111
PC2からPing 192.168.12.112
でどちらもOKなら成功

[クライアント側2(PC3)]
OpenVPN / OpenVPN GUI for Windows 日本語版
http://www.openvpn.jp/guijp.html
からダウンロードしてインスツール

C:\Program Files\OpenVPN\config に key.txt をコピー
C:\Program Files\OpenVPN\sample-config\sample.ovpnをC:\Program Files\OpenVPN\configにコピー

sample.ovpn の変更箇所

remote myremote
  ↓
remote 192.168.11.2(接続先のIP)

dev tap
  ↓
dev tun

ifconfig 10.3.0.1 255.255.255.0
  ↓
;ifconfig 10.3.0.1 255.255.255.0(コメントアウト)

;tun-mtu 1500
;ifconfig 10.3.0.1 10.3.0.2
  ↓
tun-mtu 1500
ifconfig 10.8.0.2 10.8.0.1

追加
route 192.168.12.0 255.255.255.0 (サーバーのサブネットへのルート)

必要な部分だけ書き出すと
remote 192.168.11.2
dev tun
tun-mtu 1500
ifconfig 10.8.0.2 10.8.0.1
secret key.txt
ping 10
comp-lzo
verb 4
mute 10
route 192.168.12.0 255.255.255.0
以上

この場合、サーバー側(Tomato1)に設定した
VPN Tunneling→server→server1→Advanced
  Custom Configuration に
   route 192.168.13.0 255.255.255.0
は不要

スタート→すべてのプログラム→OpenVPN→OpneVPNGUI で起動
PC3からPC1にPingが通れば成功

静的鍵では1対1の接続しかできないのでPC1とPC2、またはPC1とPC3の接続しかできない。
PC1,PC2,PC3を同時に接続したければ下記のTLSでの方法を用いる

あまり必要でないと思われるが
PC1からPC3へはトンネルに割り当てられたIP 10.8.0.2 でならPingが通る
PC3の実アドレス 192.168.11.?? にPingを通したい場合は、PC3のルーティング機能をONにする必要がある
コントロールパネル→パフォーマンスとメンテナンス→管理ツール→サービスで
Routing and Remote Access を開始する。
また、サーバー側(Tomato1)の設定
VPN Tunneling→server→server1→Advanced
  Custom Configuration に
   route 192.168.11.0 255.255.255.0
が必要
更にPC3のサブネット内のほかのPCにPingを通すには、
PC3のサブネットのルーターに192.168.12.0へのゲートウエイをPC3のIPで設定する必要がある

----------------------------------------------------------------------------
----------------------------------------------------------------------------

【TLSでの設定】

利点:1つのサーバーに対して複数のクライアントが接続できる
欠点:面倒

[証明書・秘密鍵等の作成]
PCで行う
OpenVPN / OpenVPN GUI for Windows 日本語版
http://www.openvpn.jp/guijp.html
からダウンロードしてインスツール

1.プライベートCAの構築とCA証明書・秘密鍵の作成
2.サーバ証明書・サーバ秘密鍵の作成
3.クライアント証明書・クライアント秘密鍵の作成
4.DHパラメータの生成

敷田研究室 OpenVPN on Windows (1) http://www-shikida.jaist.ac.jp/modules/xeblog/index.php?action_xeblog_details=1&blog_id=59
ゼロ円でできるインターネットVPN(3/4) http://www.atmarkit.co.jp/flinux/special/openvpn/openvpnc.html

などに従って作成

できたファイル
ca.crt server.crt server.key dh1024.pem
Client1.crt Client1.key
Client2.crt Client2.key
クライアント用ファイルはクライアントの数だけ必要なのでここでは2組作成

サーバー側に必要なファイル
ca.crt server.crt server.key dh1024.pem

クライアント側に必要なファイル
ca.crt Client1.crt Client1.key Client2.crt Client2.key

Tomato1とTomato2の時計とタイムゾーンは正しく合わせておかないと認証に失敗するので注意
(そのために実験時にも最上位をインターネットに接続している)

[サーバー側(Tomato1)]
Basic の項目
 WAN側でインターネット接続の設定をする。
  ここではDHCP。192.168.11.2が振られた。
 LAN側でDHCPの設定
  Router IP Addressは192.168.12.1。
  DHCP Server:ON。192.168.12.*のIPを配るよう設定した。*範囲はデフォルトで100-149。
VPNの設定
VPN Tunneling→server→server1→Basic
  Start with WAN を チェック(手動で起動させるならチェック不要)
  Interface Type は TUN
  Protocol は UPD(デフォルト)
  Port は 1194(デフォルト)
  Firewall は Automatic(デフォルト)
  Authorization Mode は TLS
  Extra HMAC authorization は Disabled(デフォルト)
  VPN subnet/netmask 10.8.0.0 255.255.255.0 (デフォルト)
  [Save]を押す
VPN Tunneling→server→server1→Advanced
  Push LAN to clients をチェック(チェックしないとサーバー側のSubnet/Netmaskがクライアントに届かない)
  Direct clients to redirect Internet traffic チェックせず(デフォルト)
  Respond to DNS チェックせず(デフォルト)
  Encryption cipher Use Default (デフォルト)
  Compression Adaptive (デフォルト)
  TLS Renegotiation Time -1 (デフォルト)
  Manage Client-Specific Options をチェックすると以下に設定項目が増える
  Allow Client<->Client チェック(クライアント同士の通信許可)
  Allow Only These Clients チェックせず(設定したクライアントのみ接続可能にする)
  クライアント情報を入力
  Enable を チェック(チェックしないと設定項目が反映されない)
  CommonName に Client1(クライアント証明書を作ったときの名前)
  Subnet に 192.168.13.0(Client1のサブネットとネットマスク)
  Netmask に 255.255.255.0
  Push チェック(そのサブネットを他のクライアントにも知らせるかどうかの設定)
  [add]を押す
  [Save]を押す
  これでサーバーからクライアントへのアクセスもできるようになる
  このページに説明がある
   http://tomatovpn.keithmoyer.com/2009/03/client-specific-options.html
VPN Tunneling→server→server1→Keys
  Certificate Authority に ca.crt の中身を全てコピー
  Server Certificate に server.crt の中身を全てコピー
  Server Key に server.key の中身を全てコピー
  Diffie Hellman parameters に dh1024.pem の中身を全てコピー
  [Save]を押す
VPN Tunneling→server→server1→status
  [StartNow]を押す
  Server is not running or status could not be read の表示が消えて接続状態が表示されればOK
  起動しないときはStatus→Logs→でLOGのエラーを確認

[クライアント側1(Tomato2)]
Basic の項目
 WAN側でインターネット接続の設定をする。
  ここではDHCP。192.168.11.3が振られた。
 LAN側でDHCPの設定
  Router IP Addressは192.168.12.2。
  DHCP Server:ON。192.168.13.*のIPを配るよう設定した。*範囲はデフォルトで100-149。
VPNの設定
VPN Tunneling→Client→Client1→Basic
  Start with WAN を チェック(手動で起動させるならチェック不要)
  Interface Type は TUN
  Protocol は UPD(デフォルト)
  Server Address/Port :接続先のIP/Port 192.168.11.2/1194
  Firewall は Automatic(デフォルト)
  Authorization Mode は TLS
  Extra HMAC authorization Disabled
  Create NAT on tunel をチェック
  [Save]を押す
VPN Tunneling→Client→Client1→Keys
  Certificate Authority に ca.crt の中身を全てコピー
  Client Certificate に Client1.crt の中身を全てコピー
  Client Key に Client1.key の中身を全てコピー
  [Save]を押す
VPN Tunneling→Client→Client1→status
  [StartNow]を押す
  Server is not running or status could not be read の表示が消えてGeneral Statisticsが表示されればOK
  起動しないときはStatus→Logs→でLOGのエラーを確認

サーバー側(Tomato1)のLANにPC1を接続
  DHCPで192.168.12.112が振られた

クライアント側(Tomato2)のLANにPC2を接続
  DHCPで192.168.13.111が振られた

PC1からPing 192.168.13.111
PC2からPing 192.168.12.112
でどちらもOKなら成功

[クライアント側2(PC3)]
OpenVPN / OpenVPN GUI for Windows 日本語版
http://www.openvpn.jp/guijp.html
からダウンロードしてインスツール

C:\Program Files\OpenVPN\config に3つのファイルをコピー
ca.crt
Client2.crt
Client2.key

C:\Program Files\OpenVPN\sample-config\client.ovpn を C:\Program Files\OpenVPN\config にコピー

client.opn の変更箇所

;dev-node MyTap
 ↓
dev-node "ローカル エリア接続 3"(マイネットワーク→プロパティーで表示されたTAP-W32AdapterV9の名前を書く)

remote my-server-1 1194
 ↓
remote 192.168.11.2 1194(サーバーのIPを書く)

cert client.crt
key client.key
 ↓
cert client2.crt(コピーしたファイル名を書く)
key client2.key(コピーしたファイル名を書く)

必要な部分だけ書き出すと
client
dev tun
dev-node "ローカル エリア接続 3"
proto udp
remote 192.168.11.2 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client2.crt
key client2.key
ns-cert-type server
comp-lzo
verb 3
以上

スタート→すべてのプログラム→OpenVPN→OpneVPNGUI で起動
PC3からTomato1,Tomato2配下のPCにアクセスできる
Tomato1,Toamto2からPC3へのアクセスにはVPNで割り当てられたIP(ここでは10.8.0.10だった)を使う。

-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------

Tomatoをメインルータとして使わずにVPNを構成できるか


子ルーターは両方ともNAPTをONで使用
PC1とPC2の通信をTomato1とTomato2の間のVPNを通して行えるようにする

サーバー側
[子ルータ1]
ルーティングテーブル設定
192.168.13.0 255.255.255.0 GW 192.168.12.2
ポートフォワーディング設定
WAN側UPD1194ポートをLAN側192.168.12.2のUPD1194ポートへ

[Tomato1]
Basic→Network
  Type Disabled
  Use WAN port for LAN をチェック
  RouterIpAddress 192.168.12.2
  DefaultGateway 192.168.12.1
  Static DNS 192.168.12.1
  DHCP Server チェックはずす
VPNの設定は上記と同じ

クライアント側
[子ルータ2]
ルーティングテーブル設定
192.168.12.0 255.255.255.0 GW 192.168.13.2

[Tomato2]
Basic→Network
  Type Disabled
  Use WAN port for LAN をチェック
  RouterIpAddress 192.168.13.2
  DefaultGateway 192.168.13.1
  Static DNS 192.168.13.1
  DHCP Server チェックはずす
VPNの設定は上記と同じ
VPN Tunneling→Client→Client1→Basic
  Server Address/Port :接続先のIP/Port 192.168.11.2/1194(子ルーター1を指定)


PC1からPC2へ、PC2からPC1へPingが通ることを確認


-----------------------------------------------------------------------------------------

TOPに戻る

2010/3/10