Locked History Actions

Diff for "OpenVPN/OpenSource"

Differences between revisions 13 and 14
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= オープンソース版 = この内容は以下に移転しました。
Line 3: Line 3:
CentOS release 6.5(Final)へインストールする。
{{{
yum install openvpn
}}}
でインストール(epelリポジトリの追加が必要だったかも)。

現在のバージョンはopenvpn-2.3.12。
/usr/share/doc/openvpn-2.3.12/にドキュメント、サンプルファイルが格納される。

== 認証方式の選択 ==

とりあえず一人で使うので認証方法は静的キーにしようと思ったのだが、この方式ではクライアントがただ一つしか接続できないとのこと。しかし、どうも試してみると、「クライアント」ではなく対等な関係の1対1のようである。
つまり、サーバ・クライアントの区別は無く、クライアント側も通信ポートのTCPあるいはUDPの1194を開けておく必要がある模様(定かではない)。これでは役に立たないので静的キーはやめた。
ちなみに、設定ファイルには1対1の記述しかできないが、複数の設定ファイルを作成して(おそらくポートやIPアドレスは異なっている必要がある)、複数のインスタンスを作成できるので、一つのサーバマシンに対して1つのクライアントしか接続できないということは無い模様。つまり、認証方式n一つとして静的キーという選択があるのではなく、クライアント・サーバという動作ではなくなってしまうものと思われる。

検証するのも面倒なので以上は単なる推測。

やりたいこととしては

 * ただ一つのキーファイルあるいはただ一つのユーザアカウントを複数クライアントに配れば、それらクライアントが同時に接続できる。
 * Windowsクライアントのファイアウォール設定をいじる必要は無い。
 * サーバからクライアントに対して何らかの操作をすることはない(sサーバ側からクライアントにあるウェブページを見るなど)。
 * サーバは特にいわゆるクラウドでも無いので、そのサブネットにアクセスする必要はない。
 * クライアント側からの一般的なネット接続(一般のウェブサイト閲覧など)はサーバを経由する必要はない(させたくない)。
 * クライアントどうしがやりとりする必要はない。
 * サーバの機能(全ポート)には、特に設定することもなく自由にアクセスできる。

要するに、LANの中にファイアウォールを全解放したサーバがあるかのように扱えればよい。

== ID/パスワード認証によるサーバ側設定 ==

参考としてあげたURLを参照してID/パスワード認証とする。ただし、そのままではない。いろいろと不都合な点があるのでそれは適宜変更してある。

この方式では、
 * キーファイルや証明書が必要になるが、opensslがあれば簡単に作成できる。
 * それらの証明書等は、複数クライアントで同じものを配っておけばよい。
 * 対象サーバの中のユーザアカウント情報を、そのままクライアントの認証情報として使用できる。

この方式で使用するソフトは以下。
 * もちろんopenvpnであるが、サーバ側はyumでインストールしたもの。クライアント側はvpnux clientを使う。クライアント用のopenvpnよりも楽ができる。
 * openssl
 * サーバのファイアウォールをいじるためにopensslを使う。

opensslをアップデートしておく。
{{{
yum update openssl
}}}


=== サーバ側:キーファイルの作成 ===

openvpnをインストールすると、/etc/openvpnディレクトリが作成されるので(空のはず)、そこに以下のスクリプトを、例えばcreatekeysとして作成、「sh createkeys」で実行してキーファイルを作る。

{{{
echo generating CA
openssl genrsa 2048 > ca.key 2> /dev/null
openssl req -utf8 -new -key ca.key -out ca.csr 2> /dev/null << EOT
JP
Sample
Sample
Sample
Sample
Sample




EOT
openssl x509 -in ca.csr -out ca.crt -req -signkey ca.key -days 3650 -sha256 2> /dev/null
echo generating server certificate
openssl genrsa 2048 > server.key 2> /dev/null
openssl rsa -in server.key -out server.key 2> /dev/null
openssl req -utf8 -new -key server.key -out server.csr 2> /dev/null << EOT
JP
Sample
Sample
Sample
Sample
Sample




EOT
openssl x509 -in server.csr -out server.crt -req -CA ca.crt -CAkey ca.key -days 3650 -sha256 -CAcreateserial 2> /dev/null
chmod 400 *.key

echo generating dh2048.pem
openssl dhparam -out dh2048.pem 2048 2> /dev/null

#echo generating ta.key
#openvpn --genkey --secret ta.key 2> /dev/null
#echo done!
}}}

これを行うと、/etc/openvpnディレクトリ中に、ca.crt,ca.csr,ca.key,ca.srl,dh2048.pem,server.crt,server.csr,server.keyというファイルが作成される。
二つのファイル、server.crtをクライアントに転送しておく。

=== サーバ側:設定ファイルの作成 ===

/etc/openvpnディレクトリに、openvpn.confファイルを作成する。拡張子が.confであれば、名前は何でもよい。openvpnを起動すると、/etc/openvpnディレクトリ中のすべての.confファイルが設定ファイルとして用いられる。

少々汚いが、動いているものをそのまま示す。ネットワークアドレスは10.8.92.0になっている。
{{{
log-append /var/log/openvpn.log
port 1194
proto udp

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

dev tun
topology subnet
server 10.8.92.0 255.255.255.0


#tls-auth ta.key 0

user nobody
group nobody
log-append /var/log/openvpn.log

plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so login
client-cert-not-required
username-as-common-name


persist-key
persist-tun
keepalive 10 120
comp-lzo

fragment 1280
mssfix 1280
link-mtu 1400
}}}


これでOK。あとは「service openvpn start」とすれば良いが、ただし普通にグローバルIPを割り当てられているサーバではiptablesの設定を行う必要がある。

=== サーバ側:iptablesの設定 ===

iptablesmodとして作成し、「sh iptablesmod」を実行。service iptables saveとでもして設定をセーブする。ネットワークアドレスは10.8.92.0になっている。

{{{
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.92.0/24 -o eth0 -j MASQUERADE
iptables -A OUTPUT -o tun+ -j ACCEPT
}}}

これでサーバ側は終了。

=== クライアント側:vpnux clientのインストールと設定、起動 ===

基本的に参考(3)の通りで良いのだが、ただしここには間違い(と思われる)があり、CA証明書に入れるものは、ca.crtではなくserver.crtと思われる。ta.keyについては正しい。
だから、サーバからとってくるものは、ca.crtとta.keyではなく、server.crtとta.key。

--> ta.keyは使わないことにしたので不要になった。詳細設定画面では何も入れなくて良い。どうもta.keyを使用すると接続に問題が出てくる。このキーの用途は「DoS attacks and UDP port flooding」の回避なので、有名なサイトでも無い限り必要はない。


また、参考(5)のように、詳細設定の中のLink MTU、フラグメントmssfixをいじっておく。


== 参考 ==

 * (1) http://vogel.at.webry.info/201503/article_5.html
 * (2) http://vogel.at.webry.info/201504/article_2.html
 * (3) http://vogel.at.webry.info/201504/article_3.html
 * (4) https://arashmilani.com/post?id=53
 * (5) http://vogel.at.webry.info/201504/article_10.html
https://www.gwtcenter.com/how-to-use-openvpn-1

この内容は以下に移転しました。

https://www.gwtcenter.com/how-to-use-openvpn-1