スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DD-WRTで遊んでみる その2 -省電力OpenVPNサーバに仕立てる-

引き続きDD-WRTで遊んでみます。
今回は「DD-WRT with OpenVPNをNATの中で利用する(=OpenVPNサーバをNATの中で利用する)」です。


前回、DD-WRTにOpenVPNサーバを設定することによってVPNによるセキュアなリモートアクセスルータのような利用方法ができるようになりました。これで外部から自宅にアクセスできる環境が出来上がりました。

が・・・、うちではちょっと悩ましいです。というのは、今回改造したルータの無線機能は802.11g対応で54M(理論値)しか出ません。現役で動いているBuffaloのルータは802.11nに対応しており300M(理論値)まで対応しています。なので、単純にリプレースすると速度が低下する・・・。
じゃあ、現役ルータはDD-WRT化すればいいじゃん!と思ったら対応していない。むぅ・・・
安い中古買うか?とも真剣に悩んだが、802.11acのドラフト対応製品も市場に出てきてるタイミングにどうなの・・?

というわけで、DD-WRTをリモートアクセスルータとするのではなく単純な省電力OpenVPNサーバにしてみます。
そして、これをBaffaloのルータのLANを側に配置します。
つまりこういう構成ですね。

ddwrt-vpnsv-testfig.png



DD-WRT(+OpenVPN)でリモートサーバとする場合、クライアントの通信はグローバル側にVPNを貼り、その通信をLAN側のプライベートインタフェースに転送するような前回の構成がノーマル?(笑)な使い方だと思います。


今回は、LAN側に設置するのでブロードバンドルータで言うと、WAN側I/Fに自宅のプライベートIPが割当たる構成になります。通常構成だとこの下に更に別のプライベートアドレスを作る構成になると思いますが、細かい説明は省きますが、複雑、既存への影響、無線PCとの通信などでのデメリットもあると思い今回はボツ。
ddwrt-vpn2.png


またOpenVPNにはL2VPNのようなブリッジングモードも構成可能らしいのですが、ブロードキャスト等もすべて通過してしまうので今回はやめました。この場合は、リモート端末が自宅LANと同じスイッチにつながるイメージになります。


今回のポイントとしては
 ・OpenVPNサーバをNAT(マスカレード)配下に配置
 ・外部からOpenVPNサーバにアクセスした後に、自宅LANに接続
  つまりルータの入ったI/Fから暗号化解除されて再び出てくる感じ
という形になると思います。通信を図にするとこんな感じ。
ddwrt-vpn-routefig.png

さて、前置きが長くなりましたが概念がわかれば、やることは簡単です。

■■ 環境 ■■
・OpenVPNサーバ機器:Buffalo WHR-HP-G54 
・OpenVPNソフトウェア:DD-WRT(v2-sp vpn) with OpenVPN
・OpenVPNクライアント:Ubuntu12.04

■■ 前提 ■■
前回の作業までが完了しており、DD-WRTへOpenVPNで接続できる環境ができていること。
できてない場合は前回も参考にしてください。
 





※ルータの設定は、LAN側にPCを接続し行なっています。


1.DD-WRTの設定1

・Webブラウザで、ルータの管理画面にアクセスします。
・[基本]タブを開きます。
・インターネット接続のIPアドレスを自宅のプライベートIPを割り当てます。
 今回は前回LAN側に利用していたセグメントをWAN側インタフェースに設定します。
 LAN側に前回のままだと192.168.1.1が設定されていると思うので、念のため違うアドレスにします。
 下の例では、WAN側を192.168.1.253、LAN側を192.168.100.1にしました。
OpenVPN-ifconfig.png


2.DD-WRTの設定2

・Webブラウザで、ルータの管理画面にアクセスします。
・[ネットワーク > PPTPサーバ/クライアント]の順にメニューをたどる。
・OpenVPNデーモンの中の、「OpenVPN Config」の設定を変更します。

前回の設定が終わって入れば

push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.66.1"
server 192.168.66.0 255.255.255.0
(略)

となっているはずです。

この内一番最初の行が
push "route 192.168.1.0 255.255.255.0"

