Ubuntu ServerにはインストールされていないNetwork Managerをあえてインストールし、VPNクライアントとして使用する方法を解説します。
VPSとVPN接続
昨今のクラウドサービス(IaaS)の多くではVPN接続サービスをオプションで提供しています。特にクラウドサービスである必要はないものの、安価にVPSでVPNを設定したい、ルーターのVPNサーバー機能と組み合わせてまるでローカル接続のようにVPSを使用したいというニーズはあるのではないでしょうか[1]。
ご家庭にあるようなルーターのVPN機能はPPTPをサポートしているものが多いですが、今となってはセキュリティ的に論外です。簡単に設定するならOpenVPNですが、対応しているルーターが少なく、またOpenVPNの特性上アプライアンスでOpenVPNサーバーを起動するのはあまりよくないように思います[2]。
次に候補になってくるのはL2TP/IPsecですが、対応するルーターは上位機種になるという問題はあるものの、対応モデルが多く、またPPTPと比較してセキュアなので魅力的です。そこで今回はどこのご家庭にもある[3]YAMAHA RTX1200を使用することにしました。
ではVPS側のL2TP/IPsecクライアントはどうすればいいでしょうか。順当に考えればstrongSwan+xl2tpdになりますが、設定が煩雑なので簡単に設定できるフロントエンドがあるといいです。そのため今回はNetwork ManagerとNetworkMananger-l2tpを使用することにしました。VPSのOSはUbuntu Server 16.04 LTSとします。
NetworkMananger-l2tpはこの2年弱で開発が進み、安定して使用できるようになりました。ただしUbuntu 16.04 LTSのリポジトリにパッケージはないため、別途PPAからインストールする必要があります。なおUbuntu 17.10からリポジトリにあります。
簡単に説明しましたが、罠はいろいろとあります。まずUbuntu ServerにはNetwork Managerはインストールされていないため、インストールした上で設定を行う必要があります。VPSは固定グローバルIPアドレスが振られていることが多いので[4]、設定の移植作業が必要になります。またNetwork Managerにはコマンドラインツール(nmcli)がありますが、残念ながらVPNの設定はコマンドラインからはできません。設定を手書きするか、GUIのNetwork
Managerで設定した項目をエクスポートし、nmcliでインポートする必要があります。今回は後者とします。よってUbuntu 16.04 LTSまたはUbuntu 17.10(デスクトップ)の用意も必要です。
ルーターには固定グローバルIPアドレスまたはダイナミックDNSサービスへの加入が必要です。今回は前者と仮定しますが、YAMAHAのルーターであればダイナミックDNSサービス(ネットボランチDNS)が付属するため、これを利用するのも手でしょう。
準備の工程が長いですが、詳しく見ていきましょう。
ルーターの設定
ルーターのL2TP/IPsecの設定方法はそれぞれなのでここで解説することはできませんが、RTX1200の設定例を掲載します(図1)。YAMAHAのルーターでは設定名を「PP」と「anonyomous」から選択できますが、今回は固定IPアドレスのVPSを使用するので後者を使用します。しかし後述する理由により設定自体は「PP」と「anonyomous」の両方を同じ設定で作っておくと確認が楽になります。
L2TP/IPsecの設定
前述のとおりnmcliではVPNプラグインの設定はできないため、GUIで設定してエクスポートします。今回はUbuntu 17.10を使用することにしました。まず端末から"network-manager-l2tp-gnome"パッケージをインストールします。通常設定は「設定」-「ネットワーク」-「VPN」から行いますが、今回はこれを使用しません。なぜならここからだと設定のエクスポートができないからです。端末あるいはAlt+F2キーを押したあとに「nm-connection-editor」と入力し、起動します(図2)。
「ネットワーク接続」が起動したら(図3)、左下の「+」ボタンをクリックします。「接続の種類を選んでください」が表示されるので、「Layer 2 Tunneling Protocol (L2TP)」を選択し、「作成」をクリックします(図4)。
「VPN」タブ(図5)で「ゲートウェイ」(ルーターのホスト名あるいはIPアドレス)とユーザー名とパスワードを入力し(パスワードは必須ではありません)、「IPsec Settings」をクリックします(図6)。「Pre-shared key」はルーターの設定したものでいいのですが、「Phase1 Algorithms」と「Phase2 Algorithms」に入力する文字列はまちまちです。今回RTX1200に接続するための設定はそれぞれ「3des-sha1-modp1024」「aes128-sha1」ですが、ドキュメントを参考に適宜変更してください。
「PP Settings」タブも変更が必要です(図7)。「MPPE暗号を使用する」にチェックを入れ、「セキュリティ」を「128ビット(もっとも安全)」に変更します。MSCHAPは使わないのでチェックを外し、「MTU」と「MRU」を適切な数値に変更して「OK」をクリックします。
あとは「保存」をクリックし、ウィンドウが閉じたら右上のユーザーメニューをクリックして「VPNオフ」の「接続」をクリックします(図8)。パスワードを入力後、設定に問題がなければ接続しますが、YAMAHAのルーターの場合はanonymous接続かPP接続かをよく確認してください。
問題なく接続したら、「VPN」タブの「エクスポート」をクリックし、設定を保存します。ファイル名は何でもいいですが、拡張子は「conf」である必要があります。
Ubuntuサーバーの設定
ようやく舞台をVPSに移して設定を行います。VPSにはUbuntu 16.04 LTSがインストールされ、適切に設定されているものとします。なお、L2TP/IPsecクライアントとして使用する場合は、特別なポートが空いている必要はありません。
まずは/etc/network/interfacesファイルの中身を確認してください。通常はここでIPアドレス等の設定が行われているもと思われます。Network Managerはこの設定があると動作しないため、この設定を移植したあとこのファイルを削除またはリネームします。このファイルではないところで設定が行われている場合は、そちらを参照してください。
今回移植する/etc/network/interfacesの例は次のとおりです。
続けてNetwork Managerをインストールします。次のコマンドを入力してください。
インストール完了後、次のようなメッセージが表示されます。
「ens3」はこのとおりではないかもしれませんが、いずれにせよ前述のとおりの注意が表示されます。
Network Managerにinterfacesファイルの設定を移植します。
ポイントは、ネットマスクはprefix長で入力する必要があります。今回はBBB.BBB.BBB.BBBをFFとしています。
では次のコマンドを入力してください。
defaultという接続名で設定しました。
再起動後、正しくネットワーク接続が行われていれば成功ですが、念のため次のコマンドを入力して確認してください。
「connected」の文字があれば成功しています。
ようやくNetworkManager-l2tpをインストールします。次のコマンドを入力してください。
先ほどエクスポートしたL2TP/IPsecの設定をUbuntu Serverにコピーします。方法は任意ですが、通常はscpコマンドを使用することになるでしょう。ファイル名はrtx1200.confとします。
次のコマンドでインポートします。
これで完了としたいところですが、Ubuntu Serverにはパスワードを保存する仕組みがインストールされていないため、設定ファイルに直接書くことにします。例としてパスワードはPASSWDとします。
今回の例だと設定ファイル名は/etc/NetworkManager/system-connections/rtx1200
になるので、これをvimなどのエディターで開いてください。
設定箇所は、[vpn]のセクションの一番下にpassword-flags=0
を追加し、ファイルの一番下に[vpn-secrets]
セクションを追加し、password=PASSWD
を指定します。例として次のようになります。
実際に接続するには次のコマンドを入力してください。
正しく接続されているかの確認にはipコマンドを使用するのがいいでしょう。
自動接続する場合は次のコマンドを実行してください。
運用について
設定方法の説明はこれで終わりですが、運用上の問題点はいくつかあります。まずNetwork ManagerにはVPN切断時の自動再接続の仕組みがないことです。これはチェックスクリプトを定時で走らせるくらいしか解決方法が思いつきません。
またルート(route)がVPNのもの、すなわちルーターの優先度が一番高くなるため、不都合なことがあるかもしれません。これはNetwork Managerでも設定可能ですが、今回は紹介を省略します。