VPNPPTPを利用したLAN間接続

# １．はじめに　　
 SoftLayerが提供するPrivate LAN側への接続方法は、SSL／PPTP／IPSecの合計3種類です。このうち、無償で利用できるのはSSLとPPTP の1セッション（2014年2月 現在）ですが、いずれの場合も作業用PCからの接続を想定しているのか、複数デバイス間でデータのやり取りをする場合には少々不便です。
 Public LAN側からSSH接続やVPN接続をする方法ももちろんありますが、提供されるIPアドレス数の問題やインターネットにはそもそも接続したくないという要望もあるように思います。
 そこで、今回は費用をかけずに「社内の作業用ネットワークとSoftLayer側のPrivate LANをPPTPで接続する方法」をご紹介します。

 PPTPは、IPSecと比較すると暗号強度は劣りますが、低価格の機器でも広く対応しており、社内LANなどのNAT環境化でも正常にセッションを張れることが多いのが強みです。
 今回は、余った低スペックのPCなどをソフトルーター化することを前提に、LinuxディストリビューションのDebianを利用しました。


# ２．導入ステップ概要

手順としては、はじめに、SoftLayerが提供する管理コンソールでPPTPを有効にし、Windows PCからPPTP接続できることを確認します。
その後、接続確認を行った情報を組み込み、PCをソフトルーター化していくような流れとなります。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/09b0c430-3e25-e2aa-9a5c-951f2d8342a5.jpeg)


# ３．導入　　　　　　　　　

### ３－１．PPTP設定の有効化／接続確認
PPTPについては、初期の段階では接続が有効となっていません。このため、ポータル画面に接続しPPTP接続に必要な設定を行います。

SoftLayerポータルの「Account」⇒「Users」よりPPTP利用、VPNパスワードを設定します。

設定された内容が有効かどうか、ＰＣで接続し確認します。(以下は、Windows 7の例です)
  参考：http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-windows-7

[プログラムとファイルの検索]欄に「VPN」のキーワードを入力し、表示された「仮想プライベートネットワーク(VPN)接続のセットアップ」を選択します
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/bdcd641a-bde0-6736-e10b-63f70785c900.jpeg)
インターネットアドレス欄に、接続先のデータセンターを入力し、任意のVPN接続名を付けます。
(下記の例の接続先はサンノゼ)　入力したら、[次へ]をクリックします
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/b0d4679f-fe99-b31b-6946-3e659e6c1ff5.jpeg)
SoftLayerポータル接続時の認証で利用したユーザー名とパスワードを入力し接続します。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/7cbf0ee9-968b-f62b-1561-ef10d1af5004.jpeg)
正常に接続されると、下記のようなメッセージが表示されます。
うまく接続できない場合は、ユーザー名・パスワード・接続ポイントを確認してください。
また、インターネット接続にルーターを利用している場合は、ご利用のルーターがVPN(PPTP)パススルーに対応している必要がありますので、ご注意ください
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/193d65e0-107f-ce72-df79-80f69e37315f.jpeg)

### ３－２．ＰＣの準備／Debian OSの導入
PPTPルーターとして利用する、PCを用意します。
この項では、OSをインストールして基本的なネットワーク設定を行います。必要のない方は、読み飛ばしてください。

**Ａ．ＬＡＮの口が２つあるＰＣを用意します。**
導入するのは、最低限のコンポーネントですので使わなくなった古いＰＣなどで充分です
**Ｂ．インストールするDebian OSを用意します。**
    インストールイメージは、http://www.debian.or.jp/ から入手できます。本資料で
    は、7.4(wheezy)を利用しました
**Ｃ．メディア作成後、PCにセットしインストーラを起動します。**「Graphical Install」または「Install」を選択し、[Enter]キーを押します。　(下記からは、Graphical Installを選択した例です)
![EasyCapture6.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/92d26da4-58e4-a415-b679-9a911f4d5030.jpeg)
**Ｄ．言語、ロケーション、ネットワーク、ディスク設定などを行います。** 
OS導入の詳細は割愛しますが、GUIインストールが選択できる場合は、設定項目もすべて
日本語で表示されるので、あまり迷うこともないかと思います

