VPNはサーバとクライアント両方に仮想ネットワークアダプタを作り、そのアダプタ同士で仮想プライベートネットワークを作ります。
VPNにはルーティング型とブリッジ型があります。ルーティングモードはVPNサーバが、その仮想プライベートネットワークのルータになります。ブリッジモードではVPNサーバはWAN側(既存ネットワーク)のブリッジをするだけなので既存ネットワークにクライアントを追加します。
ブリッジモードの方が楽そうに見えますが、ブリッジ設定をしなくてはいけないので無駄に面倒になります。そこで今回はルーティング型の手順です。
CentOSだとOpenVPNをインストールするためにリポジトリを追加しないといけません。
# vi /etc/yum.repos.d/CentOS-Base.repo
-----------------
[base],[updates],[addons],[extras]それぞれの最後に下の行を追加。
priority=1
-----------------
# rpm --import
http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtrpm -ivh
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpmVPNサーバ導入手順
1.VPNを暗号化するためにSSLを使えるようにしときます。
# yum install openssl
2.VPNサーバをインストールします。
# yum install openvpn
3.VPNのバージョンを確認して設定雛型をコピーします。
# rpm -q openvpn
openvpn-2.0.9-1.el15.rf
サーバ設定ファイルの雛型をコピーします。
# cp /usr/share/doc/openvpn-2.0.9/sample-config-files/server.conf /etc/openvpn/
プライベートCAをコピーします。
# cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa /etc/openvpn/
4.サーバ証明書と秘密鍵を作ります。
# vi /etc/openvpn/easy-rsa/2.0/vars
---ファイルの中身---
〜
export KEY_COUNTRY="JP"(国)
export KEY_PROVINCE="Tokyo"(都道府県)
export KEY_CITY="Tokyo"(区市町村)
export KEY_ORG="HOME"(団体名)
export KEY_EMAIL="*@*.com"(管理者メールアドレス)
--------------------
プライベートCAを構築しますが、その前にスクリプトが動かないので実行権限を与えます。
# chmod -r 744 /etc/openvpn/easy-rsa/2.0
実際に構築作業
# cd /etc/openvpn/easy-rsa/2.0/
# source ./vars
# ./clean-all
# ./build-ca
~~~~~~対話方式~~~~~~~~~
設定してあるので全部デフォルト空エンターを押します。
Country Name (2 letter code) [JP]:enter
State or Province Name (full name) [Tokyo]:enter
Locality Name (eg, city) [Tokyo]:enter
Organization Name (eg, company) [HOME]:enter
Organizational Unit Name (eg, section) []:enter
Common Name (eg, your name or your server's hostname) [HOME CA]:enter
Email Address [*@*.com]:enter
~~~~~~~~~~~~~~~~~~~~~~~
/etc/openvpn/easy-rsa/2.0/keys/にca.crt(CA証明書)とca.key(CA秘密鍵)が出来ている事を確認します。
5.サーバ証明書とサーバ秘密鍵を作ります。
# cd /etc/openvpn/easy-rsa/2.0/
# source ./vars
# ./build-key-server server
~~~~~~対話方式~~~~~~~~~
これも全部空エンターにします。
Country Name (2 letter code) [JP]:enter
State or Province Name (full name) [Tokyo]:enter
Locality Name (eg, city) [Tokyo]:enter
Organization Name (eg, company) [HOME]:enter
Organizational Unit Name (eg, section) []:enter
Common Name (eg, your name or your server's hostname) [server]:enter
Email Address [*@*.com]:enter
A challenge password []:enter
An optional company name []:enter
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
~~~~~~~~~~~~~~~~~~~~~
/etc/openvpn/easy-rsa/2.0/keys/にserver.crt(サーバ証明書)とserver.key(サーバ秘密鍵)がある事を確認します。
6.クライアントの数だけクライアント証明書とクライアント秘密鍵を作ります。
# cd /etc/openvpn/easy-rsa/2.0/
# source ./vars
# ./build-key-pass client01(2台目は02...)
接続時にクライアントが使うパスフレーズを入力します。これは変えられないと考えた方が良いでしょう。変えると繋がりませんでした。
パスフレーズはパスワード所じゃない程長いパスです。一番大事なので長くしましょう。
Enter PEM pass phrase:パスフレーズ入力
Verifying - Enter PEM pass phrase:パスフレーズを再入力
Country Name (2 letter code) [JP]:enter
State or Province Name (full name) [Tokyo]:enter
Locality Name (eg, city) [Tokyo]:enter
Organization Name (eg, company) [HOME]:enter
Organizational Unit Name (eg, section) []:enter
Common Name (eg, your name or your server's hostname) [client01]:enter
Email Address [*@*.com]:enter
A challenge password []:enter
An optional company name []:enter
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
~~~~~~~~~~~~~~~~~~~~~~~
/etc/openvpn/easy-rsa/2.0/keys/にclient01.crt(クライアント証明書)とclient01.key(クライアント秘密鍵)がある事を確認します。
7.DHパラメータを生成します。
# cd /etc/openvpn/easy-rsa/2.0/
# ./build-dh
/etc/openvpn/easy-rsa/2.0/keys/にdh1024.pem(DHパラメータファイル)がある事を確認します。
8.VPNではTCPかUDPを選べます。今回はTCPにして、Firewallに穴を開けます。使用ポートは1194にします。
# iptables -I RH-Firewall-1-INPUT -p tcp -m tcp --dport 1194 -j ACCEPT
9.インターフェイス間のIPパケット転送を有効にします。
# vi /etc/sysctl.conf
---ファイルの中身---
〜
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
〜
--------------------
10.各種設定ファイルをコピーして指定の場所に置きます。
# cd /etc/openvpn/
# cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt .
# cp /etc/openvpn/easy-rsa/2.0/keys/server.crt .
# cp /etc/openvpn/easy-rsa/2.0/keys/server.key .
# cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem .
11.次に読み取られないようにパーミッションを変更します。
# chmod og-rx /etc/openvpn/*.key
12.設定ファイルを編集します。
# /etc/openvpn/server.conf
---ファイルの中身---
port 1194(ポート)
proto tcp(プロトコル)
dev tun(ルーティングなのでtun)
ca /etc/openvpn/ca.crt(CA証明書ファイルのフルパス)
cert /etc/openvpn/server.crt(サーバ証明書ファイルのフルパス)
key /etc/openvpn/server.key(サーバ秘密鍵ファイルのフルパス)
dh /etc/openvpn/dh1024.pem(DHパラメータファイルのフルパス)
server 192.168.20.0 255.255.255.0(VPNが使う仮想ネットワーク,192.168.20.1がVPNサーバに)
ifconfig-pool-persist ipp.txt(クライアントに振ったIP管理ファイル)
push "route 192.168.11.0 255.255.255.0"(サーバのWANネットワーク:多分)
client-to-client(VPNクライアント同士の通信を許可)
keepalive 10 120(接続が生きてるか監視の設定)
comp-lzo(LZO圧縮の有効)
max-clients 10(最大同時接続クライアント数)
user nobody(デーモンプロセスのユーザー)
group nobody(デーモンプロセスのグループ)
persist-key(不意な切断が発生した後の再接続処理の設定)
persist-tun(不意な切断が発生した後の再接続処理の設定)
status /var/log/openvpn-status.log(ステータスログの場所指定)
log /var/log/openvpn.log(ログファイルの保存場所指定)
verb 3(ログレベル)
--------------------
13.OpenVPNを起動します。
# /etc/init.d/openvpn start(再起動はrestart)
/var/log/openvpn.logに以下があれば正常起動
Initialization Sequence Completedこれでサーバの設定は終了です。
後はVPNクライアントの設定です。
・クライアントがWindowsの場合
WindowsでVPNクライアントの怪