OpenVPNの設定
- モチベーション(過去重複ネタ)
- 現在のインターネットではネットワークをいくつものセグメントに分けて、グローバルIPアドレスとプライベートIPアドレスという分別をしてアドレスの枯渇を防いでいる。プライベートIPはインターネットから隔離されたプライベートネットワークの中でのみ有効である。ホームネットワークのような状態が身近だろう。このプライベートIPしか持てない端末がインターネットの他のPCと通信を行えるのはルータがあるからである。現在のルータはNAT機能を備えたものが主流であり、これなくしてはアドレス範囲が限られた現在のIPv4においてこれほど多様なネットワークの使い道はできい。逆を言えばアドレス範囲の設け方をケチりすぎたためにこのような面倒な状況になってしまっている(実際の真意はわからない)。ルータ自体は「WAN(Wide Area Network)側IP」と「LAN(Local Area Network)側IP」という2つのアドレスを扱い、WAN側IPに送信されてきた信号をLAN内の端末へ送信する。通信にはアプリケーションによって異なる「ポート番号」が用いられるようになっているが、ルータではWAN側からきたどのポート番号への信号を内側へ送信するかという設定ができるようになっている。これを「ポートフォワーディング」と呼んでいる。昔はIPマスカレイドなどと呼んでいた気もするがなにが違うのかは忘れた。ルータにはルータのLAN側IPアドレスへブラウザなどを使ってアクセスすると、これらの設定ができるページが見れるものが今はほとんどであろう。UPnPに対応しているルータ(これが主流ではあるが完ぺきではないらしい)であればUPnP規格に対応した命令文をプログラマティックに送信してやることもできるがこれはプログラマ向けである。ポートフォワード処理を終えルータのWAN側IPのポートフォワード済みポートへ信号を送信すれば、そのポートを開放しているLAN内のクライアントへパケットが送信される。
- VPN(Virtual Private Network)の構築も基本的には上のような処理が前提となっているが、VPNではクライアントに仮想のIPアドレスが設定される。イメージとしてはルータのWAN側IPとポートの情報が仮想IPアドレスへマッピングされるような感覚で使える。つまり「グローバルIPを持たないLAN内端末へ外部からアクセスすることができるようになる」のである。正直「なんで今のインターネットはこんなことをするのが小難しいの?」と思うのが普通のユーザだろう。マニアでも最初に一度はそう思うはずだ。しかしこういうものになってしまったのである。
- OpenVPN
- 設定
■サーバ側設定ファイル
;local a.b.c.d port 1194 proto tcp ;proto udp ;dev tap dev tun ;dev-node MyTap ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 push "route 192.168.0.0 255.255.255.0" // クライアントもしくはサーバの存在するサブネットを指定してやらないとルーティングしてくれない ;push "route 192.168.20.0 255.255.255.0" ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 ;learn-address ./script ;push "redirect-gateway" ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1" ;client-to-client ;duplicate-cn keepalive 10 120 ;tls-auth ta.key 0 # This file is secret ;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES comp-lzo ;max-clients 100 ;user nobody ;group nobody persist-key persist-tun status openvpn-status.log ;log openvpn.log ;log-append openvpn.log verb 3 ;mute 20
-
- ルーティングの設定のところの説明がよくわからなかったのでほおっておいたらそこが原因でルーティングしてくれておらずはまった。クライアントがサーバの後ろにあるサブネットにアクセスできるように、そのサブネットのアドレス範囲を教えてやれということ。またサーバ後方のサブネットの端末に別のサブネットにあるOpenVPNクライアントの仮想IPアドレス範囲を教えてやる場合にも使用する。あとの部分はプロトコルの設定、ポート番号等をクライアントの設定と合わせてやれば問題ないだろう。クライアント設定ファイル内ではルータのWAN側アドレス(ホスト名の場合が一般的だろう)を正確に設定するようにする。
- ルータのWAN側IPアドレスはころころ変わるので(そういうもの)、IPアドレスとして扱うのではなくダイナミックDNSサービス等を利用し、ルータのWAN側IPの変化を監視するソフトウェアを常駐させアドレスの変化を監視し、常にダイナミックDNSサービスで取得したホスト名でそのルータへアクセスできるようにしておくとよいだろう。