2009年07月08日

CentOSでOpenVPN

CentOSOpenVPNを動かすための手順。
公式リポジトリには入ってないんで、全部ソースからビルドします。

まずはビルドに必要なパッケージをインストールします。
yum install gcc gcc-c++ openssl-devel pam-devel

私はブリッジ接続派の人なので、bridge-utilsも入れておきます。
yum install bridge-utils

続いてOpenVPNで使用する圧縮ライブラリであるLZOをビルドします。
cd /tmp
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
tar zxvf lzo-2.03.tar.gz
cd lzo-2.03
./configure
make
make install

これで準備完了。OpenVPN本体をビルドします。
cd /tmp
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
tar zxvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
make
make install

PAM認証を使いたい方はPAMプラグインもビルドしておきます。
cd /tmp/openvpn-2.0.9/plugin/auth-pam
make
cp -p openvpn-auth-pam.so /usr/local/lib

ブリッジ接続派の私はブリッジの起動停止スクリプトもコピーしておきます。
cp -p /tmp/openvpn-2.0.9/sample-scripts/bridge-* /usr/local/sbin

ここでコピーしたスクリプトの起動用の方(bridge-start)は、コピーしたそのままでは使えません。自分の環境に合わせて内容を変更してください。変えるべき項目はたぶん eth_ipeth_broadcast だけで問題ないと思います。(NICがたくさんあったりブリッジ接続をしない場合はちょっと違いますが)

OpenVPNの起動スクリプト(initスクリプト?)も /tmp/openvpn-2.0.9/sample-scripts/openvpn.init として提供されているんですが、中身がちょっと複雑すぎ。私は簡素化したこんなスクリプトを使っています。
#!/bin/bash
#
# openvpn This shell script takes care of starting and stopping
# openvpn on RedHat or other chkconfig-based system.
#
# chkconfig: 345 24 76
# description: OpenVPN daemon
# processname: openvpn

INIT_PROG=openvpn
VPNCONF=/usr/local/etc/openvpn/openvpn.conf

#
# Source Redhat function library.
#
. /etc/rc.d/init.d/functions

# Track on path to oenvpn if not already in PATH
VPN_PATH=":/usr/local/sbin"

PATH=$PATH$VPN_PATH
export PATH

RETVAL=0

# See how we were called.
start() {
# Start network bridge
echo "Starting network bridge ..."
bridge-start
# Start daemons.
echo -n "Starting $INIT_PROG: "
/sbin/modprobe tun > /dev/null 2>&1
$INIT_PROG --daemon --config $VPNCONF
RETVAL=$?
echo

[ $RETVAL -eq 0 ] && touch "/var/lock/subsys/${INIT_PROG}"
return $RETVAL
}

stop() {
# Stop daemons.
echo -n "Stopping $INIT_PROG: "
killproc $INIT_PROG
RETVAL=$?
echo
# Stop network bridge
echo "Stopping network bridge ..."
bridge-stop

[ $RETVAL -eq 0 ] && rm -f "/var/lock/subsys/${INIT_PROG}"
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $INIT_PROG
RETVAL=$?
;;
restart)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 1
esac

exit $?
最後にOS側での設定。IP packet forwardingを使うので、/etc/sysct.conf の以下の記述を修正します。
net.ipv4.ip_forward = 0
 ↓ 修正
net.ipv4.ip_forward = 1

これで再起動すればIP packet forwardingが利用可能になりますが、変更を再起動なしに即時反映させたい場合は以下のコマンドを実行します。
echo 1 > /proc/sys/net/ipv4/ip_forward

以上でインストール自体は完了ですが、もし公開鍵暗号を使ったユーザ認証をしたいのであれば、公開鍵暗号基盤の管理ツールである easy-rsa を回収しておきましょう。(あとで別のサーバで展開して使用します)
cd /tmp/openvpn-2.0.9
tar cvf ~/easy-rsa.tar easy-rsa

ここまで行けばあとは設定するだけ…なんですが、これがまた結構大変です。ドキュメントを読めば必要なことはみんな書いてあるんですが、何しろ英語なので…。(←英語の読解力がものすごく弱い)

そんな私の救世主となってくれたのがこちらのサイト。

OpenVPNの日本語情報
http://freescitech.net/2/index.html

こちらのWEBMASTER様が日本語訳をしてくれていなかったら、私にはたぶんOpenVPNの構築は無理だったのではないかと思います。本当にありがたいことです。

あと、最近になって日本語公式っぽいサイト(実際には違うと思いますが)が出来ていました。

OpenVPN.JP
http://www.openvpn.jp/

こちらでは日本語のドキュメントと共に、日本語版のOpenVPN GUIが公開されているようです。英語版でも特に難しいところはありませんが、出来れば日本語で、という方はお試し下さい。(私は使ったことがありませんが)

−追記:2009/07/14−
IP packet forwardingの設定が漏れていたので追記しました。

−追記:2009/07/16−
initスクリプトの不具合を修正しました。
easy-rsaの回収手順を修正しました。

−追記:2009/09/03−
initスクリプトをchkconfig対応のために修正しました。

<参考サイト>
猫ぐらし: 自分でインストールしたサービスを chkconfig --add するためには
http://makisuke.seesaa.net/article/6066867.html
posted by 月水和尚 (とも) at 18:08 | Comment(0) | TrackBack(0) | Linux(ディストリビューション固有)
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。