So-net無料ブログ作成
検索選択
Linux(Network/VPN) ブログトップ

VPNを構築しよう・その6・ルーティングモードでのOpenVPNサーバセットアップ [Linux(Network/VPN)]

 こんどは、「ルーティングモード」でのOpenVPNサーバセットアップについて書いておく。

 その2までは全く一緒。違うのはここから。

 その4との差分としては、手順1は不要なのでばっさり省略する。ブリッジモードではないのでブリッジユーティリティは必要ないのであった。
 手順2・手順3はそのまま実行する。ここの手順は全く一緒なのであった。
 手順4は、以下のとおり。
1./etc/sysctl.confの修正は実施する。
2.sample-scriptディレクトリからコピーするファイルは、openvpn.initのみ。
3./etc/init.d/networkをコピーしたり編集したりする作業は実施するが、bridge-startとかbridge-stopとかの追記は省略。(コピーしてないからね!)

 で、server.confについては内容が若干変わるので、まずはサンプルから。
[root@nanako openvpn]# cat server.conf
# OpenVPNサーバ設定ファイル

# openvpnデーモンのパーミッション設定
user    nobody
group   nobody

# ポート設定
port    1194
proto   udp

# デバイス設定
dev     tun

# 証明書・鍵ファイル設定
ca      /etc/openvpn/keys/ca.crt
cert    /etc/openvpn/keys/nanako.crt
key     /etc/openvpn/keys/nanako.key
dh      /etc/openvpn/keys/dh1024.pem

# ネットワーク設定
server  192.168.9.0 255.255.255.0
ifconfig-pool-persist   /etc/openvpn/ip-pool.txt

# ルーティング設定
push    "route 192.168.1.0 255.255.255.0"

# 接続設定他
client-to-client
keepalive       10 120
comp-lzo
max-clients     5
persist-key
persist-tun

