OpenVPN for CentOS, Windows, Android
(2010.2.28-2024.4.6)
OpenVPN(tunモード)で安全・高速に接続する。
(環境) CentOS 7-8, AlmaLinux8, Windows 10, Android 4.x, 5.0, (CentOS 5, 6, WindowsXP, Androidはこちら)
(以下プロンプトが#ならroot,$なら普通のユーザー)
Linux openvpnサーバー
インストール
yumにEPELリポジトリを追加する。openvpnをyumでインストール/更新できるようになる。
# yum install openvpn
# yum install easy-rsa
でインストール完了。
鍵の生成
証明書/鍵作成用ディレクトリをコピーする。
# mkdir /etc/openvpn/easy-rsa
# cp -r /usr/share/easy-rsa/3.0.3/* /etc/openvpn/easy-rsa/
# cd /etc/openvpn/easy-rsa/
環境変数設定,証明書/鍵作成先ディレクトリ初期化。以下の操作を途中で失敗したらここからやり直す。
# cd /etc/openvpn/easy-rsa
# ./easyrsa init-pki
CA証明書を作成し,/etc/openvpn/serverに移動。
# ./easyrsa build-ca
Generating a 2048 bit RSA private key
...
Enter PEM pass phrase: 任意のパスフレーズを入力
Verifying - Enter PEM pass phrase: もう一度入力
...
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: サーバー名を入力
# mv ca.crt /etc/openvpn/server/
サーバー証明書・秘密鍵とDH(Diffie Hellman)パラメータを作成。パスワードにはCA証明書作成で入れたパスワードを入力する。
# ./easyrsa gen-dh
# mv pki/dh.pem /etc/openvpn/server/
# ./easyrsa build-server-full server nopass
# mv pki/issued/server.crt /etc/openvpn/server/
# mv pki/private/server.key /etc/openvpn/server/
クライアント証明書・秘密鍵作成
以下のコマンドで作成する。クライアントを追加する場合はここから始めればよい。クライアントの台数分つくる。入力を促されたら全てデフォルトのまま[Enter]し,[y/n]にはyで答える。パスワードにはCA証明書作成で入れたパスワードを入力する。
# ./easyrsa build-client-full client01 nopass
# ./easyrsa build-client-full client02 nopass
# ./easyrsa build-client-full client03 nopass
# ./easyrsa build-client-full client04 nopass
...
パスワード付のクライアント証明書・秘密鍵は以下のコマンドで作成する。
# ./easyrsa build-client-full client10
その他はパスワードなしの場合と同じ。
TLS認証キーの作成
# openvpn --genkey --secret /etc/openvpn/server/ta.key
サーバーの開始
設定ファイルをコピー修正する。とりあえず修正する部分は鍵ファイルの名前だが,上のように鍵ファイルを作った場合はそれも不要。openvpnにはtapモードとtunモードがあるがデフォルトはtunモード。
# cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/server.conf /etc/openvpn/server/
修正箇所
;DHパラメータの指定
dh dh.pem
;クライアント間通信の許可
client-to-client
;ログのレベル: 0は重大エラーのみ,3は標準,9が最大
verb 0
ファイアーウオールの1194/udpポートをあけてから,openvpnを開始,終了,再起動,サービスとして開始する。そして,ファイアウォールでtun+を信頼できるデバイスにする。これでファイアウォールのフィルタとは無関係にOpenVPN経由なら何でも使えるようになる。
# systemctl enable openvpn@server.service
# systemctl start openvpn@server.service
# firewall-cmd --add-service=openvpn --zone=public --permanent
# firewall-cmd --zone=trusted --change-interface=tun0 --permanent
# systemctl restart firewalld
openvpnクライアント
Windows openvpnクライアント
http://www.openvpn.jp/ からwindows用openvpnをダウンロードして*,全てデフォルトでインストール。
[スタート]-[openVPN]-[OpenVPN configuration file directory]でconfigフォルダを開き,その親OpenVPNに移動する。
OpenVPNフォルダの中には,sample-config,config,config-autoフォルダがある。これらは,それぞれ,設定のサンプル,OpenVPN GUIの設定,OpenVPNサービスの設定ファイルを格納するフォルダである。see
OpenVPNサービスを使うかGUIを使うかに応じて,config-autoまたはconfigフォルダに,サーバーで作ったCA証明書,クライアント証明書,鍵,TLS認証キーをコピーする。
(例)
ca ca.crt
cert client01.crt
key client01.key
そして,sample-configフォルダから,client.ovpnファイルをconfig-autoまたはconfigフォルダにコピーして,エディタでファイルを開き,鍵ファイルの名前と,サーバー名を修正する。
;remote my-server-1 1194 ← ;を削除して,my-server-1をサーバー名かサーバーのIPアドレスにする。
サービスとして起動
サービスとして起動と同時に接続するには:[スタート]を右クリックして[コンピュータの管理][サービスとアプリケーション]-[サービス]でOpenVPN Serviceを探し,ダブルクリックして[スタートアップの種類]を[自動]にする。config-autoに入れた接続先に自動的に常時接続されるようになる。この場合,クライアント鍵にパスワードが付いていると接続されないのでパスワードは設定しない。また,OpenVPN GUIが自動起動しないように,タスクバーの通知領域でOpenVPN GUIアイコンを右クリックして設定しておく。
OpenVPN GUI
パスワード付のクライアント鍵はconfigフォルダに入れて,OpenVPN GUIで利用する。OpenVPN GUIを起動するとパスワードを聞かれるので,パスワードを入力しなければOpenVPNに接続されない。複数の人が利用するPCで,自分が利用するときだけOpenVPNに接続したいときこの方法で接続するとよい。
Android openvpnクライアント
Google PlayからOpenVPN Connectをインストール。SDカードなどにサーバーで作ったCA証明書,クライアント証明書,鍵,TLS認証キーとovpnファイル(前節参照)をコピーする。
(例)
ca ca.crt
cert client02.crt
key client02.key
ovpn client02.ovpn
[メニュー]-[import]-[Import Profile from SD card]でovpnファイルを読み込み,Connectする。Disconnectしないでアプリを抜ける。
Sambaファイルサーバーは,ESファイルエクスプローラー(無料)で利用できる。設定は,ESファイルエクスプローラーを起動して左上をクリックし,[ビューを変更]-[LAN] 新規でVPNアドレス(10.8.0.1など)を入力する。
VNCはRealVNCのVNC Viewer - Remote DesktopPocketCloud(無料)がよい。
Linux openvpnクライアント
OpenVPNをインストールして,サーバーで作ったCA証明書,クライアント証明書,鍵,TLS認証キー(前節参照)を/etc/openvpn/にコピーする。
(例)
ca ca.crt
cert client03.crt
key client03.key
設定ファイルをコピー修正する。修正する部分はopenvpnサーバー名と鍵ファイルの名前。
# cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/client.conf /etc/openvpn/
ファイアウォールでtunを信頼できるデバイスにして(openvpnポートはクライアントからアクセスしにいくのであける必要はない),openvpnを再起動,サービス開始する。
(CentOS7の場合)
# systemctl enable openvpn@client
# systemctl start openvpn@client
# firewall-cmd --zone=trusted --change-interface=tun0 --permanent
# systemctl restart firewalld
使い方
sambaファイルサーバーを使う
サーバーの設定ファイルで,10.8.0.0/255.255.255.0がopenvpnに割当られるようになっている(変更可)。10.8.0.1がサーバー,クライアントにはその他のIPアドレスが割り振られる。
以下のようにsambaを稼働しておけば,Windowsエクスプローラ(マイドキュメントなど)のアドレス欄に\\10.8.0.1と入れることで,ユーザのホームディレクトリに接続できる。なお,ファイヤーウオールでsambaのポートは閉じておく。
sambaのインストール
# yum install samba
sambaパスワードの設定
ユーザのsamba用のパスワードを設定する。user1はLinuxの既存ユーザ。
# pdbedit -a user1
new password:
retype new password:
sambaの設定
# vi /etc/samba/smb.conf
[global]
#ファイル作成時のパーミッション
create mask = 0644
force create mode = 0
security mask = 0644
force security mode = 0
#ディレクトリ作成時のパーミッション
directory mask = 0755
force directory mode = 0
directory security mask = 0755
force directory security mode = 0
#
unix extensions = no
wide links = yes
sambaの起動と自動起動設定
# service smb restart
# chkconfig smb on
クライアント同士で通信する
サーバーの設定ファイル(/etc/openvpn/server.conf)で,client-to-client行の行頭の;をとれば,クライアント同士で通信ができるようになる。もちろん,クライアントのフォルダを共有にしておけば,クライアント同士でファイルのやりとりができるし,Remote Desktop接続も安全快適に使える。
推奨されてはいないが,duplicate-cn行の行頭の;をとれば,複数台のクライアントで同じ証明書を使うことができる。
Windowsファイアウオールの設定
Windowsクライアントに接続するには,接続したいクライアントで,次のようにしてファイアウオールを開けておく必要がある: [スタート]-[Windowセキュリティ]-[ファイアーウォールとネットワーク保護]-[詳細設定]で[プロパティ]をクリック。[ドメインプロファイル]タブで[保護されているネットワーク接続]の[カスタマイズ]をクリックして,OpenVPNのインストールに伴ってできたOpenVPN Data Channel Offloadのチェックをはずす。プライベートプロファイル,パブリックプロファイルについても同じようにチェックをはずす。
クライアントに固定IPアドレスを割り当てる
サーバーの設定ファイル(/etc/openvpn/server/server.conf)で,client-config-dir ccd行の行頭の;をとる。
/etc/openvpn/serverにccdというディレクトリを作る。# mkdir /etc/openvpn/server/ccd
ccdにクライアント名(クライアントcrtファイルに書いてある)のファイルを作り,以下のように記述する。
# vi /etc/openvpn/server/ccd/client1
ifconfig-push 10.8.0.5 10.8.0.6
この例では,クライアント10.8.0.5が割り振られる。一般に,aを4n+1,bを4n+2,(n=1,2,3,...)として
ifconfig-push 10.8.0.a 10.8.0.b
と書くと,アドレス10.8.0.aが割り振られる。
Windowsでサーバー,Linuxでクライアント
ここまでのやり方と,同じようにして,できる(はず)。
WebDAVをパスワード無しで使う
このHowtoのWebDAVで紹介したSSLでBASIC認証をかけたWebDAVを,OpenVPNからはパスワード無しで使うには,WebDAVの設定ファイルに以下を追加して,
# cd /etc/httpd/conf.d
# vi webdav.conf
Alias /vpnwebdav "/home/www/html/webdav"
<Location /vpnwebdav>
DAV On
Order deny,allow
Deny from all
Allow from 10.8.0
</Location>
とする。つまり,WebDAVでは,同じフォルダに2つの設定をすることができる。設定を有効にするためにhttpdを再起動する。
# /etc/init.d/httpd restart
これをWindowsXPから使うには
[マイネットワーク]-[ネットワークプレースを追加する]で[次へ]をクリックし,[ネットワークプレースの追加ウイザード]で[別のネットワークの場所を選択...]を選び[次へ]をクリック。[インターネットまたはネットワークのアドレス(A)]に
https://10.8.0.1/vpnwebdav
と入力して[次へ]。(OpenVPNサーバのアドレスを10.8.0.1とした)。[マイネットワーク]に[ホスト名 上の webdav]ができ,WebDAVへのファイルのアップロード,ダウンロードがパスワード無しでできる。
クライアントの削除
特定のVPNクライアントからのVPN接続を廃止したい場合は,そのクライアントが使用しているクライアント証明書を廃止すればよい。以下はclient1の証明書を廃止する方法。(OpenVPN日本語情報サイト,ドキュメントより)
# /etc/init.d/openvpn stop
# cd /etc/openvpn/easy-rsa/
# source ./vars
# source ./revoke-full client1
# /etc/init.d/openvpn start
client1がrevokeされた旨のメッセージが出て(error 23 at 0 depth lookup:certificate revokedと出ればOK。「最後の”error 23″が気になるかもしれませんが、このメッセージは問題ありません。これは、失効させた証明書の検証に失敗したということを示しているからです。」),keysサブディレクトリ内にcrl.pemというCRL(証明書失効リスト)ファイルが生成される。
このcrl.pemファイルを/etc/openvpn/にコピーし,/etc/openvpn/server.confファイルの末尾に
crl-verify crl.pem
と書く。./build-keyで同じ名前のクライアント証明書・鍵を作っても大丈夫(古い証明書は廃止され,同じ名前の新しい証明書が有効になる)。
参考
OpenVPN日本語情報サイト(http://www.openvpn.jp/) 2009.12現在
VPNサーバー構築(OpenVPN) (http://fedorasrv.com/openvpn.shtml), (http://centossrv.com/openvpn.shtml) 2008.8現在
Windows7でOpenVPNを使う (http://hrk.ateria.co.jp/2009/08/windows7%E3%81%A7openvpn%E3%82%92%E4%BD%BF%E3%81%86/)2010.2現在
Windows7 + OpenVPN + Samba 設定メモ(http://blog.goo.ne.jp/firstletter/e/4dd7080aee15eccdb7a4f40e5240c706)2011.8現在