2007年12月12日

OpenVPNによるリモートアクセス環境構築

外出先から自宅のネットワークへアクセスできるようにしたいと考えて、環境を構築することにした。2年前にはSoftEtherが選択肢だったのだろうが、いろいろと調べたところ現状ではOpenVPNがよさそうという結論になった。

いろいろなサイトを参考にしたが、特に以下のサイトが参考になった。
OpenVPN 2.0 HOWTO 日本語訳
OpenVPNで構築するリモートアクセス環境

CentOS5.1 (ML115)のLinuxサーバをOpenVPNサーバとし、Windows XPのノートPCをクライアントとする。
自分がやった大まかな手順は以下のような感じ。

  1. 自宅サイトのアドレス体系を変更
    これは、リモートサイトとアドレス重複してしまうのを避けるため。192.168.1.0/24 を 10.x.y.0/24 へ変更。

  2. OpenVPN サーバのインストール
    openvpn-2.0.9.tar.gz をダウンロードして、ソースからコンパイルしてインストール。事前にlzo-2.02.tar.gz をダウンロードしてインストールする必要あり。

  3. /etc/openvpnに設定ファイルを置くことにして、デフォルトのサンプル設定ファイルや上の参考にしたサイトを参照してserver.confを記述。
    なお、WINSサーバを建てずにWindowsファイル共有をできるようにしたいので、routing VPNではなくbridging VPNとすることにした。

  4. bridge i/fの設定
    1. bridge-utilsをインストール
      yum install bridge-utils

    2. bridge-startの設定

    3. IPフォワードの設定
      ・/proc/sys/net/ipv4/ip_forward の設定
      ・/etc/sysctl.conf の設定


  5. WANルータにてポート転送(Static NAPT)の設定

  6. Windowsクライアントをインストールする

  7. http://openvpn.se/からダウンロードして、サーバ側と同じように設定ファイルを記述する。サーバのアドレスはDynDNSのものを指定(ローカル環境でのテスト用にはローカルでのサーバのアドレスを代わりに指定した)
  8. 証明書などの作成

  9. クライアントの起動


すんなりとは接続できず。まず、クライアントに記述するVPNサーバのアドレスを間違えていたことに気づき、修正する。すると、VPNの接続には成功した。しかし、VPN確立後にサーバ側のネットワークの他のPCへのpingが飛ばないという状況に。

ローカルでのテスト環境では、無線のクライアントPCからFONのFoneraルータ経由でサーバにアクセスするという状況だったため、間のFoneraでのフィルタリングに問題があるのかと思ったが、物理i/fとブリッジi/fの両方についてWiresharkでパケットを解析したところ、VPN確立まではUDPパケットを正常にやりとりするものの、確立してからはサーバ→クライアント方向にしかVPNパケットが飛ばない状況になっており、さらにクライアントのTAP-Win32 i/fではARPのパケットを送出しているにもかかわらず、物理i/fからVPNパケットが流れない状況であることを確認。クライアント側の問題と思い、McafeeのPersonal Firewallが悪さをしていると思って設定をいじくるも解決せず。

UDPをTCPに変更しても状況は変わらず。bridgingからroutingに変更しても状況は変わらず。ちょっと分からなくなってきたところでWebを調べてみると、あるPersonal Firewall製品では設定を無効化しただけではダメなものが、アンインストールすれば解決するという事例があったので、これをやってみることに。しかしながら、この作業をやっているときにふと思うところがあってクライアントのルーティングテーブルを見直したところ、VPN確立後の10.x.y.0/24宛はTAP-Win32 i/fとなっており、OpenVPNサーバ自体もこのアドレス範囲に入っていたことからが原因でパケットを送出していないことに気づいた。

OpenVPN確立後に
route add 10.x.y.z 192.168.10.1 metric 2
を投入して動作することを確認した。(10.x.y.0/24宛のトラフィックがVPN経由になるルーティングテーブルだったが、OpenVPNのパケット自体(これは直接送信する必要がある)もVPN経由にしようとしてしまって失敗していたので修正した。)。McafeeのPersonal Firewallを再インストールしても動作したので、犯人は違ったことになる。

これは、テスト環境でのみ発生するパターンであり、実際の運用ではWAN i/fからインターネットに見えているOpenVPNサーバのIPアドレスと、実際にブリッジの対象となるネットワークアドレスは異なるので、問題は発生しない。

テスト環境で確認後、端末をローカル環境から切り離し、ダイアルアップでインターネットに接続して、自宅ネットワークにOpenVPNでリモートアクセスすることを確認できた。UltraVNCの動作も確認したが、さすがにダイアルアップでは遅すぎた。

後はサーバ起動時にbridge-startとOpenVPNサーバの起動をするように設定すればよいだけだが、リモートアクセスするときだけ必要なので、これは手動で立ち上げるという運用にするつもり。

久しぶりにこういう作業をやったので大変だった。
ラベル:OpenVPN
posted by mako at 00:14| 東京 🌁| Comment(1) | TrackBack(0) | メモ(PC・インターネット関連) | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
自分用メモ

> サーバ起動時にbridge-startとOpenVPNサーバの起動
su
cd /etc/openvpn
./bridge-start
sh openvpn.init start

> 停止方法
sh openvpn.init stop
./bridge-stop
Posted by mako at 2009年12月27日 01:22

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。