途中でインストールコンポーネントを選択する画面がありますが、今回はルーターとして利用するだけですので、最低限でＯＫです。ルーターとして必要なものは後で追加します。
デスクトップをご利用の場合は、KVM(キーボード／マウス／モニター)がなくても状態を確認できるＳＳＨサーバーを組み込んでおくと良いかもしれません
![EasyCapture7.jpg](https://qiita-image-store.s3.amazonaws.com/0/60252/51b3ba25-1e3c-39d2-6903-96878609ddd1.jpeg)
**Ｅ．インストールが終わったら、ネットワークの設定を行います。**
ログインし、特権ユーザーでご自身の環境に合わせて以下のファイルを書き換えてください

```
# vi /etc/network/interfaces
```
設定例 ) アダプタ1 eth0 (インターネット接続用)  DHCP接続
　　　　 アダプタ2 eth1 (作業用PC接続用)  固定IP 192.168.50.1/24

※ インターネット側を固定IPとする場合は、IPアドレスの他にデフォルトゲートウェイと、DNSの設定が必要です

```:ファイル内容
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
#if you want to set default gateway,delete comment-out
#gateway xxx.xxxx.xxxx.xxxx
auto eth1
iface eth1 inet static
address 192.168.50.1
netmask 255.255.255.0
```

※DNSの設定が必要な場合は、/etc/resolv.confファイルを作成します

```
/etc/resolv.conf ファイルの内容 (xxx.xxx.xxx.xxxは、DNSサーバーのIP Addressです)
nameserver  xxx.xxx.xxx.xxx
```
**Ｆ．設定を反映させます**

```
# /etc/init.d/networking restart
```
### ３－３．PPTPクライアントの設定
**Ａ．続けてPPTPクライアント用のコンポーネントを追加インストールします**

```
# vi /etc/apt/sources.list
```

最後尾に以下の行を追加します

```
deb  http://ftp.jp.debian.org/debian/  wheezy  main  contrib  non-free
```

追加できたら、次のコマンドを実行します

```
#apt-get update
```

Updateコマンド終了後、続けて実行します

```
#apt-get install pptp-linux
```

```
# apt-get install pptp-linux
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  pptp-linux
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
48.3 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 131 kB のディスク容量が消費されます。
以前に未選択のパッケージ pptp-linux を選択しています。
(データベースを読み込んでいます ... 現在 133241 個のファイルとディレクトリがインストールされています。)
(.../pptp-linux_1.7.2-7_i386.deb から) pptp-linux を展開しています...
man-db のトリガを処理しています ...
pptp-linux (1.7.2-7) を設定しています ...
#
```

**Ｂ．クライアントがインストールされたら、PPTP接続の設定を行います。**
　　手順３－１Windows PCで行ったPPTPパラメータを利用します
※コマンドは、改行せず入力してください

```
# pptpsetup --create [VPN名] --server [接続先] --username [ユーザー名]
 --password [パスワード] --encryp
```
VPN名「VPN01」、接続先「サンノゼ」、ユーザー名「AB012345」、パスワード「xy@z0123」での実行例

```
# pptpsetup --create VPN01 --server pptpvpn.sjc01.softlayer.com --username AB012345 --password xyz@0123 --encrypt
#
```
**Ｃ．作成したPPTP情報で接続できることを確認します**

```
# pppd call [VPN名] updetach 
```

手順Ｂで作成した、VPN01での接続例

```
# pppd call VPN01 updetach
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local  IP address 10.x.x.x
remote IP address 10.x.x.x
#
```

**Ｄ．SoftLayer側のネットワークに対するルーティングを設定します**

```
# route add -net [接続先IPアドレス] netmask [ネッマスク] ppp0
```

　今回の接続例では、SolftLayer側のネットワークが10.0.0.0/27ですので、このIP Addressをppp0に向けてやります。

```
# route add -net 10.0.0.0 netmask 255.255.255.247 ppp0
#
```

**Ｅ．接続したいサーバーにpingを打って確認します。**([CTRL]+[C]で強制終了させます)

```
# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
64 bytes from 10.0.0.5: icmp_req=1 ttl=61 time=119 ms
64 bytes from 10.0.0.5: icmp_req=2 ttl=61 time=114 ms
64 bytes from 10.0.0.5: icmp_req=3 ttl=61 time=114 ms
^C
--- 10.0.0.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2027ms
rtt min/avg/max/mdev = 114.331/116.141/119.744/2.547 ms
# 
```

**Ｆ．通信が確認できたら、一旦pptp接続を切断します**

```
# pkill pppd
```

**Ｇ．PPTPが接続されたら、自動でルーティングが設定されるようにします**
routing_softlayerという名前でファイルを作成します

```
# vi /etc/ppp/ip-up.d/routing_softlayer
```

routing_softlayer ファイルの中身

```
#!/bin/sh
# PPPリンク時のルーティング追加( to SoftLayer Network)
/sbin/route add –net 10.0.0.0 netmask 255.255.255.247 $PPP_IFAC
```

