2014年8月3日日曜日

DD-WRT で OpenVPN サーバを設定

諸事情があり、自宅外からの自宅内 LAN へのアクセスが必要となりました。そこで DD-WRT の VPN ビルドを行ったファームウェアをインストールした無線 LAN ルータ(Linksys WRT150N)を用意して設定してみました。

参考にしたウェブサイトは次のものです。大切な情報ありがとうございます。
VPN (the easy way) v24+ (英語)
http://www.dd-wrt.com/wiki/index.php/VPN_%28the_easy_way%29_v24%2B

DD-WRTで遊んでみる -OpenVPNでリモートアクセスルータにする(日本語)
http://linuxandxx.blog.fc2.com/blog-entry-47.html

サーバの証明書の作成方法は上記の参考ウェブサイトの方法で問題なく作成することができました。

OpenVPN には二種類のアクセス方法があります。ルーティング方式(Routing)とブリッジ方式(Bridging)ですが、ルーティング方式が設定が容易であると説明がありました。しかし私は OpenVPN サーバの家庭内 LAN の設置場所の関係で簡単に設置することができませんでした。なお OpenVPN サーバを設置した無線 LAN ルータが外部のインターネットへ接続を行うような設置方法であれば問題なく動作します。

ルーティング方式で動作する配置
[インターネット]
   │
[無線 LAN ルータ](OpenVPN サーバ)
   │
[家庭内サーバ類](ウェブサーバ、メールサーバ)

意外なことにブリッジ方式の方が最初に成功しました。これは上記の参考ウェブサイトどおりで問題ありませんでした。注意点としては外部からアクセスするマシンのクライアント設定においてデバイスとして tun ではなく tap を使用するように設定するだけでした。

さて我が家での家庭内 LAN の配置です。DD-WRT をインストールしてある無線 LAN ルータは WAN 端子を無効(disable)として無線 LAN アクセスポイントとして使用しています。

我が家の配置
[インターネット]
   │
   │ドメイン名 : example.com
   │
[NTT西 フレッツ光 HGW](PR-400NE)
   │(192.168.24.1)
   │
   ーーーーーーーーーーーーーーー
   │             │
[無線LANルータ](OpenVPN)   [家庭内サーバ]
 (192.168.24.8)        (192.168.24.100)
-- 家庭内サーバは DNS, DHCP, WEB, MAIL, Asterisk を管理 --

我が家の配置でのルーティング方式での DD-WRT の OpenVPN の設定です。

ここも上記の参考ウェブサイトを参考に行いましたが、一部変更をしています。

[OpenVPN Daemon] - [OpenVPN Config] の設定の push の項目の定義を見直しました。DNS サーバの設定を家庭内サーバ(192.168.24.100)へ振り向けて、さらにドメイン名(example.com)もクライアントのマシンへ登録させるようにしました。この push 設定でクライアント・マシンの resolv.conf へも自動的に登録されていました。
push "route 192.168.24.0 255.255.255.0"
push "dhcp-option DNS 192.168.24.100"
push "dhcp-option DOMAIN example.com"
server 192.168.66.0 255.255.255.0

dev tun0
proto udp
keepalive 10 120
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem

# Only use crl-verify if you are using the revoke list - otherwise leave it commented out
# crl-verify /tmp/openvpn/ca.crl

# management parameter allows DD-WRT's OpenVPN Status web page to access the server's management port
# port must be 5001 for scripts embedded in firmware to work
management localhost 5001
OpenVPN の設定画面

無線 LAN ルータのパケットフィルタの設定も上記の参考ウェブサイトどおりに設定しました。[Administration] - [Commands] へ以下の二行を [Save Firewall] で設定するだけです。
iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD 1 -s 192.168.66.0/24 -j ACCEPT

Firewall 設定
下部二行は # でコメントアウトしています。

この後、外部のインターネットから OpenVPN のパケット(UDP : 1194)が OpenVPN サーバとなっている無線 LAN ルータ(192.168.24.8)へ向かうように [静的 IP マスカレード設定] と [IPv4 パケットフィルタ設定] を行います。

[詳細設定]-[静的 IP マスカレード設定]
[詳細設定]-[静的 IP マスカレード設定]-[エントリ編集]
[詳細設定]-[IPv4 パケットフィルタ設定]-[エントリ編集]
[詳細設定]-[IPv4 パケットフィルタ設定]

この状態で外部のクライアント・マシンからアクセスすると、OpenVPN 接続できましたが家庭内 LAN のサーバへアクセスすることができませんでした。ping も通りません。

OpenVPN のステータス画面では正常に接続されていることになっています。

最初は無線 LAN ルータの DD-WRT のルーティング設定の見直しを盛んに行なってみましたが、アクセスすることができませんでした。

ネット上で「 LAN 内に OpenVPN サーバを設置している」事例を探して、何か参考になる情報を探索してみました。

すると意外なことに家庭内 LAN のルータ HGW(PR-400NE)のルーティング設定に問題があることが判明しました。 OpenVPN の仮想 LAN である 192.168.66.0/24 のパケットを HGW(PR-400NE)でルーティングの設定しなければなりませんでした。意外な盲点でした(汗)。

HGW(PR-400NE)の設定画面の [詳細設定] - [静的ルーティング設定] で OpenVPN のパケット(192.168.66.0/24)を OpenVPN のゲートウェイとなる無線 LAN ルータ(192.168.24.8)へルーティングするように設定しました。詳しくは、設定画面の画像を参考にしてください。

[詳細設定]-[静的ルーティング設定]
[詳細設定]-[静的ルーティング設定]-[エントリ編集]

この状態で再度クライアント・マシンから接続し直すと、ちゃんと家庭内サーバへアクセスすることができるようになりました。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。