OpenVPNで拠点間VPN
OpenVPNで拠点間VPN
元々、個人専用のWEBサーバーを立ち上げ、ファイルサーバーのデータを外部から参照可能にしているが、
単純にファイルを転送するだけならともかく、ディレクトリごとダウンロードや、一部だけ読み取ることなどは出来ないため割と不便。
解決法はWebDAVとかFTPとかいろいろとある中、どうせなら自宅ネットワークに直接接続出来れば、便利じゃないかと思いVPNを張ることを計画。
(NFSとかFTPとかSVNとかrsyncなどの内部用の設定なため、外部に公開したらひどいことになる通信も使える!)
VPNといえば、IPSecとかPPTPなどの有名どころはありますが、割と設定が面倒で設定をしっかりしないと穴が開くこともあるので、設定が簡単な(デフォルトでもそこそこしっかりしている)OpenVPNを採用。
・OpenVPNとは
SSLVPNの一つで、設定がシンプル。そこそこ堅牢。IPSecなどと違い、ユーザーランドで動作するのでセキュリティホールがあった場合にも影響が少ないはず。暗号化の方式も割と自由に選択可能。
以下、詳しいことはいつものとおり割愛して、具体的な設定方法。
インストール
証明書の作成
まずは、easy-rsaをコピー
移動
お好みにより証明書の内容を編集(オレオレ証明書なので適当に)
varsの内容を環境変数にセット
CAを作成
1・サーバー側で証明書作成
第一引数のサーバー名はお好みで(今回はserver)
クライアント証明書作成
クライアント名もお好みで(今回はclient)
コマンドを"build-key-pass"にするとパスフレーズ付きで鍵を作成可能(ただし、起動時にパスフレーズを訊かれるため面倒)
DH生成
以上で証明書生成は完了。
2・サーバー側設定
/etc/openvpn/server.conf
*.confとなっていれば起動時に自動で読み込まれるため、ポート・デバイスをそれぞれ設定すれば、複数のサーバーを起動可能。
3・クライアント設定
/etc/openvpn/client.conf
こちらも、*.confとなっていれば起動時に自動で読み込まれるため、複数のサーバーへ接続も可能。
下記ファイルを安全な方法でクライアントにコピーすれば完了。
4・起動
起動確認
サーバー側
クライアント側
設定ファイルのlog,log-append行をコメントアウトしないとログが標準出力に出ないので注意。
正常に通信出来たら一度終了し、
5・MTUとかfragmentとか
私の場合は、クライアントからサーバーまでとりあえず、pingはOK、SSHでも正常に反応するが、NFSでアクセスすると突然フリーズ。
前にPPPoEでもハマったことがあったため、多分MTUが問題じゃないかと思いググってみるとfragmentとかmssfixというオプションに行き着く。
fragmentは指定した長さ以上のらパケットが来たら分割するオプションらしい。
fragmentの値を適当に小さくすれば、フリーズは完治。パフォーマンスは取り合えず動いているので放置。
ddの結果はこんな感じになったため、そこそこ速度は出る模様。
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 61.1367 s, 1.7 MB/s
元々、個人専用のWEBサーバーを立ち上げ、ファイルサーバーのデータを外部から参照可能にしているが、
単純にファイルを転送するだけならともかく、ディレクトリごとダウンロードや、一部だけ読み取ることなどは出来ないため割と不便。
解決法はWebDAVとかFTPとかいろいろとある中、どうせなら自宅ネットワークに直接接続出来れば、便利じゃないかと思いVPNを張ることを計画。
(NFSとかFTPとかSVNとかrsyncなどの内部用の設定なため、外部に公開したらひどいことになる通信も使える!)
VPNといえば、IPSecとかPPTPなどの有名どころはありますが、割と設定が面倒で設定をしっかりしないと穴が開くこともあるので、設定が簡単な(デフォルトでもそこそこしっかりしている)OpenVPNを採用。
・OpenVPNとは
SSLVPNの一つで、設定がシンプル。そこそこ堅牢。IPSecなどと違い、ユーザーランドで動作するのでセキュリティホールがあった場合にも影響が少ないはず。暗号化の方式も割と自由に選択可能。
以下、詳しいことはいつものとおり割愛して、具体的な設定方法。
インストール
- $
sudo apt-get install openvpn
証明書の作成
まずは、easy-rsaをコピー
- hoge@localhost:~$
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa-hoge/
移動
- hoge@localhost:~$
cd /etc/openvpn/easy-rsa-hoge/
お好みにより証明書の内容を編集(オレオレ証明書なので適当に)
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
vi vars - ##############
- export
KEY_COUNTRY="HO" - export
KEY_PROVINCE="GE" - export
KEY_CITY="hogecity" - export
KEY_ORG="Hoge corp" - export
KEY_EMAIL="me@myhost.mydomain" - ##############
varsの内容を環境変数にセット
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
. ./vars
CAを作成
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
./build-ca - Generating
a 1024 bit RSA private key - ......++++++
- ......++++++
- writing
new private key to 'ca.key' - -----
- You
are about to be asked to enter information that will be incorporated - into
your certificate request. - What
you are about to enter is what is called a Distinguished Name or a DN. - There
are quite a few fields but you can leave some blank - For
some fields there will be a default value, - If
you enter '.', the field will be left blank. - -----
- Country
Name (2 letter code) [HO]: - State
or Province Name (full name) [GE]: - Locality
Name (eg, city) [hogecity]: - Organization
Name (eg, company) [Hoge corp]: - Organizational
Unit Name (eg, section) []: - Common
Name (eg, your name or your server's hostname) [Hoge corp CA]: - Name
[]: - Email
Address [me@myhost.mydomain]:
1・サーバー側で証明書作成
第一引数のサーバー名はお好みで(今回はserver)
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
./build-key-server server - Generating
a 1024 bit RSA private key - .........++++++
- ........++++++
- writing
new private key to 'server.key' - -----
- You
are about to be asked to enter information that will be incorporated - into
your certificate request. - What
you are about to enter is what is called a Distinguished Name or a DN. - There
are quite a few fields but you can leave some blank - For
some fields there will be a default value, - If
you enter '.', the field will be left blank. - -----
- Country
Name (2 letter code) [HO]: - State
or Province Name (full name) [GE]: - Locality
Name (eg, city) [hogecity]: - Organization
Name (eg, company) [Hoge corp]: - Organizational
Unit Name (eg, section) []: - Common
Name (eg, your name or your server's hostname) [server]: - Name
[]: - Email
Address [me@myhost.mydomain]: - Please
enter the following 'extra' attributes - to
be sent with your certificate request - A
challenge password []: - An
optional company name []: - Using
configuration from /etc/openvpn/easy-rsa-hoge/openssl.cnf - Check
that the request matches the signature - Signature
ok - The
Subject's Distinguished Name is as follows - countryName
:PRINTABLE:'HO' - stateOrProvinceName
:PRINTABLE:'GE' - localityName
:PRINTABLE:'hogecity' - organizationName
:PRINTABLE:'Hoge corp' - commonName
:PRINTABLE:'server' - emailAddress
:IA5STRING:'me@myhost.mydomain' - Certificate
is to be certified until Feb 23 07:32:18 2020 GMT (3650 days) - Sign
the certificate? [y/n]:y - 1
out of 1 certificate requests certified, commit? [y/n]y - Write
out database with 1 new entries - Data
Base Updated
クライアント証明書作成
クライアント名もお好みで(今回はclient)
コマンドを"build-key-pass"にするとパスフレーズ付きで鍵を作成可能(ただし、起動時にパスフレーズを訊かれるため面倒)
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
./build-key client - Generating
a 1024 bit RSA private key - ...................................++++++
- ....................++++++
- writing
new private key to 'client.key' - -----
- You
are about to be asked to enter information that will be incorporated - into
your certificate request. - What
you are about to enter is what is called a Distinguished Name or a DN. - There
are quite a few fields but you can leave some blank - For
some fields there will be a default value, - If
you enter '.', the field will be left blank. - -----
- Country
Name (2 letter code) [HO]: - State
or Province Name (full name) [GE]: - Locality
Name (eg, city) [hogecity]: - Organization
Name (eg, company) [Hoge corp]: - Organizational
Unit Name (eg, section) []: - Common
Name (eg, your name or your server's hostname) [client]: - Name
[]: - Email
Address [me@myhost.mydomain]: - Please
enter the following 'extra' attributes - to
be sent with your certificate request - A
challenge password []: - An
optional company name []: - Using
configuration from /etc/openvpn/easy-rsa-hoge/openssl.cnf - Check
that the request matches the signature - Signature
ok - The
Subject's Distinguished Name is as follows - countryName
:PRINTABLE:'HO' - stateOrProvinceName
:PRINTABLE:'GE' - localityName
:PRINTABLE:'hogecity' - organizationName
:PRINTABLE:'Hoge corp' - commonName
:PRINTABLE:'client' - emailAddress
:IA5STRING:'me@myhost.mydomain' - Certificate
is to be certified until Feb 23 07:35:43 2020 GMT (3650 days) - Sign
the certificate? [y/n]:y - 1
out of 1 certificate requests certified, commit? [y/n]y - Write
out database with 1 new entries - Data
Base Updated
DH生成
- hoge@localhost:/etc/openvpn/easy-rsa-hoge$
./build-dh - Generating
DH parameters, 1024 bit long safe prime, generator 2 - This
is going to take a long time - .................+............+..............................................................................................................................................+........................\
- ...................................................................................................................................++*++*++*
以上で証明書生成は完了。
2・サーバー側設定
/etc/openvpn/server.conf
- #
ポート - port
11072 - #
使用するプロトコル - proto
udp - #
デバイス - ##
今回はL3トンネルなので、tunを使用 - ##
(L2の場合はtapを使用) - ##
tun0のようにすれば、デバイスを固定出来る - dev
tun0 - #
keepalive - keepalive
10 120 - #
実行中はnobodyとして動作 - user
nobody - group
nogroup - #
証明書関係 - ca
/etc/openvpn/easy-rsa-hoge/keys/ca.crt - cert
/etc/openvpn/easy-rsa-hoge/keys/server.crt - key
/etc/openvpn/easy-rsa-hoge/keys/server.key - dh
/etc/openvpn/easy-rsa-hoge/keys/dh1024.pem - #
サーバーとして設定 - tls-server
- #
server ネットワーク ネットマスク - ##
このネットワークの範囲内で自動的にIPを割り振る - server
192.168.4.0 255.255.255.0 - #
割り振ったIPの記録先(証明書ベースでIPを管理) - ifconfig-pool-persist
/etc/openvpn/hoge-persist - #
クライアントに送るコマンド - #
192.168.1.100/32へ行くにはこのネットワークを通す設定 - push
"route 192.168.1.100 255.255.255.255" - persist-key
- persist-tun
- #
ログの出力先 - ##
設定しないと標準出力に表示 - log
/var/log/openvpn-hoge.log - log-append
/var/log/openvpn-hoge.log - #
ログレベル - verb
3 - #
MTUの設定 - fragment
1200 - mssfix
*.confとなっていれば起動時に自動で読み込まれるため、ポート・デバイスをそれぞれ設定すれば、複数のサーバーを起動可能。
3・クライアント設定
/etc/openvpn/client.conf
- #
クライアントとして設定 - tls-client
- #
使用するプロトコル - proto
udp - #
デバイス - dev
tun - #
サーバーのアドレスとポート - remote
hoge.example.com 11072 - #
証明書関係 - ca
/etc/openvpn/keys/ca.crt - cert
/etc/openvpn/keys/client.crt - key
/etc/openvpn/keys/client.key - user
nobody - group
nogroup - #
pushで送られた設定を受け取る - pull
- #
IPを受け取る - float
- persist-key
- persist-tun
- resolv-retry
infinite - nobind
- #
ログの詳細レベルの指定 - verb
3 - log
/var/log/openvpn-tun.log - log-append
/var/log/openvpn-tun.log - keepalive
10 120 - replay-window
128 - fragment
1200 - mssfix
こちらも、*.confとなっていれば起動時に自動で読み込まれるため、複数のサーバーへ接続も可能。
下記ファイルを安全な方法でクライアントにコピーすれば完了。
- /etc/openvpn/easy-rsa-hoge/keys/ca.crt
- /etc/openvpn/easy-rsa-hoge/keys/client.crt
- /etc/openvpn/easy-rsa-hoge/keys/client.key
4・起動
起動確認
サーバー側
- $
sudo openvpn --config /etc/openvpn/server.conf
クライアント側
- $
sudo openvpn --config /etc/openvpn/client.conf
設定ファイルのlog,log-append行をコメントアウトしないとログが標準出力に出ないので注意。
正常に通信出来たら一度終了し、
- $
sudo /etc/init.d/openvpn restart
5・MTUとかfragmentとか
私の場合は、クライアントからサーバーまでとりあえず、pingはOK、SSHでも正常に反応するが、NFSでアクセスすると突然フリーズ。
前にPPPoEでもハマったことがあったため、多分MTUが問題じゃないかと思いググってみるとfragmentとかmssfixというオプションに行き着く。
fragmentは指定した長さ以上のらパケットが来たら分割するオプションらしい。
fragmentの値を適当に小さくすれば、フリーズは完治。パフォーマンスは取り合えず動いているので放置。
ddの結果はこんな感じになったため、そこそこ速度は出る模様。
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 61.1367 s, 1.7 MB/s
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



最近のコメント