ホーム DoRuby VPNに触れてみる〜その2〜
VPNに触れてみる〜その2〜
 

VPNに触れてみる〜その2〜

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

VPNとは何ぞ、から実際につなげてみるまで。今回はVPN接続のうち、CUIのVPNクライアントを利用したお話。

はじめに

1回目の記事ではVPNの伝送方式について、2回目の記事ではIPSec/L2TPとWindowsでのVPNクライアントの利用方法を紹介しました。
今回はWindows以外でのVPNクライアントの利用方法について紹介します。

準備

・WindowsのVPNクライアントの時と同じくユーザ名、対応するパスワード、サーバ情報(アドレスとポート番号)、及び各種VPNで指定された設定
makeを実行できる環境設定(Makefileが用意されているので、このファイルからmakeコマンドでvpnclient及びvpncmdのバイナリファイルを生成する必要があります)
・TUN/TAPのインストール
・VPNクライアントのダウンロード(リンクはこちら)
本記事では(Ver 4.20, Build 9608, rtm)を利用しています。

またVPNサーバを介して、IPのグループが違うネットワークへ接続する場合(VPNサーバと接続先のIPがサブネットマスク部分で異なる場合)は、サブネットマスクやDNS、ドメインに注意が必要です。

・接続先のIPアドレス(接続先が同じIPアドレス群であれば、xxx.xxx.xxx.0/24等でも可)
・DNSサーバ(ホスト名解決を行う必要がある場合、上記に加えて必要。ドメイン名がある場合、そちらも合わせて必要になります。)

1.VPNクライアントを展開し、任意の場所におきます。ターミナルでそのフォルダへ移動後、makeを実行します。
make実行時にライセンス等の規約について確認されますが、問題なければすべて1を入力して実行を続けます。

$ make

実行結果
--------------------------------------------------------------------

SoftEther VPN Client (Ver 4.20, Build 9608, Intel x64 / AMD64) for Mac OS X Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

--------------------------------------------------------------------


Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number: 

〜省略〜
正常処理された場合に表示される
--------------------------------------------------------------------
The preparation of SoftEther VPN Client is completed !


*** How to switch the display language of the SoftEther VPN Client Service ***
SoftEther VPN Client supports the following languages:
  - Japanese
  - English
  - Simplified Chinese

You can choose your prefered language of SoftEther VPN Client at any time.
To switch the current language, open and edit the 'lang.config' file.


*** How to start the SoftEther VPN Client Service ***

Please execute './vpnclient start' to run the SoftEther VPN Client Background Service.
And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure SoftEther VPN Client.
Of course, you can use the VPN Server Manager GUI Application for Windows on the other Windows PC in order to configure the SoftEther VPN Client remotely.
--------------------------------------------------------------------

2.vpnclientとvpncmdが作成できたら、以下のコマンドで実行します。

$ sudo ./vpnclient start

実行結果
The SoftEther VPN Client service has been started.

3.以下のコマンドと作業を行い、CUIの管理画面に入ります。
./vpncmdを実行し、「1 – 3 を選択」で2を選択→「接続先のホスト名またはIPアドレス」では、入力せずエンターでokです。(localhostへ接続します)
ここで3を選択した場合はVPNが十分動作できるかどうか検査することができます。事前に確認しておきましょう。

$ ./vpncmd
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 4.20 Build 9608   (Japanese)
Compiled 2016/04/17 21:59:35 by yagi at pc30
Copyright (c) SoftEther VPN Project. All Rights Reserved.

vpncmd プログラムを使って以下のことができます。

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 2

接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。
接続先のホスト名または IP アドレス: 

VPN Client "localhost" に接続しました。

VPN Client>

これでVPNクライアントの管理ができるようになります。
設定を中断するためにとCtrl+Cを押すと脱出してしまうため、実行に注意しましょう。また脱出コマンドはexitになります。

4.仮想NICを作成します。Windowsの時もそうでしたが、仮想NICがないと接続できません。
以下のコマンドを入力し、指示に従って作成します。

VPN Client>NicCreate
NicCreate コマンド - 新規仮想 LAN カードの作成
仮想 LAN カードの名前: VPN    

コマンドは正常に終了しました。

作成後、NicListでMacアドレスを確認しておいてください。(後で確認の意味で利用します)

5.接続用のアカウント情報を作成します。ユーザ名や接続先のアドレスを聞かれるので順次入力します。

VPN Client>AccountCreate
AccountCreate コマンド - 新しい接続設定の作成

# この名前は接続時に利用します
接続設定の名前: VPNniTsunagitai

接続先 VPN Server のホスト名とポート番号: xxx.xxx.xxx.xxx:443(対象サーバのIP)

接続先仮想 HUB 名: VPN

接続するユーザー名: exampleVPNAccount

使用する仮想 LAN カード名: VPN

コマンドは正常に終了しました。

6.パスワードを入力し、接続します。間違えて入力した場合ですが、Ctrl+hで削除できます。(deleteのみで削除しようとしてもできません。またShift+deleteでも削除可能です。)ただし、矢印キーは利用できません。

> AccountPasswordSet {AccountCreateで入力した接続名}
接続名を省略した場合は、AccountPasswordSet 実行後に聞かれます。

実行例
VPN Client>AccountPasswordSet
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定
接続設定の名前: VPNniTsunagitai # コマンド入力時に接続設定名を引数に記述している場合は表示されません

パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード: **************
確認入力  : **************


standard または radius の指定: standard

コマンドは正常に終了しました。
パスワード設定後
VPN Client>AccountConnect
AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始
接続設定の名前: VPNniTsunagitai

