SSブログ

VPNを構築しよう・その4・ブリッジモードでのセットアップ [Linux(Network/VPN)]

 それでは、ブリッジモードでのVPN接続をセットアップする。

 ブリッジモードの特色としては
1.VPNクライアントは、自宅のネットワークと同じネットワークアドレス帯に接続される
2.だからブロードキャストは当然届いちゃうし、IPXとかそんなプロトコルも届いちゃう
3.クライアントのアクセス制限はあきらめた方がよい(笑)

 そんな訳で、小さなネットワークで共有フォルダにアクセスしたいとかいうケースでは、あまり深いことを考えることなく、とりあえずVPNに接続してしまえばお手軽にさくっと実現できてしまうという点ではお手軽である。
 ただし、ネットワークに直結されているのに等しいため、アクセス制御という点ではやや難があるので、企業とかで使うのはいかがなものかと思う。
 だからだと思うが、他のサイトや書籍ではブリッジモードよりもルーティングモードを推奨する記述も多いように思われる。あくまでも個人でちょこっと使う…くらいに留めておくのが吉なんだろうね。



 では、セットアップの手順から。

手順1:イーサネットブリッジユーティリティを追加インストールする
手順2:認証局を準備
手順3:証明書やら鍵ファイルやらを作成する
手順4:サーバ側でVPNの起動設定
手順5:VPNクライアントをセットアップ
手順6:VPNクライアントやサーバの所定のディレクトリに証明書や鍵ファイルや設定ファイルを配置する
手順7:必要に応じてルータにVPNトラフィックの通過許可設定を行う
手順8:接続テスト



手順1:イーサネットブリッジユーティリティを追加インストールする

 まず、VPNサーバに「イーサネットブリッジドユーティリティ」をインストールする。
 イメージとしては、サーバ内に仮想的なスイッチングハブを置く感じ。この仮想的なスイッチングハブに、「eth?」インタフェースとか、この後で登場するVPNのインタフェース「tap?」とかが接続され、パケットが中継される仕組みになると思ってもらえれば良いと思う。

 CentOSならyumコマンドで簡単にインストールできる。
[root@belldandy ~]# yum search bridge-utils
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
 * addons: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
============================================ Matched: bridge-utils =============================================
bridge-utils.x86_64 : Utilities for configuring the linux ethernet bridge

 ということなので、「yum install bridge-utils」と実行して完了。


手順2:認証局を準備
 続いて、OpenVPNの認証局を準備する。
 後々のため、その2でビルドしたOpenVPNのソースディレクトリの中にある、「easy-rsa/2.0」のディレクトリを、/etc/openvpn/easy-rsaディレクトリ配下にコピーする。
mkdir /etc/openvpn
cp -rp /usr/local/src/openvpn-2.1_rc19/easy-rsa/2.0 /etc/openvpn/easy-rsa

 コピーされたら、/etc/openvpnディレクトリに移動する。

 /etc/openvpn/easy-rsa/ディレクトリの中に、「vars」というファイルがあるので、これを編集する。具体的にはファイルの末尾の方にある、「KEY_ナントカ」に渡している情報を編集する。
 「KEY_COUNTRY」は国名。日本なら「JP」。
 「KEY_PROVINCE」は都道府県名でも入れればよろしかろう。
 「KEY_CITY」は市区町村名でも入れればよろしかろう。
 「KEY_ORG」は組織名だが、自分の名前とかニックネームとかそのあたりでも差し支えない。
 「KEY_EMAIL」は管理者のe-mailアドレスを入れる。

 まあ、ここに記述する情報は正確じゃなくてもそれほど支障はない。ぶっちゃけ…
