- 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接続するまでを書きたいと思っています。
よろしくお願いしまーす。
- Newer: 博士課程に進学したら研究したいこと
- Older: 第3回情報危機管理コンテストに出場させて頂きました