OpenVPN関連
4. OpenVPNサーバの構築 (Linux端末側)
4-1.必要なファイル
それでは、実際にOpenVPNサーバの構築作業を行います。
まずは、以下のコマンドを実行してopenvpn-2.0.5.tar.gzとlzo-1.08.tar.gzをダウンロードします。
# cd /usr/local/src
# wget http://openvpn.net/release/openvpn-2.0.5.tar.gz
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
4-2.インストール
ダウンロードしたファイルを解凍し、以下の手順でOpenVPNのインストールを行ってください。なお、OpenVPNをインストールするには予めLzoがインストールされている必要があるので、先にlzo-1.08.tar.gzのインストールを行ってください。
# tar zxvf lzo-1.08.tar.gz
# cd lzo-1.08
# ./configure
# make
# make install
# tar zxvf openvpn-2.0.5.tar.gz
# cd openvpn-2.0.5
# ./configure
# make
# make install
OpenVPNのインストールが完了しても設定ファイルや各種スクリプト等はインストールされませんので手動で作成する必要があります。今回は OpenVPNのメインディレクトリとして/etc/openvpnディレクトリを作成し、その配下に必要なファイルを設置します。
# mkdir /etc/openvpn/
必要な各種ファイルに関しては、ソースファイルを解凍してできあがるディレクトリ配下にサンプルファイルがありますので、それらをコピーして使用します。
# cp sample-scripts/openvpn.init /etc/openvpn
# chmod 755 /etc/openvpn/openvpn.init ←OpenVPN起動スクリプト
# cp /usr/local/src/openvpn-2.0.5/sample-scripts/bridge-start /etc/openvpn
# chmod 755 /etc/openvpn/bridge-start ←ブリッジ機能有効化スクリプト
# cp /usr/local/src/openvpn-2.0.5/sample-scripts/bridge-stop /etc/openvpn
# chmod 755 /etc/openvpn/bridge-stop ←ブリッジ機能無効化スクリプト
4-3.OpenVPNサーバの設定 (server.confの設定)
それでは、OpenVPNサーバのメイン設定ファイルである/etc/openvpn/server.confの作成を行います。今回の想定するネットワーク構成を実現するために設定する内容は以下の通りです。なお、この設定ファイルはOpenVPNをインストールしても存在しませんので新規に作成する必要があります。皆さんが設定する際は、設置するネットワーク環境にあわせてIPアドレス等読み替えて行ってください。
# vi /etc/openvpn/server.conf
# 通信に使用するプロトコル及びポート番号の指定
port 5000
proto udp
# 使用する仮想ネットワークデバイスの指定
dev tap0
# CA証明書、サーバ証明書、サーバ秘密鍵、DH鍵のパス指定
# ※パス指定は、絶対パスまたはserver.confの設置ディレクトリからの相対パスでの指定
ca /etc/openvpn/easy-rsa/keys/ca.crt ←7章で作成
cert /etc/openvpn/easy-rsa/keys/server.crt ←7章で作成
key /etc/openvpn/easy-rsa/keys/server.key ←7章で作成
dh /etc/openvpn/easy-rsa/keys/dh1024.pem ←7章で作成
# OpenVPNサーバをブリッジモードで起動させるための設定
# 書式:server-bridge [OpenVPNサーバのアドレス] [ネットマスク] [クライアントに割り振るアドレス範囲]
server-bridge 192.168.0.4 255.255.255.0 192.168.0.220 192.168.0.230
# クライアントにサーバ側ネットワークへの経路を伝えるための設定
# 書式:push “route [OpenVPNサーバ側のネットワークアドレス] [ネットマスク]”
push "route 192.168.0.0 255.255.255.0"
# クライアント同士の通信を可能にするための設定
client-to-client
# VPN接続間の生存確認のための設定
keepalive 10 120
# パケット転送の際にLZO圧縮を有効にする
comp-lzo
# OpenVPNデーモン起動ユーザ・グループの指定 ※Windowsシステム以外設定可能
user nobody
group nobody
# VPNが落ちた場合の再接続設定
persist-key
persist-tun
# ステータスログのパス指定
status /var/log/openvpn-status.log
# ログのパス指定
log /var/log/openvpn.log
log-append /var/log/openvpn.log
# ログの詳細レベルの指定
verb 3
# OpenVPN管理インターフェイスの起動設定
management localhost 7505
今回はブリッジモードでOpenVPNサーバを動作させるための設定をファイルに直接記述することで行いましたが、この他にもレイヤ3でカプセル化を行いルーティング設定でVPN間の通信を確立するような設定や、静的鍵による簡単な暗号化設定等、様々な設定が可能です。ここでは説明は割愛しますが、ソースファイルの展開先ディレクトリ、ここでは/usr/local/src/openvpn-2.0.5配下のsample-config-files ディレクトリ内にserver.confのサンプルファイルがあります。
この設定ファイルのコメント行に各設定項目に関する説明が記述されていますので、興味のある方は参照してください。
4-4.bridgeの設定
●bridge-utilsのインストール
CentOS4.2でブリッジ機能を使用するには、bridge-utilsとsysfsutilsパッケージがインストールされている必要があります。もし、インストールされていないなら以下の手順でパッケージをダウンロードし、インストールしてください。
# cd /usr/local/src
# wget ftp://ftp.riken.jp/Linux/centos/4.2/os/i386/CentOS/RPMS/bridge-utils-1.0.4-4.i386.rpm
# wget ftp://ftp.riken.jp/Linux/centos/4.2/os/i386/CentOS/RPMS/sysfsutils-1.2.0-1.i386.rpm
# rpm -ihv bridge-utils-1.0.4-4.i386.rpm sysfsutils-1.2.0-1.i386.rpm
●ブリッジ有効化スクリプトの編集
ブリッジを起動させた際、どのネットワークデバイスを使用するか?等の挙動に関する設定は、OpenVPNインストール時に設置したブリッジ有効化スクリプト/etc/openvpn/bridge-startで行います。デフォルトではtap0とeth0をブリッジで使用するように設定されているので、以下の箇所だけを皆さんの環境に合わせて設定すれば結構です。
# vi /etc/openvpn/bridge-start
※以下の箇所を修正する。
(~省略~)
eth="eth0"
eth_ip="192.168.0.4" ←br0に設定するIPアドレス
eth_netmask="255.255.255.0" ←br0に設定するネットワークアドレス
eth_broadcast="192.168.0.255" ←br0に設定するブロードキャストアドレス
(~省略~)
●IPフォワードの設定
パケットが複数のネットワークデバイスを経由する場合は、以下のコマンドを実行してパケットの転送機能を有効にする必要があります。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
(~省略~)
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 ←"1"に変更
(~省略~)
4-5.起動スクリプトの作成
ブリッジ・モードでOpenVPNサーバを起動させるには以下の順番で各サービスを起動させる必要があります。
ネットワーク機能 → ブリッジ機能 → OpenVPNサーバ
また、ネットワーク機能を再起動する場合など、一旦ネットワーク機能停止させる際は以下の順番で停止させる必要があります。
OpenVPNサーバ → ブリッジ機能 → ネットワーク機能
今回は、OpenVPNサーバ専用端末としてLinuxを起動させるように/etc/rc.d/init.d/networkを編集し、OpenVPN用サービス制御スクリプトを作成します。
# cp /etc/rc.d/init.d/network /etc/rc.d/init.d/vpn
/etc/rc.d/init.d/vpn の179行目辺りを以下のように編集します。(太文字部分を追記)
# vi /etc/rc.d/init.d/vpn
(~省略~)
touch /var/lock/subsys/network
#ブリッジモードの有効化
/etc/openvpn/bridge-start
#OpenVPNサーバの起動
/etc/openvpn/openvpn.init start
;;
stop)
#OpenVPNサーバの停止
/etc/openvpn/openvpn.init stop
#ブリッジモードの無効化
/etc/openvpn/bridge-stop
# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn't turn on netfs
(~省略~)
編集が完了したら、各ランレベルにおけるネットワーク起動スクリプトを削除し、VPN起動スクリプトを追加します。
# chkconfig --del /etc/rc.d/init.d/network
# chkconfig --add /etc/rc.d/init.d/vpn
以上で、OpenVPNサーバの各種設定は完了です。あとは、7章で作成するサーバ証明書とサーバ秘密鍵をserver.confで指定したディレクトリに設置するのみになります。
文字コード確認設定
文字コードを確認するSQL文「SHOW VARIABLES LIKE 'char%';」
MySQL4.1以降はサーバとは別にクライアントの文字コードが設定されている。
クライアント、サーバ間で違う文字コードがセットされていると、一度ucs2変換を通る。
よって、クライアント、サーバ間で違う文字コードを指定することとなり文字化けが起こる可能性がある。
PHPはmy.cnfで[mysql]、[client]を設定しようがクライアントの文字コードはビルド時に指定されたキャラクタセット(通常latin1)。
my.cnfの設定
[mysql]
default-character-set = utf8
[mysqld]
default-character-set = utf8
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 |
mysql> SET NAMES ujis;
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | ujis |
| character_set_connection | ujis |
| character_set_database | utf8 |
| character_set_results | ujis |
| character_set_server | utf8 |
MySQLの4.1.15以降、5.0.13以降で「skip-character-set-client-handshake」というオプションが追加された。
クライアントからリクエストがあった場合、クライアントの文字コードをサーバの文字コードと同じものをセットする。
[mysql]
default-character-set = binary
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
ただし、「skip-character-set-client-handshake」は「character_set_server」の値を参照するので注意。
mysql> CREATE DATABASE sample CHARACTER SET ujis;
mysql> USE sample;
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | ujis |
| character_set_results | utf8 |
| character_set_server | utf8 |
mysqldumpについて。
mysqldumpはデフォルトでutf8の文字コードがセットされている。
[mysql]
default-character-set = sjis
[mysqld]
default-character-set = utf8
[mysqldump]
default-character-set = binary
文字セットに「binary」をセットすると「character_set_database」を無変換で出力してくれる。
C:\>mysql -u root sample;
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | sjis |
| character_set_connection | sjis |
| character_set_database | ujis |
| character_set_results | sjis |
| character_set_server | utf8 |
mysql> \q
C:\>mysqldump -u root sample > dump.sql
上記の場合は出力ファイルの文字コードはEUC-JP。
[mysql]
default-character-set = sjis
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
[mysqldump]
default-character-set = binary
「skip-character-set-client-handshake」をセットすると…
C:\>mysql -u root sample;
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | ujis |
| character_set_results | utf8 |
| character_set_server | utf8 |
CentOS_php5の件
yumでアップデートする場合はyumのリポジトリの設定を変更する。
# /etc/yum.repos.d/CentOS-Base.repo
[centosplus]
name=CentOS-$releasever - Plus baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
設定した後,
# yum update php
久々会社ブログ
いや~ なかなか夏が来ません。
仕事ばっかりでちょっとストレス気味です。