export KEY_COUNTRY="KP"
export KEY_PROVINCE="Pyeongyang-jikhalsi"
export KEY_CITY="Pyeongyang"
export KEY_ORG="Workers' Party of Korea"
export KEY_EMAIL="kim.jongil@wpk.kp"

 とか適当なことを書いたところでも接続には問題ない。(システム的にはね!)

 編集が完了したら、このvarsファイルを実行して環境変数を設定する。実行時には、必ず「.」(ピリオド)を先にくっつけて実行する。そうしないと、コマンドインタプリタが子プロセスで実行されて、今自分が実行しているコマンドインタプリタに環境変数が登録されないからである。

 というわけで、「. ./vars」という形で実行する。(※1個目のピリオドと、2個目のピリオドの間には半角スペースを1個置く!)

 さて。証明書や鍵ファイルを作成する。
 まずはCA証明書を作成する。これは初回の1回だけ作成すればよい。コマンドは「./build-ca」。入力項目がいくつかあるが、「vars」コマンドを実行しておけば、デフォルトの値がvarsコマンドで設定した中から採用されるので、全部Enterキーを押すだけでよい。(サイトによっては、Common Nameに何か入力するように記述されている場合がある。デフォルトの値が未指定の状態になっている場合は、何か入力する必要があるが、デフォルトの値が入っている場合は省略してよい。)
 作成が完了すると、/etc/openvpn/easy-rsa/keysディレクトリの中に「ca.crt」ファイルと「ca.key」ファイルが作成される。

 続けてサーバ証明書&鍵ファイルを作成する。これも初回の1回だけ作成すればよい。コマンドは「./build-key-server (サーバ名)」。なお、引数に指定するサーバ名は何でも構わない。
 この作業でもいくつか入力を求められるが、やはり全部Enterキーを押すだけでよい。
 作成が完了すると、/etc/openvpn/easy-rsa/keysディレクトリの中に「(サーバ名).crt」ファイルと「(サーバ名).csr」と「(サーバ名).key」ファイルが作成される。

 なお、「DHパラメータ」なるものを作成する必要もある。サーバ証明書の作成が終わったあとに、「./build-dh」を実行する。わりと時間がかかるコマンドなので、気長に待つように。

 そして、今度はクライアント証明書&鍵ファイルを作成する。この作業は、クライアント1台に対して1回行う必要がある。将来的にVPN接続を必要とするクライアントが増えた場合等には、varsコマンドの実行→クライアント証明書&鍵ファイル作成を繰り返すこととなろう。

 コマンドは2つある。「build-key」と「build-key-pass」である。前者と後者との違いは、パスワードで鍵が保護されるかされないかの違いである。前者はパスワード無しの状態で証明書&鍵が発行されるので、VPNクライアントを実行すると直ちにVPN接続が実行される。一方、後者のコマンドで作成した場合は、VPN接続を行う際にパスワードの入力が求められる。ノートPCなどの盗難のリスクを考えると、基本的には後者のコマンドで作成しておくのが吉だろう。
 「./build-key-pass (クライアント名)」と実行する。なお、複数のクライアントをセットアップする場合は、当然クライアント名はユニークになっている必要があることは言うまでもない。
 この作業でもいくつか入力を求められるが、やはり全部Enterキーを押すだけでよい。
 作成が完了すると、/etc/openvpn/easy-rsa/keysディレクトリの中に「(クライアント名).crt」ファイルと「(クライアント名).csr」と「(クライアント名).key」ファイルが作成される。


手順4:サーバ側でVPNの起動設定

 まず最初に、カーネルのパラメータ変更を行う。パケット転送を許可する設定を行う必要があるのである。
 具体的には、「/etc/sysctl.conf」を編集し、「net.ipv4.ip_forward = 0」という記述を「net.ipv4.ip_forward = 1」へと変更するのである。

 続いてイーサネットブリッジの起動と、OpenVPNデーモンの起動の設定を行う。
 OpenVPNをビルドしたディレクトリに、「sample-script」というディレクトリがある。この中の以下の3個のスクリプトを、ひとまず/etc/openvpnディレクトリにコピーする。
 ・bridge-start
 ・bridge-stop
 ・openvpn.init
 あとは別にコピーしなくてもよい。(してもいいけどね)

 コピーしたら、「bridge-start」ファイルについては必ず編集する必要があると思う。編集すべきポイントは
  br="br0"    ←多分このままで良いと思うが、OpenVPNを複数のインスタンスで実行している場合や、他の用途ですでにイーサネットブリッジユーティリティを使用している場合等は、変更が必要かもしれない。
  tap="tap0"    ←ここもほとんどの場合はこのままで良い。OpenVPNを複数のインスタンスで実行している場合は要変更。
  eth="eth0"    ←ここもあまり変更することは無いかもしれないが、複数のNICが認識されている場合等は変更が必要。
  eth_ip="192.168.?.??"    ←それぞれの自宅のネットワークに応じて変更が必要。ここでは、VPNサーバのアドレスを記述する。
  eth_netmask="255.255.255.0"    ←ほとんどの場合はこのままだと思う。もし172.16.とか10.0.とかで始まるアドレスで運用している場合は要変更かも??
  eth_broadcast="192.168.?.???"    ←ネットワークアドレスに応じてブロードキャストアドレスを記述する必要あり。

 bridge-startファイルを編集しおえたら、自動起動の設定を行う。/etc/init.dにある「network」ファイルを流用することにする。このファイルを「vpn」という名前にコピーして、コピーした方を編集するようにする。(さもないと失敗したときに悲しい思いをすることになるかもしれないからね!!!)