となっている事を確認してください。
この行の意味は、OpneVPNクライアントが接続してきた際に、ルータが転送できるネットワークの情報をクライアントに教える内容になります。今回は、これがいわゆるWANインタフェースのプライベートIPセグメントの情報を渡してあげれば良いのです。
もしWAN側(自宅LAN)が192.168.100.0/24なら)この行を
push "route 192.168.100.0 255.255.255.0"
としてあげます。


3.NATルータの設定

このプライベート側に設置したOpenVPNサーバに直接インターネットからアクセスすることは当然できません。
これを解決してあげるためには、NATルータでポートフォワードをしてあげる必要があります。
各自NATルータの設定を行なってください。

やることは、NATルータのWAN側(グローバルIP:10.10.10.1)の特定のポートアドレスUDP:1194を、OpenVPNサーバ(プライベートIP:192.168.1.253)に転送してあげる設定になります。


※ポートフォワーディング機能はメーカによって記載が異なります。それぞれ調べて設定して下さい。

例)Buffalo:「ポート変換」または「アドレス変換」
  Corega:バーチャル・サーバ(ポート開放)
  NEC:ポートマッピング機能


4.OpenVPNクライアントの設定

OpenVPNクライアント側の"client.conf"を設定してあげます。
私は、~.openvpn配下に配置しているので、これを編集します。編集箇所は、
;remote 192.168.100.253 1194
remote 10.10.10.100 1194

の箇所です。既存設定をコメントアウトしました。
設定するアドレスは、NATルータのWAN側にプロバイダから割り当てられているグローバルIPアドレスになります。

POINT
通常のご家庭では、プロバイダからDHCPでアドレスを取得しているケースが多いと思います。このケースだと、グローバルIPアドレスが変わる可能性がありますので、ダイナミックDNS(DDNS)などを活用するべきだと思います。
残念ながら、私のNATルータはDDNSに未対応だったためやむなくIPで設定しました。


5.接続確認

OpneVPNクライアントから、接続を試みます。
$ sudo openvpn ./client.conf
 (略)
Thu May 16 11:31:10 2013 TUN/TAP device tun0 opened
Thu May 16 11:31:10 2013 TUN/TAP TX queue length set to 100
Thu May 16 11:31:10 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu May 16 11:31:10 2013 /sbin/ifconfig tun0 192.168.66.6 pointopoint 192.168.66.5 mtu 1500
Thu May 16 11:31:10 2013 /sbin/route add -net 192.168.123.0 netmask 255.255.255.0 gw 192.168.66.5
Thu May 16 11:31:10 2013 /sbin/route add -net 192.168.66.1 netmask 255.255.255.255 gw 192.168.66.5
Thu May 16 11:31:10 2013 Initialization Sequence Completed

と表示されれば、接続成功です。


クライアントにて確認を行ってみます。

まずは経路情報の確認。
下記赤字の経路があればOKです。
特に、自宅内LAN(192.168.1.0)向けのルーティングがtun0に向いているのが重要です。
$ netstat -rn
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース
0.0.0.0 10.10.10.254 0.0.0.0 UG 0 0 0 wlan1
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1
192.168.66.1 192.168.66.5 255.255.255.255 UGH 0 0 0 tun0
192.168.66.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.1.0 192.168.66.5 255.255.255.0 UG 0 0 0 tun0


自宅PCにTracerouteで経路を確認してみます。
ちゃんと、VPNトンネルを経由して、自宅PCに到達していることがわかります。
$ traceroute 192.168.123.202
traceroute to 192.168.123.202 (192.168.123.202), 30 hops max, 60 byte packets
1 192.168.66.1 (192.168.66.1) 29.329 ms 78.011 ms 79.079 ms
2 192.168.1.202 (192.168.123.202) 79.087 ms 80.042 ms 80.053 ms


これで完了です。
実際の環境で試してみてください。



※アドレス等実際テストした環境と少し変えているので、記載ミスがあるかもしれません。その場合ご指摘ください。
※テスト構成で行なっていますので、実際のグローバルIPアドレスであるべき箇所もプライベート(10.x.x.x)を使っています。
スポンサーサイト
プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。