Home > サーバ > 自宅サーバ(Debian)にOpenVPNを導入(サーバ編)

自宅サーバ(Debian)にOpenVPNを導入(サーバ編)

  • Posted by: kadoppe
  • 2008年6月16日 01:16
  • サーバ

いつでも・どこからでも、同じ環境で作業を行えるようにするため、自宅サーバ(Debian etch)にOpenVPNを導入してみました。

基本的な方針は以下の通り。

  • 家の外にあるPC(外部PC)から自宅のVPNサーバに接続
  • 外部PCは自宅LANの仮装的なハブに接続する感じ
  • 外部PCは自宅LANと同じネットワークアドレスをもらえる
  • 「外部PC→自宅LAN内PC」アクセス可能
  • 「自宅LAN内PC→外部PC」アクセス可能
  • 別々に接続した外部PC同士も通信可能

これが実現できたら凄く便利そうですよね。

それでは自分用メモということで、作業内容を書いていきたいと思います。
今回はサーバ編ということで、サーバの設定作業が完了するまでの記録です。
クライアント編はまた後日、別エントリーとして作成したいと思います。

以下のページを参考にさせていただきました。ありがとうございました。

1. 必要なものをaptでインストール

まず、以下のファイルがサーバ上に存在するかどうか確認します。

/dev/net/tun

無事見つかったらaptによりopenvpnをインストールします。(ついでにopensslもインストール。)

# apt-get install openvpn openssl

次に、サーバにブリッジ用の仮想的なネットワークインタフェースを作るためのbridge-utilsをインストールします。

# apt-gtet install bridge-utils

2. ブリッジの作成

ブリッジを作成することで、VPN接続した外部PCを、あたかも自宅LANのスイッチングハブに繋いだかのように扱うことができるみたいです。

ブリッジを作成する前に、一旦サーバのネットワークを落としておきます。

# /etc/init.d/networking stop

次に、/etc/network/interfacesを以下のように書き換えます。(アドレス関係は各自読み替えてください)
この設定により、br0(ブリッジインタフェース)で、eth0(実際に自宅LANと繋がっているインタフェース)とtan0(VPNで外部PCが接続するインタフェース)をブリッジすることができるようです。

auto lo
iface lo inet loopback
allow-hotplug eth0
auto eth0
iface eth0 inet static
auto br0
iface br0 inet static
       address 192.168.3.210
       netmask 255.255.255.0
       network 192.168.3.0
       broadcast 192.168.3.255
       gateway 192.168.3.1
       bridge_ports eth0 tap0
       pre-up /usr/sbin/openvpn --mktun --dev tap0
       pre-up /sbin/ifconfig tap0 0.0.0.0 promisc up
       pre-up /sbin/ifconfig eth0 0.0.0.0 promisc up
       pre-up /usr/sbin/brctl addbr br0
       pre-up /usr/sbin/brctl addif br0 eth0
       pre-up /usr/sbin/brctl addif br0 tap0
       post-down /usr/sbin/brctl delif br0 tap0
       post-down /usr/sbin/brctl delbr br0
       post-down /usr/sbin/openvpn --rmtun --dev tap0
       post-down /sbin/ifconfig eth0 down

設定が終わったらサーバのネットワークを起動します。

# /etc/init.d/networking start

ifconfigを実行し、br0に自宅LANのアドレスが割り当てられ、eth0とtan0に関する情報が表示されれば、一応ここまでは設定成功です

3. IPフォワードの設定

ブリッジを正常に機能させるためには、あるネットワークインタフェースで受信したパケットを別のネットワークインタフェースから送信できるようにしなければなりません(IPフォワード)。

有効にするため、/etc/sysctl.confに以下を追記します。

net.ipv4.ip_forward=1

さらに以下のコマンドを実行し、設定を有効にします。

# sysctl -p /etc/sysctl.conf

一旦サーバを再起動し、以下のコマンドを入力して「1」と表示されれば設定完了です。

4. 証明書の作成

次に、VPNサーバ構築・VPN接続に必要な証明書群を作成します。

まずはじめに、簡単に鍵・証明書が作成できるツール群をわかりやすい場所にコピーします。

# cp -r /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/
# cd /etc/openvpn/easy-rsa/

次に、鍵生成用の環境設定ファイルを編集します。(設定内容は各自読み替えてください)