# ログ設定
status          /var/log/openvpn-status.log
log             /var/log/openvpn.log
verb            3

 ルーティングモードでは、仮想ネットワークデバイス名の指定には「dev tun」と書く。
 また、「server」の設定項目には、VPNクライアントがつながる専用の仮想ネットワークセグメントを用意する。このサーバ「nanako」は、192.168.1.2が本来のIPアドレスだとすると、VPNクライアントに払いだしているIPアドレスのセグメントは192.168.9.0/255.255.255.0というネットワークアドレス帯になる。なお、先頭のアドレス(ここでは「192.168.9.1」はOpenVPNサーバが使用するので、実際に払いだされるアドレスの先頭は「192.168.9.2」からということになる。


 で、ルーティングモードはブリッジモードで実施しなかった作業が1個追加で必要となる。
 ルーティングモードでは、VPNクライアントは「クライアント用の仮想的なネットワークセグメント」に接続されるので、このままでは本来のネットワーク帯にアクセスすることが出来ない。(閉じ込められた状態)そこで、OpenVPNサーバにルーティングの設定を導入しなければならない。さらに、本来のネットワークに接続されているサーバ等に、「クライアント用の仮想的なネットワークセグメント」にパケットが帰るための設定が必要になる。

 クライアント用の仮想的なネットワークセグメントから、本来のネットワークへの通信を透過するには、iptablesを使うのが一般的だと思う。その一例を示すと…
 iptables -t nat -A POSTROUTING -s 192.168.9.0/24 -o eth0 -j MASQUERADE
 とかこんな具合だろうか。NICのデバイス名とかIPアドレスとかは適切に変更してもらいたい。また、あて先のIPアドレスを縛りたい場合もその辺は適切に修正してくれたまえ。(笑)

#iptablesについてはまたの機会に…

 で、一方、本来のネットワークからクライアント用の仮想的なネットワークに通信を返すための設定には、/etc/sysconfig/static-routesを編集するとか、routeコマンドでその場しのぎをするとかあると思う。一例を示すと…
 (/etc/sysconfig/static-routesに以下の行を書き加える)
any net 192.168.9.0 netmask 255.255.255.0 gw 192.168.1.2

 (routeコマンドで対応する場合)
route add -net 192.168.9.0 netmask 255.255.255.0 gw 192.168.1.2

 アドレスとかは適宜適切なものに直して欲しい。(はにゃ~?うぃんどうず?なにそれおいしいの?)
 さらっと解説すると、「192.168.9.0」は、VPNクライアントが接続される仮想的なネットワークのアドレス帯。その後ろの「netmask」に続く値は、仮想的なネットワークアドレス帯に対するネットマスク値。「gw」に続くアドレスは、OpenVPNサーバの本来のアドレス

 これで、仮想的なネットワークアドレス帯と本来のネットワークアドレス帯との間を行ったり来たりすることが出来るようになった。

 なお、ルーティングモードで使用した場合、たとえば自宅内や会社の中のWebサーバ、あるいはsambaサーバでIPアドレスに基づいて制限をかけている場合は、そのままではVPNクライアントからの接続が許可されないので設定変更が必要になる。

 たとえば、Apache2のhttpd.confにこう書いてあったとする。
deny from all
allow from 192.168.1.

 自宅内ネットワーク、あるいは会社内のネットワークで「192.168.1.ナントカ」からのアクセスは受け付ける設定になっているとする。この場合、VPNクライアントのソースアドレスは「192.168.9.ナントカ」になるので、allowされないことになる。
 VPNクライアントからのアクセスも許可する場合は、
deny from all
allow from 192.168.1. 192.168.9.

 というように、allow fromの箇所にVPNクライアント用の仮想的なネットワークアドレス帯からのアクセスも許可するよう追記する必要が生じる。もちろん、VPN経由でのアクセスを許可しない箇所については、追記しないように。

VPNを構築しよう・その5・Linux版OpenVPN同士でVPN接続 [Linux(Network/VPN)]

 さて。ネット上にOpenVPNによるVPN構築を解説したサイトは数有れど、ほとんどの場合は
  ・Linux+OpenVPNでVPNサーバを構築
  ・Windows+OpenVPNでVPNクライアントを構築
 というパターンばっかりのようです。

 というわけで、ひねくれ者のワタクシとしてはそれじゃつまらないので、Linux+OpenVPNでVPNクライアントを構築する作戦を決行してみましたので、その内容を紹介しておきます。(笑)


 手順としては、割と簡単で、VPNサーバを構築した手順から不要な物をいくつか削除すればOK。
 まずは、「VPNを構築しよう・その2・なにはなくともOpenVPNをインストールする」に記述してある内容を全部実施してもらう。
 その後は、

手順1:VPNサーバ側で、新しいクライアント証明書とか鍵ファイルとかを作成する
手順2:必要な証明書とか鍵ファイルとかをクライアントに配布する
手順3:OpenVPNを起動して接続

 これだけ。もう、なにも難しいことはない。


手順1:VPNサーバ側で、新しいクライアント証明書とか鍵ファイルとかを作成する

 まず、VPNサーバ側で、新しいクライアントの証明書・鍵ファイルを作成する。
 VPNサーバにログインしたら、「VPNを構築しよう・その4・ブリッジモードでのセットアップ」の手順3の最初と最後に実施していることをほとんどそのまま実施する。

 最初は、環境変数の設定から。
cd /etc/openvpn/easy-rsa
. ./vars

※繰り返しになるけども、「. ./vars」というように、1個目のピリオドのあと、空白を1個置いてから、2個目のピリオド以降を入力するようにね!!

 で、このあとは「build-key」または「build-key-pass」コマンドでクライアント証明書と鍵ファイルを作成する。

 作成が済んだら、
  ・CA証明書(拡張子は「.crt」)
  ・クライアント証明書と鍵ファイル(「(クライアント名).crt」と「(クライアント名).key」
 以上の3ファイルをフロッピーとかそんな適当なメディアにコピーしておくのである。


手順2:必要な証明書とか鍵ファイルとかをクライアントに配布する

 今度はクライアント側にログインして、操作を行う。鍵ファイルとか設定ファイルを置いておくディレクトリを作成する。「mkdir /etc/openvpn」を実行したら、先ほどコピーしておいた、CA証明書とクライアント証明書と鍵ファイルを/etc/openvpnディレクトリにコピーする。

 で、定義ファイルは、Windowsの時とそれほど違いは無くて…
client
proto udp
dev tap0
remote hoge.dynamic-dns.com 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpnwelsper.crt
key /etc/openvpnwelsper.key
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun
verb 3
pull
float

 ぶっちゃけ、ファイルの保存場所の記述だけ変わっているという感じ。



手順3:OpenVPNを起動して接続

 それでは、OpenVPNを起動してみよう。
 ターミナルを1枚開いておき、そこから「/usr/local/sbin/openvpn /etc/openvpn/(ファイル名).conf」とか実行してみる。パスワードを聞かれたり、ログが沢山ながれたりすると思う。で、ログが流れるのが止まったら接続テストをしてみる。VPNサーバに向かってpingを投げて応答があれば多分大丈夫。

 なお、OpenVPNクライアントを自動で起動させたい場合は、/etc/rc.localとかに「/usr/local/sbin/openvpn /etc/openvpn/(ファイル名).conf&」とか記述しておくのが簡単。

 あとはiptablesやらrouteやらでNATするなりルーティングするなりするヨロシ。

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を投げて応答があれば完了。

VPNを構築しよう・その3・ブジッリモードとルーティングモード [Linux(Network/VPN)]

 ちょっと間隔が空いてしまった。

 さて。OpenVPNのインストールまでが完了したところで、「ブリッジモード」と「ルーティングモード」についてそれぞれ説明を加えておく。

 OpenVPNで使用できるモードになるが、外部のネットワークから自宅のネットワークに対してVPN接続をした際の、自宅のネットワークへの接続の行われ方が異なる。
 「ブリッジモード」の場合、外部のネットワークから接続しているクライアントマシンには、自宅のネットワークと同じアドレスが割り当てられることになる。
 イメージとしては、自宅のネットワークがビヨーンと伸びてきて、直接接続される感じ。

 一方、「ルーティングモード」の場合、自宅のネットワークとは違うネットワークに一旦接続され、自宅のネットワークにアクセスする際には、VPNサーバや他のルータを経由して(ルーティングして)アクセスすることとなる。

 どちらが良いか?と聞かれると、なかなか難しいところもある。個人的には、個人で自宅のネットワークに接続するくらいならブリッジモードでいいんじゃね?と思ったりもする。一方、会社で使用したい場合等はルーティングモードで使用し、アクセス制限などをかけるのが良いのではないかとも思う。

 ここでは、個人的な用途で自宅のネットワークに接続したいというあたりを想定して、まずがブリッジモードでのVPN構築について記述しておこうと思う。

VPNを構築しよう・その2・なにはなくともOpenVPNをインストールする [Linux(Network/VPN)]

 それでは、VPNを構築するにあたって使用する主役となるソフト「OpenVPN」をセットアップする。
 大変残念なことに、yumコマンド(CentOS)やapt-getコマンド(VineLinux)ではインストールできないので、ソースを入手して自分でビルド・インストールをしなければならない。

 まあ、難しいことは何も無くて、
①ソースの入手
解凍・展開
③ビルド
④インストール

 ということだけである。
 なお、初期設定については、構築するVPNのスタイルによって変わってくるので、その都度解説しようと思う。




①ソースの入手

 ソースは、OpenVPN公式サイトから入手することとなる。2009.07.03現在、正式リリースのバージョンはOpenVPN 2.0.9であり、β版のバージョンはOpenVPN 2.1_rc18となっている。
 なお、OpenVPNのビルドに先立って、OpenSSL-develパッケージのインストールと、LZOライブラリが必要となるので、これを入手し、ビルドする必要がある。OpenSSLはyumコマンド(apt-getコマンド)で入手可能だし、LZOライブラリはごく普通に、単に「./configure」して「make」して「make install」すればOK。

[root@test-server ~]# yum search openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: rsync.atworks.co.jp
 * updates: rsync.atworks.co.jp
 * addons: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
============================ Matched: openssl-devel ============================
openssl-devel.i386 : Files for development of applications which will use
                   : OpenSSL
xmlsec1-openssl-devel.i386 : XML Security Library の OpenSSL 暗号プラグイン
[root@test-server ~]# yum install openssl-devel.i386
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  (以下略)
[root@test-server ~]# cd /usr/local/src
[root@test-server src]# wget http://www.oberhumer.com/opensource/lzo/download/lz
o-2.03.tar.gz
--13:30:20--  http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
www.oberhumer.com をDNSに問いあわせています... 193.170.194.40, 2001:628:2040::1:8
www.oberhumer.com|193.170.194.40|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 626042 (611K) [application/x-gzip]
Saving to: `lzo-2.03.tar.gz'

100%[=======================================>] 626,042     52.1K/s   in 12s

13:30:23 (52.1 KB/s) - `lzo-2.03.tar.gz' を保存しました [626042/626042]

[root@test-server src]# ls -la
合計 1456
drwxr-xr-x  2 root root   4096  7月  3 13:30 .
drwxr-xr-x 11 root root   4096  3月 10 07:42 ..
-rw-r--r--  1 root root 626042  4月 30  2008 lzo-2.03.tar.gz
[root@test-server src]# tar xvfz lzo-2.03.tar.gz
lzo-2.03/
lzo-2.03/src/
lzo-2.03/src/lzo_dict.h
lzo-2.03/src/lzo1b_8.c
  (以下略)

[root@test-server src]# cd lzo-2.03
[root@test-server lzo-2.03]# ./configure
configure: Configuring LZO 2.03
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
  (以下略)

[root@test-server lzo-2.03]# make
  (以下略)

[root@test-server lzo-2.03]# make install


 これでLZOライブラリがインストールできた。
 引き続き、OpenVPNのビルド・インストールである。

[root@test-server src]# wget http://openvpn.net/release/openvpn-2.1_rc18.tar.gz
--13:48:29--  http://openvpn.net/release/openvpn-2.1_rc18.tar.gz
openvpn.net をDNSに問いあわせています... 72.32.147.161
openvpn.net|72.32.147.161|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 838716 (819K) [application/x-gzip]
Saving to: `openvpn-2.1_rc18.tar.gz'

100%[=======================================>] 838,716      124K/s   in 6.6s

13:48:31 (124 KB/s) - `openvpn-2.1_rc18.tar.gz' を保存しました [838716/838716]

[root@test-server src]# tar xvfz openvpn-2.1_rc18.tar.gz
openvpn-2.1_rc18/
openvpn-2.1_rc18/status.h
openvpn-2.1_rc18/misc.c
  (以下略)

[root@test-server src]# cd openvpn-2.1_rc18
[root@test-server openvpn-2.1_rc18]# ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
  (以下略)

[root@test-server openvpn-2.1_rc18]# make
make  all-recursive
make[1]: ディレクトリ `/usr/local/src/openvpn-2.1_rc18' に入ります
  (以下略)

[root@test-server openvpn-2.1_rc18]# make install
Making install in images
make[1]: ディレクトリ `/usr/local/src/openvpn-2.1_rc18/images' に入ります
make[2]: ディレクトリ `/usr/local/src/openvpn-2.1_rc18/images' に入ります
  (以下略)



 と、これでインストールは終了。
 次のアーティクルではOpenVPNで使用するCA認証局の構築と、サーバ証明書・キーファイルの生成を行います。

VPNを構築しよう・その1・「VPN」とは? [Linux(Network/VPN)]

 めっちゃくちゃ久しぶりの更新。

 今度はVPNについてあれこれ書こうと思う。一応、このblogで扱う環境としては、CentOS+OpenVPN、またはVineLinux+OpenVPNということになろうかと思う。

 まず、「VPN」とはなんぞや?というところから。

 「VPN」とは、「Virtual Private Network」の略称であるとされる。日本語で書くと仮想プライベートネットワークという表現になろうか。
 単に、「ネットワーク」といっても、様々な切り口で、様々な表現・用途・分類等々があるとされるが、おおざっぱに
 私的(プライベート)なネットワーク…つまり、自宅の中、あるいは会社の中で限られた人だけが使用するネットワークの領域と、
 公共(パブリック)のネットワーク…つまり、いわゆる「インターネット」のことを言い、不特定多数の人が共有するネットワークの領域とに分けられるとする。(ちと乱暴ではあるが)

 私的(プライベート)なネットワークには、家庭内あるいは事務所内のPCがつながっている。ネットワークを利用するPC以外の機器、すなわち、NASだったり、ゲーム機だったり、TVだったり、HDDレコーダーだったり。この領域は、その使用者が自由に(そして気ままに、かつ無防備に)使用することが出来るネットワークの領域である。ネットワーク機器によっては、こうしたネットワークの領域を「Trustゾーン」(信頼できるゾーン)と呼ぶこともあるようだ。
 また、一般的には私的(プライベート)なネットワークに対しては、『ネットワーク的に』直接接続できる場所からのアクセスに限られることがほとんどだろう。LANケーブルで接続しているとか、無線LANで接続しているとかいう具合に。こういった接続方法での接続では、自宅の中、あるいは事務所の中といった、狭い領域でしか接続することが出来ないはずである。
 一方、公共(パブリック)のネットワーク、つまりインターネットは、都会の道路と同様に見ず知らずの人が・データが大量に往来するネットワークの領域で、普通はこういったネットワークにゲーム機とかTVとかを直接接続するようなことはまずやらないだろう。PCについては接続することもあるだろうが、そうしたPCについてはセキュリティ対策を講じた上で接続することが一般的だろうと、信じている…
 インターネットには、様々な場所から接続することが可能だろう。ほとんどの場合は、「誰かの」あるいは「どこかの」私的(プライベート)なネットワークに接続した上で、そこを経由してインターネットにアクセスすることになるだろうが、携帯電話やPHS等といったキャリアを経由して『事実上』インターネットに直結することもあるだろう。要するに、インターネットにたいするアクセスは、場所の制約を受けないのである。

 ここで、一つの問題・要求にぶつかることがある。

 外出先から、自宅の(事務所の)PC・サーバに置いてあるファイルが欲しい

 というような場合だ。
 メールで転送してもらうというような事も考えられるが、遠隔地から、自分の私的(プライベート)なネットワークにアクセスしたいという要求は、実に切実な問題になることもしばしばあるだろう。

 そこで考え出されたのが、VPNなのである。(なお、このblogで扱うVPNは正確には「インターネットVPN」であるが、このblogの記事において単に「VPN」と記載している場合は無条件に「インターネットVPN」を指していると考えてもらいたい。)



 VPNは、離れた場所にある私的(プライベート)なネットワークに対して公共(パブリック)のネットワークを経由してアクセスする仕組みを提供する。
 離れた場所に、あたかも自分の私的(プライベート)なネットワークがあるように見えるので、「仮想」「プライベート・ネットワーク」という表現になるのである。

 VPNの接続形態にはいくつかのパターンがある。まず、最もスタンダードなパターンと思われるのが、「リモートアクセス型VPN」だろうか。離れた場所にある私的(プライベート)なネットワークに、PCを1台接続する…というような場合。外出先で使用しているノートPCから、自宅や社内のネットワークに接続し、データにアクセスするとかそういうケースはこのパターンにあてはまる。
 もう一つのパターンは、離れた場所にある複数の私的(プライベート)なネットワークを、インターネットを通じて仮想的に1個のネットワークにしたいという場合。例えば、企業において、離れた場所にある本社の社内ネットワークと支社の社内ネットワークとを接続したいという場合。これを「拠点間VPN」とか「LAN型VPN」とか呼んだりする。

 なお、当blogではまず「リモートアクセス型VPN」について解説し、その後で「LAN型VPN」についても解説を加えたいと思う。



 VPNの構築において欠かせないのは、「ネットワークに対する一定量の知識」と、「セキュリティに対する一定量の知識」とである。この両者のうちどちらがかけてもVPNの構築はおぼつかないと思ってもらいたい。
 とはいえ、メチャクチャ高度な知識を要求される訳でも無いと思うが、多少、ハードルは高めかもしれないのでしっかりと勉強しておくと後々安心だと思う。


Linux(Network/VPN) ブログトップ
メッセージを送る