komeの備忘録

東大理系大学院生の技術ブログ。たまに趣味。

Ubuntu18.04をL2TPのVPNクライアントにする

はじめに

ありそうでなかったので書いた。
事前に構築しておいてたSoftetherのVPNサーバにUbuntu18.04からつなぎましょう!という話

SoftetherのVPNサーバが立てたい人は、この辺の記事を参考にしましょう。
www.komee.org

環境

  • サーバ: Ubuntu16.04 Server/Softether4.25
  • クライアント: Ubuntu18.04 Desktop

セットアップ

必要なファイルのインストール

以下はすべてクライアントPC上で行う。

$ sudo apt install network-manager-l2tp-gnome

これを実行すると、依存するいろんなファイルをまとめてインストールしてくれて勝手に環境が構築されて楽。ちなみに今回インストールしたこのソフトウェアは、GUIでいい感じにL2TPのVPNをセットアップする環境を用意してくれるものである。というのもUbuntu18.04ではデフォルトでVPNの設定項目があるのだが、デフォルトで対応しているプロトコルはなぜか、PPTPのみなのである。L2TPを使いたかったら、自分でなんとかしてねという神対応なのである。

f:id:komee:20181201201626p:plain
初期状態のVPN設定

f:id:komee:20181201201708p:plain
上記のnetwork-manager-l2tp-gnomeをインストールしたあとの同じ画面

これでL2TPをセットアップする準備が整った。

L2TPのセットアップ

先程の画面には,Settings->Network->VPNのタブの右上の+を押すことで辿り着ける。辿り着いたら、以下のように設定する。

f:id:komee:20181201202802p:plain
L2TPの設定画面

  • Name: 任意の名前をつける。自分が認識できれば何でもいい
  • GeneralのGateway: VPNサーバのホスト名orIPアドレスを記述
  • Optional/UserName&Password: 事前に設定したユーザ名とパスワードを記述

※パスワードに関しては、パスワードを毎回入力するか、OSの中に記憶させるかをテキストボックス右の?マークをクリックすることで選択できる。

IPsec Settings

これらの設定が終わったら、次に下部のIPsec Settingsを開く。
上部のEnable IPsec tunnel to L2TP hostにチェックを入れるとグレーアウトしていた部分に記入できるようになる。

f:id:komee:20181201203323p:plain
IPsec Settings

  • Gateway ID: 何も書かない
  • Pre-shared key: 事前にサーバで設定してある事前共有鍵(PSK)を記述
  • AdvancedのPhase1/2 Algorithm: 後述。けっこう詰まった。

最後のアルゴリズムに関しては、サーバ側が複数のアルゴリズムを提供していたら、そのとおりに書くことができる。1つ指定すれば,とりあえず動く。
で、このアルゴリズムの調べ方は以下のとおりである。

  • 自分でログインできないVPNサーバの場合
    管理者に問い合わせる。

  • 自分でログインできるVPNサーバの場合
    サーバ上でvpncmdを実行し、ServerCipherGetを実行する。そうするとサーバは以下のような出力をする。

VPN Server>ServerCipherGet
ServerCipherGet command - Get the Encrypted Algorithm Used for VPN Communication.
Encrypted Algorithm Currently Used by VPN Server: 
 AES128-SHA

List of Usable Encrypted Algorithm Names: 
 RC4-MD5
 RC4-SHA
 AES128-SHA
 AES256-SHA
 DES-CBC-SHA
 DES-CBC3-SHA
 DHE-RSA-AES128-SHA
 DHE-RSA-AES256-SHA
 AES128-GCM-SHA256
 AES128-SHA256
 AES256-GCM-SHA384
 AES256-SHA256
 DHE-RSA-AES128-GCM-SHA256
 DHE-RSA-AES128-SHA256
 DHE-RSA-AES256-GCM-SHA384
 DHE-RSA-AES256-SHA256
 ECDHE-RSA-AES128-GCM-SHA256
 ECDHE-RSA-AES128-SHA256
 ECDHE-RSA-AES256-GCM-SHA384
 ECDHE-RSA-AES256-SHA384
The command completed successfully.

読めばわかるが。これでこのサーバはAES-128-SHAというアルゴリズムを使っていることがわかった。

次にIKEに用いるDiffie-Hellmanも併せて知っておく必要がある。これに関しては、SoftEtherのサーバ側でグループ1,2,3に対応していて,それぞれmodp768, modp1024, modp1536という呼称となっている。これもクライアント側で指定しないと接続できないのだが、正直どれを選択しても接続できる。

さてこれら2つを結合することで、Phase1 Algorithmが記述できるようになる。
今回の場合は、なんとなくmodp1536を選ぶ。先に判明した暗号化アルゴリズムのAES-128-SHAと合わせることで,次のような文字列をPhase1 Algorithmに入力する。

aes128-sha1-modp1536

※無印のSHAと出てきたものはSHA1のことである。SHA256に対応させてこのように記述する。

これでIPsec Settingsの入力は終わる。

PPP Settings

次に1つ前の画面に戻って、隣のPPP Settingsを開く。

こっちはめっちゃ簡単で、中段Security and CompressionUse Point-to-Point encryption(MPPE)と,その下のEchoSend PPP echo Packetsにチェックを入れるだけである。終わり。

すべて入力したら、1つ前の画面に戻ってApplyし、入力内容を保存する。そしてインターネットに繋がった状態で、作成したVPNサーバをONにするとつながるはずである。

コマンドラインで$ ip aなどと叩くと、新たな仮想インタフェースが作成され、指定したIPアドレスが割り振られていることで接続を確認できるであろう。

まとめ

GUIの設定を導入してポチポチするとつながる。ちなみに余談だが、Softetherの公式ページにはLinuxをクライアントとしたVPN接続に関しては次のような記載があった。

...Linux 版 VPN Client は、Linux オペレーティングシステムやネットワークについて、非常に詳しい知識をお持ちの方のみが使用してください。... 4.1 動作環境 - SoftEther VPN プロジェクト

こわ!
なので、今回の方法で接続する人はあくまで自己責任で接続するようにしましょう。

参考にしたサイト

Ubuntu 17.10でL2TPのVPN接続を試してみた

仕様 - SoftEther VPN プロジェクト