メンテナンス用に外から自宅内にアクセスするためのVPN回線を用意してたけど、これはルータYAMAHA RTX1100の持ってた機能。YAMAHA RTX1100を外したので、VPNをLinuxサーバに担わせることにした。
普通にIPsecとか使えるVPNを入れるのも良いけど、噂によるとカーネルに依存しないOpenVPNがお手軽でしかもセキュアらしい。
外からのメンテにはiPadなんかを使うことがあるんだけど、iOS用公式OpenVPN Connectってのも最近リリースされたので、問題なくOpenVPNを採用できる。
Linuxサーバ(CentOS 6)にOpenVPNをインストールする方法はここを参考にしました。
http://centossrv.com/openvpn.shtml
iOSのOpenVPN Connectに食わせる設定ファイルはこんな感じのXMLファイル。認証局の証明書、クライアント証明書、クライアントの秘密鍵、TLS認証鍵を1本のファイルに記載した物です。
いろいろググって出てくる情報だとtls-auth(TLS認証鍵)がないけど、今回のサーバの設定だと必要なのがポイント。
remote smilemark.jp
<ca>
-----BEGIN CERTIFICATE-----
MIIDvzCCAyigAwIBAgIJAKuk/4XcJLQ5MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
.....
-----END CERTIFICATE-----
</ca><cert>
-----BEGIN CERTIFICATE-----
MIIEEDCCA3mgAwIBAgIBAzANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCSlAx
....
-----END CERTIFICATE-----
</cert><key>
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDa8z8eYoPrYUpf+3ZWpZCD+W3fBtxBsqAI9N/OP1csI2tLghrL
....
-----END RSA PRIVATE KEY-----
</key><tls-auth>
-----BEGIN OpenVPN Static key V1-----
3ff3fd4c0fcb2f17615e873d7c754598
....
-----END OpenVPN Static key V1-----
</tls-auth>
もう一つハマるのが、このエラー。
そのままだとOpenVPN Connectで接続しようとすると、全く繋がらずにOpenVPN Connectにこんなエラーが出ます。
EVENT:CORE_ERROR
PolarSSL:error parsing config private key : X509-Inbalid RSA key tag or value :
ASN1 - ASN1 tag was of an unexpected value
これはRSAキー(クライアントの秘密鍵)のフォーマットが違うためらしいです。OpenVPN ConnectではSSLエンジンとしてPolarSSLってのを使ってるためらしいです。
以下のようにして変換したRSAキーを使うことで解決できました。
openssl rsa -in <現在の秘密鍵ファイル> -out <変換後の秘密鍵ファイル>