内容へ移動
WildTree Wiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
e-g
•
manual
•
start
openvpn
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== OpenVPN ====== ====== 概要 ====== [[OpenVPN]]は、VPNの実装の一つである。 モバイル環境等からのアクセスをVPN化することで、よりセキュアに、かつ、特定の国や場所からアクセス出来ないサービスへのアクセスを可能にし、また、家庭内のLANへのスムースなアクセスを実現することが可能となる。 ====== 導入 ====== [[OpenVPN]]を利用するには、サーバー側の設定および、アクセスするクライアント側の設定が必要となる。 OpenSSHを利用した、鍵の作成および、VPNとLANの間のルーティングの設定が必要となるので、それなりの手間がかかる。 ===== 構成 ===== <code> WAN -- [ルータ] -- LAN -- [OpenVPNサーバ] -- VPN 192.168.100.0/24 192.168.200.0/24 udp 1194 -> NAT -> 192.168.100.2:1194 </code> ネットワークの構成は上のようであるとする。サーバーはBBルータを介してインターネットに接続し、LANは192.168.100.0/24 のアドレス空間を持つ。OpenVPNサーバは192.168.100.2で、1194/udp で待ち受ける。BBルータは192.168.100.2:1194 へのNATを行って、外部からリクエストがサーバへ通るようにしておく。 ===== サーバ側 ===== ==== 前提条件 ==== サーバ側は、トンネルデバイス(/dev/net/tun)が存在していることが、条件となる。そうでない場合は適切にカーネルをリビルドする必要があるが、基本的に Vine Linux 6.3/Debian GNU/Linux 7(Wheezy)のどちらでも、この点は問題は無かったので、多くのディストリビューションでそのまま利用可能であろう。 あとは、OpenVPNのパッケージをインストールしておく。 ==== 鍵の作成 ==== OpenVPNのパッケージには大抵easy-rsaという鍵作成を手伝ってくれるツールが同梱されている。Vine Linuxの場合は、 <code> /usr/share/openvpn/easy-rsa/2.0 </code> に配置されている。このままこの場所で作業するのではなく、次のようにして適当な作業場所を用意して行う。 <code> # cd /usr/share/openvpn/easy-rsa/2.0 # make DESTDIR=~/openvpn install ... # cd ~/openvpn </code> 以下の作業は、~/openvpn で行う。 作成する鍵は全部で、Diffie Hellmanパラメータ、CA(認証局)、サーバー鍵、TLS鍵および、クライアント毎の鍵になる。 鍵生成の前には必ず作業ディレクトリで varsを読み込む。(読み込まないと文句を言われる) <code> # cd ~/openvpn # source ./vars </code> 全てに先立ち鍵をクリアする。これは、全く新規の場合だけ行う。CA鍵などを作成したあとでやると全てが無になるので注意する。 <code> # ./clean-all </code> 次にDiffie Hellmanパラメータを作成。 <code> # ./build-dh </code> 次にCA鍵を作成。質問には真面目に答える。(以下はあくまでサンプル) <code> # ./build-ca Country Name (2 letter code) []:JP State or Province Name (full name) []:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:www.example.com Name []:. Email Address []:example@example.com </code> 続いてサーバー鍵を生成する。質問は同じくきちんと答える。 <code> # ./build-key-server server Country Name (2 letter code) []:JP State or Province Name (full name) []:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:www.example.com Name []:. Email Address []:example@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y </code> 最後にTLS鍵を生成して、サーバ側に必要な鍵の生成(初回のみ)は完了。 <code> # openvpn --genkey --secret keys/ta.key </code> これだけ、easy-rsaによるラップがないので注意。 生成された鍵は、適当な場所にまとめる必要がある。ここでは /etc/openvpn/certs と /etc/openvpn/private に置くことにする。 <code> # mkdir /etc/openvpn/certs # mkdir /etc/openvpn/private # chmod 755 /etc/openvpn/certs # chmod 700 /etc/openvpn/private # cd ~/openvpn/keys # install -o root -g root -m 0644 ca.crt server.crt dh1024.pem /etc/openvpn/certs # install -o root -g root -m 0600 server.key /etc/openvpn/private </code> ==== 設定ファイル ==== ひな形が /usr/shares/doc/openvpn-2.1.3/sample-config-files/server.conf にあるので、これを /etc/openvpn にコピーして改変する。 <code> # cp /usr/share/doc/openvpn-2.1.3/sample-config-files/server.conf /etc/openvpn </code> ポイントだけ以下に列記する。 <code> port 1194 proto udp # tcpにすればTCPも使える dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/private/server.key dh /etc/openvpn/certs/dh1024.pem server 192.168.200.0 255.255.255.0 # VPNのアドレス空間 push "route 192.168.100.0. 255.255.255.0" # LANへのルーティング情報 push "dhcp-option DNS 192.168.100.3" # LAN 内のDNS1 push "dhcp-option DNS 192.168.100.4" # LAN 内のDNS2 tls-auth /etc/openvpn/private/ta.key 0 cipher AES-128-CBC comp-lzo user nobody group nobody status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3 management localhost 7505 </code> あとは、起動するだけである。 <code> # service openvpn start </code> 必要に応じて、自動起動するようにする <code> # service openvpn on </code> ==== ルーティング ==== NATを有効にするには、/proc/sys/net/ipv4/ip_forward に 1 を書き込む必要がある。 <code> # echo 1 > /proc/sys/net/ipv4/ip_forward </code> 但し、この値はリブートする度に元に戻ってしまうので、恒常的にONにする場合は、/etc/sysctl.conf の中に、 <code> net.ipv4.ip_forward = 1 </code> と書いておけばよい。 ルーティングは以下のようにする。 <code> # iptables -A INPUT -p udp --dport 1194 -j ACCEPT # iptables -A INPUT -i tun+ -j ACCEPT # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A FORWARD -i tun+ -j ACCEPT # iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT # iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT # iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth0 -j MASQUERADE </code> 動作が確認できたら、保存しておく。 <code> # service iptables save # service iptables restart </code> ===== クライアント側 ===== ==== 共通・鍵および設定ファイルの作成 ==== クライアント鍵は、サーバ上でeasy-rsaを利用して作成する。 質問には適切に回答すること。 <code> # cd ~/openvpn # source ./vars # ./build-key client01 Country Name (2 letter code) []:JP State or Province Name (full name) []:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) []:. Organizational Unit Name (eg, section) []:. Common Name (eg, your name or your server's hostname) [client01]: Name []:. Email Address []:example@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: </code> 適当なディレクトリに作成した鍵、及び作成済みの以下の鍵を集める。 <code> # mkdir ~/openvpn/client01 # cd ~/openvpn/keys # cp -p ca.crt server.crt ta.key client01.crt client01.key ~/openvpn/client01 </code> 同じディレクトリに、クライアント側の定義ファイルを作成する。 <code> # cd ~/openvpn/client01 # vi client01.ovpn </code> <code> client tls-auth ta,key 1 dev tun proto udp cipher AES-128-CBC # server と同じモノにする。 remote openvpn.example.com 1194 ca ca.crt cert client01.crt key client01.key resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3 </code> UTF-8の文字コードでこれを保存しておく。 ==== 共通・鍵の失効 ==== 万が一、クライアント鍵が不正に利用された場合、それを失効させることが可能である。 <code> # cd ~/openvpn # source ./vars # ./revoke-full client01 # cd keys # install -o root -g root -m 0644 crl.pem /etc/openvpn/certs </code> 失効ファイルを作成したら、/etc/server.conf に次の行を追加する。(追加済みならそのまま) <code> crl-verify /etc/openvpn/certs/crl.pem </code> サーバは再起動しておく。 <code> # service openvpn restart </code> ==== Windows ==== ==== Linux ==== ==== Android ==== [[https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ja|OpenVPN Connect]]をインストールして利用する。 SDカードに、クライアント用の鍵一式および、ovpnファイルをコピーしておく。 アプリを起動したら、メニューからImportでSDカード内のovpnファイルを指定すると、接続が利用可能になる。 あとはConnect / Disconnectをするだけで、VPNを利用できる。 ==== iOS ==== [[https://itunes.apple.com/jp/app/openvpn-connect/id590379981?mt=8|OpenVPN Connect]]をインストールして利用する。 iTunesからovpnファイルを取り込む方法が一般的だが、何らかの方法で取り込んだ、ovpnファイルを、OpenVPN Connectに読み込ませることで利用することも出来る。 iOS版は、鍵ファイルが別ファイルに分割されているとうまく扱えないので、鍵ファイルを全てovpnファイルに取り込んだ形のファイルを用意する必要がある。 tls-auth, ca, key, 及びcert の各行は全て削除して、代わりに、XMLライクな記述で、鍵ファイルの中身を取り込んでおく。 tls-auth の最後の1は key-direction で指定する。 この内容のovpnファイルを取り込めばiOSでもVPNが利用可能になる。 <code> client key-direction 1 dev tun proto udp remote openvpn.example.com 1194 cipher AES-128-CBC resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3 <ca> -----BEGIN CERTIFICATE----- ...snip... -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- ...snip... -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- ...snip... -----END PRIVATE KEY----- </key> <tls-auth> -----BEGIN OpenVPN Static key V1----- ...snip... -----END OpenVPN Static key V1----- </tls-auth> </code> [[start]]
openvpn.txt
· 最終更新: 2016/03/31 05:05 by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