ITのスキマにハマったときの解決ログ

IT技術者がスキマ時間で発信するスキマ時間で見てほしいITのお役立ちサイト

OpenVPN2.4系がサーバーに繋がらない原因をログで調査!解消法も紹介!

   

サーバーエンジニアとしてのお仕事でOpenVPNサーバーの構築をしました。

OpenVPNサーバーの構築はできたので最後にクライアント側からの接続を試したのですが、接続ができずクライアントとサーバーが繋がらない状態でした。

いろいろ調べては試して失敗というのを繰り返しましたが、なんとか解決しクライアントとサーバーが繋がるようになりました!

わたしが経験したことはOpenVPNを利用をする人の中に同じように問題が出るかな、と思ったので以前のわたしと同じように悩んでいる人の参考になればうれしいです。

OpenVPN2.4系でクライアントからサーバーに繋がらない

OpenVPNサーバーの構築が完了し、起動もできるようになりました。

クライアントとサーバーの接続を確認するためクライアントにOpenVPNをインストールし、
サーバーへ接続を試してみました。

検証した環境は以下になります。
OpenVPNサーバ(GCP上)
OS:CentOS6.10
OpenVPN:2.4.6

クライアント
OS:Windows10
OpenVPN GUI:v11.10

クライアントとサーバーの検証結果はエラーが発生し、接続できませんでした。

OpenVPNサーバーの方にもログは出力されなかったので、サーバーにすら通信が届いていないと、わたしは判断しました。

OpenVPN Clientのログ調査結果と想定される原因

サーバーのログには何も出力されなかったので、クライアント側のOpenVPN GUIのログから調査します。

ログ調査結果

OpenVPN GUIから接続したときに通信ログが表示されます。そのときのログ(抜粋)は以下のように表示されました。

この時点で起動の失敗に関係しそうな箇所を青文字にしています。詳しくはこのログの後に記載します。

Tue Sep 4 08:50:14 2018 UDP link remote: [AF_INET]192.168.10.0:1194
Tue Sep 4 08:50:14 2018 MANAGEMENT: >STATE:1538092214,WAIT,,,,,,
Tue Sep 4 08:51:14 2018 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Tue Sep 4 08:51:14 2018 TLS Error: TLS handshake failed
Tue Sep 4 08:51:14 2018 SIGUSR1[soft,tls-error] received, process restarting
Tue Sep 4 08:51:14 2018 MANAGEMENT: >STATE:1538092274,RECONNECTING,tls-error,,,,,

クライアント側の通信ログの「TLS Error」の行が、接続できない原因ではないかと当たりを付けました。

「TLS key negotiation failed」や「TLS handshake failed」が怪しいので調べてみます。

調査の結果「ファイアウォールの設定でOpenVPNの通信ができなくてエラーになるケースが多い」ということが分かってきました。

OpenVPNがサーバーに繋がらなかった原因

ファイアウォールの設定ということであれば、社内のルーターの設定かな?と思ったので、社内のネットワークを経由せずにOpenVPNの接続を試してみます。

スマホのテザリングを使えば社内のネットワークを使わずに検証できますね。では、社内のルーターを使わないでテザリングでやってみます!

OpenVPNの接続を実行してみると、通信ログが表示されます。ログを見ると、社内のネットワークを経由したときと同じエラーログが出力されてます。

クライアント側の通信ログは同じで、相変わらずサーバーのログに何も出力されておらず、サーバー側にも届いていません。

ファイアウォール以外の問題?と考えましたが、全く思い浮かばず、また調べてみたのですが他の原因らしきものはあまりないようです。

ここでファイアウォールは社内以外にも設定していることに気付きました。OpenVPNサーバーがあるGCPです。

GCPのコンソールを見てみるとファイアウォールの設定がありました!

GCP環境のほうでアクセス制限がかけられている

図のようにGCP環境上でアクセス制限がかけられていたので、OpenVPNサーバーまで通信が届いていない状態だったんですね。

ファイアウォールのUDPポートを許可するように設定して、もう一度試してみます。同じように通信ログを見ると、また同じエラーが出力されてます。

諦めモードになりつつもOpenVPNサーバーのログを見てみると、!?

サーバー側にはログが出力されており、クライアントからサーバーまでの通信が届いています!少し前進しましたね。

しかしOpenVPNサーバーのログも以下のようにクライアント側と同じエラーが出力されています。

Tue Sep 4 09:13:15 2018 xxx.xxx.xxx.xxx:47187 TLS: Initial packet from [AF_INET]xxx.xxx.xxx.xxx:47187, sid=0c5cdf14 caced5e2
Tue Sep 4 09:14:15 2018 xxx.xxx.xxx.xxx:47187 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Tue Sep 4 09:14:15 2018 xxx.xxx.xxx.xxx:47187 TLS Error: TLS handshake failed
Tue Sep 4 09:14:15 2018 xxx.xxx.xxx.xxx:47187 SIGUSR1[soft,tls-error] received, client-instance restarting

ここで状況が変わったのでもう一度社内ネットワークを使わずに検証してみます。クライアント側から接続を実行し、通信ログを見ると、!!

接続がうまくいったようです!クライアントとOpenVPNサーバーが繋がりました!

テザリングでの通信は成功して、社内環境ではエラーが発生したのは、図のように社内のルーターでアクセス制限がかかっているから、ということが分かりました。

OpenVPN2.4系のクライアントから繋がらないときの解消法

原因は調べた通り、ファイアウォールの設定ということでしたね。一つはGCP環境のファイアウォール設定、もう一つは社内のルーターのファイアウォール設定ということでした。

社内のファイアウォールにOpenVPNの通信を許可すると社内環境からでもクライアントからOpenVPNサーバーへの接続が成功しました。

Tue Sep 4 13:38:50 2018 Route addition via IPAPI succeeded [adaptive]

OpenVPNでクライアントとサーバーの接続ができないときは、環境ごとに通信の設定を見直してみてください。

おわりに

クライアントがOpenVPNサーバーに繋がらない原因はファイアウォールのアクセス制御でした。

もし同じように繋がらないという現象が起きている場合は、クライアントであれば別のネットワーク環境にして試したり、サーバー環境のネットワーク部分を確認してみてください。

切り分けを行っていくのが近道なので、一つずつ試してみてください。

 - ITお役立ち