コマンドは正常に終了しました。

切断時
VPN Client>AccountDisConnect
AccountDisconnect コマンド - 接続中の接続設定の切断
接続設定の名前: VPNniTsunagitai

コマンドは正常に終了しました。

さて、この6の手順ですが、接続実行またはvpncmdを終了するたびに入力したパスワードが削除されます。一方で、何らかの原因で自動的に再接続を行う場合は再度聞かれることはありませんが、仕様として存在しているようなので覚えておきましょう。

7.次の状態になっていれば接続成功です。

VPN Client>AccountList
AccountList コマンド - 接続設定一覧の取得
項目               |値
-------------------+--------------------------------------
接続設定名         |VPN
状態               |接続完了
接続先 VPN サーバー|xxx.xxx.xxx.xxx:443 (直接 TCP/IP 接続)
仮想 HUB 名        |VPN
仮想 LAN カード名  |VPN
コマンドは正常に終了しました。

これで接続までできました!

IP設定

ここからはvpncmdの外の作業になります。

1.以下のコマンドを入力し、前手順1で確認したMacアドレスがあるかどうか確認します。(通常tun/tapに付与されます)

$ ifconfig

2.IPが割り振られていない(inetの行がない)ので、DHCPで取得します。できないものに関しては自力で設定することになります。
割り振り先は、他に利用していなければtap0になっていると思います。tap0でない場合は自身の環境に合わせて読み替えてください。

$ sudo ipconfig set tap0 DHCP
実行後
$ ifconfig
で確認(付与されるまでに時間がかかる場合があります)
169.254〜のような場合は取得できていません

これでIPが取得できれば、ひとまず完了です。

ルーティング設定

さて、上記の手順を行っても接続できないことが多いことと思います。ここからはルーティングの設定になります。

$ netstat -nr

実行結果(一部削除等をして省略しています)
Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
# 自身のネットワークのdefault
default            xxx.xxx.xxx.1      UGSc          174        0     en4
# VPNサーバのdefault
default            yyy.yyy.yyy.1    UGScI          16        0    tap0
yyy.yyy.yyy/24     link#              UCS             1        0    tap0
# VPNサーバから割り当てられたIPアドレス
yyy.yyy.yyy.yyy/32 link#              UCS             2        0    tap0
yyy.yyy.yyy.1/32 link#              UCS             2        0    tap0
yyy.yyy.yyy.1    link#              UHLWIir        17        0    tap0

defaultが2つに増えていますが動作します。削除すると逆に動作しなくなるため注意してください。一方で、削除しないといけないケースもあるらしいですが、自分の環境では削除すると動作しませんでした。
どうしても削除する場合は、VPNクライアントで設定した接続先のIPを登録しておくと良いようです。しばらく接続失敗や切断された旨のログが出ますが時間経過で解消されるとのこと。(自身の環境では延々切断ログが流れてうまく行く気配がありませんでした。)

1.ルーティングの設定を行います。
接続先のIPアドレスと、対応するデフォルトゲートウェイをルーティングに追加します。

$ sudo route add {接続先のIPアドレス、あるいは一部省略したもの} {接続先のデフォルトゲートウェイ}

実行例
$ sudo route add zzz.zzz.zzz.0/24 yyy.yyy.yyy.1
$ sudo route add zzz.zzz.zzz.zzz/32 yyy.yyy.yyy.1
zzz.zzz.zzz.zzzは接続したいサーバのIP
yyy.yyy.yyy.1は割り当てられたVPNサーバのデフォルトゲートウェイ

IPアドレスで作業するのであればこの時点で完了です。

2.ホスト名解決する場合はDNSサーバもルーティングに加えます。
その上でネットワークの設定から、普段利用しているネットワークのDNSサーバ設定に対応するIPとドメインを追加します。この際、優先度を上げるため一番上に持ってきておきます。

hostConfig Image

これでホスト名を用いての接続が行えるようになります。(設定してすぐの時はホスト名が使えないことがありますが、そのうちつながります。)DNSサーバに問い合わせられるかはnslookupコマンドで確認しておきましょう。
ちなみに、VPNクライアントを停止する(接続を完全に切断する)と入力したルーティングが削除されますので注意してください。(削除されるのは、この例ではtap0に関連するルーティングです。)

余談

Windowsでは接続した際に、接続先のネットワークに依存するため、接続先から外部のネットワークへの接続を制限している場合は、外部への通信を伴う操作ができなくなります。一方でMacで実行した時は、今回の設定方法ではVPN側と外向けの2つのネットワークを保持したままになるため、接続中であっても外部webのブラウザ閲覧等行うことができました。

最後に

Windowsのクライアントだと自動でネットワークごと調整してくれる一方で、CUI側は自力で設定しないといけないため、すぐに利用できない上に何が抜けているのかわからない点で苦労しました。ルーティング設定にしても何を書けばいいのか、最初分からなかったのですが、その辺の知識を持っている方であればおおよそ推測はつくのでしょうね…。
提供元も「Linuxのサポート」にて『非常に詳しい知識をお持ちの方のみが』と書かれているため、基本的にWindows以外での接続はお断りの印象を受けました。(個人で利用する分にはWindows所持者が多いはずなので十分だと思います。)

知っている人であればあまり難しくないのでしょうが、知らない人にとっては接続までが大変な印象を受けました。


関連:
softether VPNのダウンロード
VPNに触れてみる〜その0〜
VPNに触れてみる〜その1〜

記事を共有

最近人気な記事