cd /etc/init.d
cp -p network vpn
vi vpn

 で、編集するポイントとしては、「case "$1" in」の制御構造文の中の、「start)」ブロックの最後(ただし、「;;」(セミコロン2個)の直前であること)に、
/etc/openvpn/bridge-start
/etc/openvpn/openvpn.init start
 を書き加えることと、同じ制御構造文の中の、「stop)」の最初(ぶっちゃけ、次の行にでも)に
/etc/openvpn/openvpn.init stop
/etc/openvpn/bridge-stop
 を書き加えること。

 なお、順番が大事なので、この通りの順序で記述するように。
 そうしたら、networkスクリプトの代わりにvpnスクリプトが実行されるように、chkconfigコマンドで設定変更を行う。
chkconfig --del network
chkconfig --add vpn
chkconfig vpn on

 という具合。これで、サーバが起動するとイーサネットブリッジユーティリティもVPNサーバも起動することとなる。

 続いて、OpenVPNサーバの設定ファイルを作成する。/etc/openvpnの下に、ナントカ.confと名前を付けておいておくと自動的にそれを使ってくれる。ファイル名の末尾が「.conf」なら名前は何でも良い。
 で、ひな形としては以下のような具合になるだろうか。
port 1194
proto udp
dev tap0
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/belldandy.crt
key /etc/openvpn/easy-rsa/keys/belldandy.key
dh /etc/openvpn/easy-rsa/keys/belldandy_dh1024.pem
server-bridge 192.168.0.2 255.255.255.0 192.168.0.192 192.168.0.224
push "route 192.168.0.0 255.255.255.0"
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
udp-mtu 1400

 重要なところだけ軽く説明を加えておく。まず、「port 1194」は、使用するポート番号を指定する。標準の状態だとこの1194が指定される。少し古いページになると5000と指定している場合もあるかもしれないが、まあ5000でも一向に構わない。
 「dev tap0」は、OpenVPNデーモンが使用する仮想NICの名前。イーサネットブジッリユーティリティの設定と、さらにクライアントの設定と同一になっている必要がある。ほとんどの場合はこのままの設定でよいはず。
 「ca /etc/openvpn/easy-rsa/keys/ca.crt」「cert /etc/openvpn/easy-rsa/keys/belldandy.crt」「key /etc/openvpn/easy-rsa/keys/belldandy.key」「dh /etc/openvpn/easy-rsa/keys/belldandy_dh1024.pem」これらの設定は、証明書ファイル・鍵ファイルの所在を記述する。CA証明書、サーバ証明書、サーバ鍵ファイル、DHパラメータファイルの順に指定している。
 「server-bridge 192.168.0.2 255.255.255.0 192.168.0.192 192.168.0.224」は、OpenVPNがブリッジモードで動作し、かつ必要なネットワークパラメータを指定している。パラメータは、server-bridge VPNサーバのIPアドレス ネットマスク値 VPNクライアントに払い出すIPアドレスの先頭 同じく末尾の順に指定される。当然だが、VPNクライアントに払い出すIPアドレス帯については、VPNサーバと同じアドレス帯であり、かつ他のdhcpサーバの管轄と混じらないようにする必要はある。
 「push "route 192.168.0.0 255.255.255.0"」は、VPNクライアントにルーティング情報を通知している。push "route ターゲットアドレス ネットマスク値"」の順。当然、自宅のネットワークアドレス帯に併せて変更する必要がある。

 残りの項目についてはまあ呪文みたいなものだと思ってもらっても差し支えないと思うので省略する。