# vi vars
export KEY_COUNTRY="JP"
export KEY_PROVINCE="OSAKA"
export KEY_CITY="HIRAKATA"
export KEY_ORG="hoge.com"
export KEY_EMAIL="hogehoge@hoge.com"

編集が済んだら、以下のコマンドを実行し、設定を反映させます。
さらに証明書作成ツールの初期化も行っておきます。

# source vars
# ./clean-all

下準備が終わったので、まずCAの証明書、および秘密鍵を作成します。
以下のコマンドを入力し、生成ツールを起動します。
何度か入力を求められますが、全て空ENTERで結構です。

# ./build-ca

作成が完了したら、以下のコマンドを実行し、作成した証明書を適切な場所に移動させます。

# cp keys/ca.crt /etc/openvpn/

次は、サーバの証明書および秘密鍵の作成です
以下のコマンドを入力し、生成ツールを起動します。
こちらも基本的に全て空ENTERでよいのですが、何カ所か入力すべき場所があるようなので要注意です。

# ./build-key-server server
Common Name (eg, your name or your server's hostname) [server] 【「server」と入力】
Sign the certificate? [y/n]: 【「y」と入力】
1 out of 1 certificate requests certified, commit? [y/n] 【「y」と入力】

作成が完了したら、以下のコマンドを実行し、作成した証明書を適切な場所に移動させます。

# cp keys/server.crt /etc/openvpn/
# cp keys/server.key /etc/openvpn/

次に、Diffie Hellmanパラメータというのを作成します。
作成が完了したら(時間が掛かる)、先ほどと同じように適切な場所に移動させます。

# ./build-dh
# cp keys/dh1024.pem /etc/openvpn/

最後に、以下のコマンドを実行し、TLS認証鍵を生成します。

openvpn --genkey --secret /etc/openvpn/ta.key

5. OpenVPNの設定

ようやくOpenVPN自体の設定に移ります。

以下のコマンドを実行し、設定ファイルの作成・編集を行います。

# vi /etc/openvpn/server.conf
port 1194 # 使用するポート

proto udp # 使用するプロトコル

dev tap0 # 使用するデバイス。今回はLayer2をエミュレート

ca ca.crt # 使用する証明書 
cert server.crt
key server.key 
dh dh1024.pem

ifconfig-pool-persist ipp.txt # クライアントに割り当てられたIPアドレスを管理するファイル

server-bridge 192.168.3.210 255.255.255.0 192.168.3.220 192.168.3.230 # 超重要、[サーバのIPアドレス] [サブネットマスク] [クライアントに割り当てるIPアドレスの範囲(開始)] [範囲(終了)]

client-to-client # クライアント同士の接続を許可

keepalive 10 120 # タイムアウト対策

tls-auth ta.key 0 # tls認証を有効化

cipher BF-CBC        # Blowfish (default)

comp-lzo

user nobody # OpenVPN実行権限を下げる
group nogroup
persist-key
persist-tun

status openvpn-status.log # ログの出力先
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

verb 3 # ログの出力レベル

udp-mtu 1400 # mtuの設定

6. OpenVPNの起動、仕上げ

上記の設定がすべて終わったら、ようやくOpenVPNの起動を行うことができます。
以下のコマンドを実行し、OpenVPNを起動します。

# /etc/init.d/openvpn start

無事起動したらとりあえずサーバの設定は完了です。

最後に忘れずに自宅のルータのポートフォワーディングの設定をします。
僕の環境だと、1194番ポート宛のUDPパケットを192.168.3.210に転送するように設定しました。
みなさんの環境にあわせて設定してみください。

7. まとめ

なんとかOpenVPNの稼働までこぎ着けました。
少し長くなってしまいましたね・・・。

もしかしたら誤った記述などあるかもしれません。
発見された方は、ここぞとばかりにコメントしていただけると、こちらとしても嬉しいです。

次回は、実際に外部のPCがVPN接続するまでを書きたいと思っています。

よろしくお願いしまーす。

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://www.kadoppe.net/mt/mt-tb.cgi/177
Listed below are links to weblogs that reference
自宅サーバ(Debian)にOpenVPNを導入(サーバ編) from CreativeStyle

Home > サーバ > 自宅サーバ(Debian)にOpenVPNを導入(サーバ編)

Search
Feeds
Blog Parts

あわせて読みたい フィードメーター - CreativeStyle この日記のはてなブックマーク数 kadoppeさんの体重グラフ

Return to page top