on
VPN Router
概要
Vagrant を利用して,Nat Router を作成し,そこで SSL-VPN クライアントを起動させることで,VPN Router を構築した.
ホスト OS で VPN クライアントが利用できない場合,ゲスト OS をルータ件 VPN クライントとして噛ませることで,VPN を実現することができる.
Juniper の SSL-VPN では,Junos Pulse や Pulse Secure といった SSL-VPN クライアントを利用して SSL-VPN を行う.Windows や Mac では,簡単に Junos Pulse または,Pulse Secure を簡単にインストールできるが,ホスト OS が Linux の x64 ではパッケージの依存関係などを考慮する必要がある.そこで,VPN Router を用いるこで環境に低依存に VPN を実現できる.ちなみに,Pulse Secure とは,Juniper Networks の SSL-VPN 事業部門が分離され設立された企業らしい.今後は Junos Pulse ではなく,Pulse Secure が普及するのだろうか.iPhone アプリや Android アプリでも提供されている.
環境
- ホスト OS: ubuntu16.04(64bit)
- VirtualBox
- Vagrant
- ゲスト OS: ubuntu14.04(32bit)
- VPN クライアント: Pulse Secure
環境準備
- VirtualBox & Vagrant
- ubuntu14.04 の box の追加
mkdir vpn-router && cd vpn-router
環境構築
ネットワークアダプタおよび IP
今回は以下のネットワークアダプタおよび IP アドレスを用いる
ホスト OS
- vboxnet0
- ゲスト OS のホストオンリーアダプタと通信するためのアダプタ
- VirtualBox をインストールすると作成される
- ip アドレス: 192.168.252.1
- wlp3s0
- 通常の通信を行うアダプタ
- ゲスト OS の eth2 とブリッジする
- vboxnet0
ゲスト OS
- eht1
- VirtualBox で割り当てたホストオンリーアダプタ,ホスト OS のデフォルトゲートウェイとなる
- ip アドレス: 192.168.252.252
- eth2
- VirtualBox で割り当てられたブリッジアダプタ
- VPN 接続時の通信に使われる
- tun0
- VPN 通信を行うアダプタ,VPN クライアントによって作成される.
- eht1
設定または操作
- ゲスト OS
- Pulse Secure のインストール
- Pulse Secure に必要なパッケージのインストール
- ネットワークアダプタの追加および,IP の割り振り
- NAT Router になるように iptables の設定
- ネットワークアダプタの削除(後述)
- ホスト OS
- ルーティングの設定(デフォルトゲートウェイ)
ゲスト OS に必要な設定の 3.は,ルータとして必要なネットワークアダプタの追加である.具体的には,ホスト OS からのパケットを受け取るホストオンリーアダプタ(eth1)と,インターネット(ルータ)へパケットをフォワードするブリッジアダプタ(eth2)の追加である.この処理は,Vagrantfile に記述することで,Vagrant up した時に動的にネットワクインターフェイスの追加を行うようにした.
一方で,Vagrant up すると Vagrant によって NAT アダプタが動的に生成されてしまう(NAT アダプタを追加しない方法があれば教えてください.).NAT アダプタが生成されるとゲスト OS のデフォルトゲートウェイが NAT アダプタになってしまう.すると,VPN 時に上手く通信の確立ができなくなってしまう.そこで,NAT アダプタ(eth0)をダウンさせ,ブリッジアダプタをデフォルトゲートウェイとして設定する.これが 5.の操作である.この設定も Vagrantfile に記述した.
4.は,ゲスト OS がルータとして動作するようにパケットを NAT としてフォワードする設定である.NAT 構成を取る理由は,VPN クライアントによって生成されるネットワークアダプタをデフォルトゲートウェイにする必要ため.
ホスト OS に必要な設定は,すべてのパケットがゲスト OS であるルータへ送信されるようにすることである.具体的には,ホスト OS のデフォルトゲートウェイを,ゲスト OS のホストオンリーアダプタ(eth0)に設定する.
ゲスト OS
1. & 2.
$ wget http://webdev.web3.technion.ac.il/docs/cis/public/ssl-vpn/Linux/v.8.2R5.0/ps-pulse-ubuntu-debian.deb -P /tmp
$ sudo dpkg -i /tmp/ps-pulse-ubuntu-debian.deb
$ /usr/local/pulse/PulseClient.sh install_dependency_packages
3. & 5.
以下の Vagrantfile を使用する
|
|
問題点として vagrant ssh
で使用するネットワクアダプタつまり,eth0 をダウンしているので, vagrant ssh
で接続できない点が挙げられる.おとなしく ssh vagrant@192.168.252.252(ゲストOSのホストオンリーアダプタのIPアドレス)
で接続する.
4.
|
|
|
|
vpn_start.sh の$hostや,$url,$realm, $password は各自の環境に合わせてください.-p で password は指定しないほうがいいかもしれない.
ホスト OS
以下のスクリプトを用いてデフォルトゲートウェイをゲスト OS のホストオンリーアダプタ(eth1)に設定している.
|
|
起動
起動順序は,以下のとおり.
|
|
SSL-VPN 通信の確認には, /usr/local/pulse/PulseClient.sh -S
や ping
, traceroute
を使うと良い