手順5:VPNクライアントをセットアップ

 VPNクライアントをセットアップする。
 Windowsなマシンであることが多いだろうから、Windowsなマシン用のインストーラをOpenVPN公式サイトからダウンロードしてインストールする。特に気を付けることは無いと思う。Vista?なにそれ美味しいの?


手順6:VPNクライアントやサーバの所定のディレクトリに証明書や鍵ファイルや設定ファイルを配置する

 WindowsなVPNクライアントに、サーバで作成した証明書ファイルや鍵ファイルを配布する。クライアントに必要のないファイルは配布しないように!!

 クライアントにコピーする必要のあるファイルは、以下の3個のみ。
  ・CA証明書(拡張子は「.crt」)
  ・クライアント証明書と鍵ファイル(「(クライアント名).crt」と「(クライアント名).key」

 この他にOpenVPN設定ファイルが必要ということになろうか。
 コピーについてはフロッピーディスクを使うとか適切な方法でなんとかしてコピーしてもらいたい。(笑)なお、コピーしたらメディア上にあるファイルはちゃんと削除しておこうな!!

 なお、コピー先のディレクトリは、OpenVPNがセットアップされたディレクトリ(多くの場合は C:\Program Files\OpenVPN になると思うが、64ビット版のXPとかVistaとか使っている場合はちょっと違うかもしれない。そういう場合は各自で適切に読み替えるように)の中に、「config」というディレクトリがあるので、ここにコピーするとよい。

 設定ファイルも同じディレクトリに配置するが、拡張子は「.ovpn」になる点は要注意。ひな形としては以下のような感じ。
client
proto udp
dev tap0
remote hoge.dynamic-dns.com 1194
ca ca.crt
cert welsper.crt
key welsper.key
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun
verb 3
pull
float

 やはり重要なところだけ軽く説明を加える。
 「client」は、自分はクライアントであることを宣言している。それだけ。
 「remote hoge.dynamic-dns.com 1194」は、VPNサーバのアドレスとポート番号を指定している。見れば判ると思うが、remote サーバのアドレス ポート番号である。ちなみに、インターネットから接続するため、必要に応じてダイナミックDNSサービスを使用するとか、固定IPアドレスをISPに払い出してもらうとかの処理が必要となる。
 「ca ca.crt」「cert welsper.crt」「key welsper.key」はそれぞれCA証明書、クライアント証明書、クライアントの鍵ファイルである。先ほどのOpenVPNがインストールされたディレクトリにある「config」ディレクトリに配置した場合、パスの指定を省略することができる。諸般の事情でフルパス名で記述したい場合は、「ca "C:\\Program Files\\OpenVPN\\myconfig\\ca.crt"」という具合に記述する。「\」の記号は必ず2個続けて記述することを要する。また、パス名に空白が入る場合は、パス名の両端に「"」(ダブルクォーテーション)を置くこと。
 その他の指定は、サーバの設定ファイルのところで説明済みか、または呪文みたいなものなので省略する。


手順7:必要に応じてルータにVPNトラフィックの通過許可設定を行う

 自宅のブロードバンドルータで、パケットを透過する設定を行う。外部にサーバを晒す際には必ず必要な作業になる。ちなみに、OpenVPNで使用するのは、標準では 1194/UDP のみである。これをインターネットから内部のVPNサーバに流してやるようにパケットフィルタリングとかポートマッピングの設定を行うように。

 また、同時にdhcpの設定も適切に変更する。


手順8:接続テスト

 一旦、VPNサーバを再起動する。
  ・/usr/local/sbin/openvpn のプロセスが起動しているか?
  ・ifconfigコマンドで br0 と tap0 のインタフェースがUPしているか?
  ・怪しげなエラーメッセージがログに出ていないか?
 等を確認しよう。確認したら、VPNクライアントでVPNを起動し接続する。
 接続した後、VPNサーバにpingを投げて応答があれば完了。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。