ファイルを保存したら、パーミッションを変更します

```
# chmod 755 /etc/ppp/ip-up.d/routing_softlayer
```

**Ｈ．毎回ログインして、接続／切断するのは面倒なので起動時に自動で接続するようにします。**
pptp-slという名前で起動／停止ファイルを作成します(※1)

```
# vi /etc/init.d/pptp-sl
```

pptp-slの中身(2行にまたがっているものも、改行なしの1行で入力してください)

```
#!/bin/sh -e
# PPPセッションが複数ある場合などは、カスタマイズが必要です
case "$1" in
  start)
   echo "Starting PPP Session....." 
   /usr/sbin/pppd call VPN01 updetach >/dev/null 2>&1
   /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE >/dev/null 2>&1
   /sbin/iptables-save >/dev/null 2&1;;
 stop)
   echo "stopping PPP Session”
   /bin/cat /var/run/ppp0.pid | /usr/bin/awk {'print "kill -9 "$1}'|/bin/sh >/dev/null 2>&1;;
  *) echo "Usage: $0 {start|stop}" >&2; exit 1 ;;
```

ファイルを保存したら、パーミッションを変更します

```
# chmod 755 /etc/init.d/pptp-sl
```

**Ｉ．Runレベル合わせた起動／停止のシンボリックリンクを作成します**

```
# update-rc.d pptp-sl defaults 99 1
```

警告が出ますが、問題ありません。
これで、OSが起動すると、SoftLayerに接続できるようになりました

```
# update-rc.d pptp-sl defaults 99 1
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'pptp-sl' missing LSB tags and overrides
#
```

(※1) ppp-slファイルには、eth1側のネットワークからppp0インターフェースを介しSoftLayer側に向かう通信に対する、IPマスカレード設定も同時に入れてあります。
ファイルの内容は変更する必要がありませんので、そのままご利用ください


### ３－４．ルーター、DHCPサーバーの設定
最後に、LAN上から設定したPCを通じてSoftLayer側と通信できるよう、IPルーティングとDHCPサーバーの設定を行います。

**Ａ．IPフォワードの設定**

```
# vi /etc/sysctl.conf
```

デフォルトでは、IPフォワーディングは「無効」となっているので、最終行に設定を追加します

```
net.ipv4.ip_forward=1
```

**Ｂ．ＤＨＣＰサーバーのコンポーネントをインストールします**

```
# apt-get install udhcpd
```

```
# apt-get install udhcpd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  udhcpd
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
21.5 kB のアーカイブを取得する必要があります。
この操作後に追加で 24.6 kB のディスク容量が消費されます。
取得:1 http://ftp.jp.debian.org/debian/ wheezy/main udhcpd i386 1:1.20.0-7 [21.5 kB]
21.5 kB を 0秒 で取得しました (42.2 kB/s)
以前に未選択のパッケージ udhcpd を選択しています。
(データベースを読み込んでいます ... 現在 133257 個のファイルとディレクトリがインストールされています。)
(.../udhcpd_1%3a1.20.0-7_i386.deb から) udhcpd を展開しています...
man-db のトリガを処理しています ...
udhcpd (1:1.20.0-7) を設定しています ...
udhcpd: Disabled. Edit /etc/default/udhcpd to enable it.
#
```

**Ｃ．インストールされたら、IPアドレスの割り当て(リース範囲)などを設定します**

```
# vi /etc/udhcpd.conf
```

下記のサンプルを参考に、必要な箇所を変更します。

```
# The start and end of the IP lease block
start		192.168.50.100	#リース開始IP Address
end		192.168.50.199	#リース終了IP Address

# The interface that udhcpd will use
interface	eth1		# DHCPを有効にするネットワークカード

# Options
opt	dns	192.168.50.254    # DNSサーバー
opt	subnet	255.255.255.0　　　　# サブネット
opt	router  192.168.50.254     # デフォルトゲートウェイ
option	lease	864000		 # IPアドレスのリース時間(10日間/単位:sec)
```

**Ｄ．DHCPサーバーが有効にとなるよう設定を変更します**

```
# vi /etc/default/udhcpd
```

下記のnoをyesに書き換えます

```
# Comment the following line to enable
DHCPD_ENABLED="no”
```

**Ｅ．終わったら、保存してします。**
DHCPデーモンを起動させればそのまま使えますが、念のため一度再起動してください。
これで作業は終了です。再起動後は、ネットワークに接続した作業用PCから接続できることが確認頂けると思います
:frog: