2016年11月21日月曜日

Ubiquiti Networks Edgerouter LiteでVPN(L2TP/IPsec)

自宅用のルーターとしてUbiquiti Networks Edgerouter Liteを購入したので、L2TP/IPSecなVPNでリモートアクセスできるようにしたという話。

これまで出先から自宅内のネットワークにアクセスする際は、SSHサーバがあるのでポート転送を使っていましたが、VPNルーターを導入してL2TP/IPSecを利用するように変更しました。

自宅のインターネット接続回線は、NTT東日本 フレッツ 光ネクスト マンション・ハイスピードタイプで、ISPへは一昔前のWi-Fiルーター NEC Aterm WG1800HPでPPPoE接続していました。
L2TP/IPSecなVPNができる環境を構築する場合、まず問題になるのはWG1800HPがL2TP/IPSecといったVPN環境を用意できるルーターではないこと。
手っ取り早いのは、VPNルーターを導入してISPとの接続部分は置き換えてしまうことなので、2015年あたりから話題になっていたUbiquiti NetowrksのEdgerouter Liteを選択しました。
※Hub機能は無いので、WG1800HPをWi-Fi AP、GbE 4ポートHubして再利用

購入先は、米国 Amazon.comで、代金$89.81に送料など合わせて合計$119.21、当時の為替レートで12,852円。
ボクが買った時はAmazonからUPSで直接日本に送って貰えたので、10/21(金)注文で、10/24(月)受取と、かなり早い到着でした。
自宅への配達はヤマト運輸だったので、夜間に持ってきてくれたのも早かった要因です。


ルーター本体・内容物とか
ポートは、コンソール用(左側)とeth0-2の3つ(右側)

意外にちゃんとしたクイックスタートガイド。

金属筐体を開けたところ。

Edgerouter Lite導入後の自宅ネットワーク構成 概要
 ・ ISPへの接続は、Edgerouter Lite eth0をPPPoE接続に使用(pppoe0)
 ・ 自宅内ネットワークは、Edgerouter Lite eth1に接続
 ・ Edgerouter Lite eth2は、IPアドレスを割り当てるが当面は接続する機器なし
 ・ VPNは、AndroidやiOS機器からの利用し易さを考えてL2TP/IPSecを選択
 ・ DHCPサーバは、Edgerouter Liteに組み込みのものを使用
 ・ 自宅内ネットワークでの名前解決は、内部に用意したDNSキャッシュサーバを使用


初期セットアップ時に気を付けたいポイント
 ・ 初期設定はWebインタフェースで行うと簡単
  - 工場出荷状態では、eth0にはIPアドレス:192.168.1.1/24が割り当てられている
  - 設定用PCのIPアドレスは一時的に192.168.1.2などに変更する必要がある
   ※DHCPサーバは動作していないのて固定でのIPアドレス割り当て
   ※外部ネットワークとは閉じた接続にするのが望ましい(理由後述)
 ・ デフォルトの管理者ユーザは削除、新規の管理者ユーザー作成が必須
  - 最初から用意されている管理者ユーザはユーザ名・パスワードともにubntなため脆弱
   ※ubnt/ubntはDDoS攻撃を行うbot Miraiの攻撃対象なので削除せず外部ネットワークへの接続禁止
 ・ 工場出荷状態のファームウェアは、かなり古いので、あらかじめ設定用PC内に最新ファームウェアを用意しておく
  - Webインタフェースでファームウェアの更新可能
  - ファームウェアの入手はUbiquiti Netowrksのサイトから

Webインタフェースは、https://IPアドレス/ でアクセスできるが、証明書エラーになるので無視して続行。(Google Chromeでの例)

初回は、標準組み込みの管理者ユーザ ubnt/ubntでログイン

ログインが成功するとダッシュボードが表示される。※画面はセットアップ後のもの

まずは、ファームウェアを最新版に更新して再起動。

(1) 画面下部のSystemを選択
(2) Upgrade System Imageでファームウェアを最新版に更新
(3) 再起動。
※以降はVer1.9.0であることが前提の手順

管理者ユーザの登録/変更/削除は、メニューのUsersから。

工場出荷時の管理者ユーザ"ubnt"は削除。最低でもパスワードを変更すること。

基本設定
メニューの"Wizard"→"BasicSetup"で設定 (1/3)

"Internet port (eth0)"
"Internet connection type"は、"PPPoE"を選択、ISPの接続用アカウントとパスワードを設定
"Firewall"は、"Enable the default firewall"のチェックをON

BasicSetup (2/3)

"Bridging"
"Bridging"は、"Bridge LAN interfaces into a single network"のチェックをOFF

"LAN port (eth1)"
"Address"は、ローカルネットワークで使用するルーターのIPアドレスとサブネットマスクを設定
"DHCP"は、"Enable the DHCP server"のチェックをON

"(Optional) Secondary LAN port (eth2)"
使用するなら"LAN port (eth1)"同様に設定
対向側がLAG対応しているなら、eth1と束ねて使用するのもアリ
 メニューの"Config Tree"→"interfaces / bonding"で設定

BasicSetup (3/3)

"User setup"
"User"は、"初期設定時に"ubnt"以外の管理者ユーザを作成している場合、"Keep existing users"を選択。
ここで新規管理者ユーザを作成する場合、"Create new admin user"を選択してユーザ名とパスワードを設定。

"Apply"ボタン押下で設定保存後、Edgerouterを再起動。

・ その他の作業
 - eth0をONU、eth1を自宅内のローカルネットワークに接続するよう物理配線を変更
 - 設定用PCは、ネットワーク設定を自宅内ネットワーク用に変更して接続
 - WG1200HPは、ブリッジモードに変更してDHCPサーバを無効化

Edgerouterが再起動完了すると、ISPへは接続された状態になる。

詳細な設定
Webインタフェースによる設定では詳細な設定ができないものもあるので、そういった設定はコマンドの実行で設定を行う。
コマンドの実行は、コンソールポートとPCをシリアルケーブルで繋いでTeraTermなどのターミナルソフトを使うという方法も有りますが、既にネットワークにつながっているのいでSSHで接続する方がラクです。
※一応、RJ-45-シリアル、シリアル-USBのケーブルをそれぞれ持ってますw
Webインタフェースの画面右上にある"CLI"からコマンド用ウィンドウを呼び出して使うという方法はコピペができない場合もあるので、ボクは使っていません。

## 設定モードのコマンドを使用して設定
configure

## タイムゾーン
# 東京で設定
set system time-zone Asia/Tokyo

## NTPサーバ
# 初期登録されているNTPサーバすべてを解除
delete system ntp

# NICTのNTPサーバを利用 ※ネットワーク的に近いNTPサーバがあればそちらを指定
set system ntp server ntp.nict.jp

## DHCPサーバ
# 初期登録されている内容をすべて解除
set service dhcp-server disabled false
set service dhcp-server hostfile-update disable
set service dhcp-server shared-network-name LAN1 authoritative disable

# eht1側のネットワークで利用する内容を設定
set service dhcp-server shared-network-name LAN1 subnet 192.168.0.0/24 default-router 192.168.0.254
set service dhcp-server shared-network-name LAN1 subnet 192.168.0.0/24 dns-server 192.168.0.1
set service dhcp-server shared-network-name LAN1 subnet 192.168.0.0/24 lease 86400
set service dhcp-server shared-network-name LAN1 subnet 192.168.0.0/24 start 192.168.0.151 stop 192.168.0.199

# フレッツ向けにpppoe0のMTU,MSSを調整
set firewall modify mss-clamp rule 1 action 'modify'
set firewall modify mss-clamp rule 1 modify tcp-mss '1414'
set firewall modify mss-clamp rule 1 protocol 'tcp'
set firewall modify mss-clamp rule 1 tcp flags 'SYN'
set interfaces ethernet eth0 pppoe 0 firewall in modify 'mss-clamp'
set interfaces ethernet eth0 pppoe 0 firewall out modify 'mss-clamp'
set interfaces ethernet eth0 pppoe 0 mtu '1454'

VPN(L2TP/IPSec)の設定
前述の「詳細な設定」に続いて設定を行う。

# WAN側 pppoe0を利用
set vpn ipsec ipsec-interfaces interface pppoe0

# NATを越えるようにする
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal enable

# WAN側がpppoe0の場合はdhcp-interfaceで指定できないのでこの方法
set vpn l2tp remote-access outside-address 0.0.0.0

# リモートクライアントに割り当てるIPアドレスを指定
set vpn l2tp remote-access client-ip-pool start 192.168.0.211
set vpn l2tp remote-access client-ip-pool stop 192.168.0.230

# 事前共有鍵を使う
# "XXXXXXXXX"部分は任意の文字列に置換して使用
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret XXXXXXXXX
set vpn l2tp remote-access ipsec-settings ike-lifetime 3600

# 認証用のローカルアカウントとパスワードを設定
# "USERxx" と "PSWDxx"部分は任意の文字列に置換して使用
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username USERxx password PSWDxx

# トンネルインタフェースのMTU値を設定
set vpn l2tp remote-access mtu 1280

# VPNのリモートクライアン用のDNSサーバを指定 ※例では自宅内ネットワークのキャッシュサーバ
set vpn l2tp remote-access dns-servers server-1 192.168.0.1

## 設定を反映して保存、設定モード終了
commit
save
exit
Firewall設定
ファイアウォールの設定はWebコンソールで行う方が解り易いので、そちらを使う。

設定方針:
 外部からL2TP/IPSecで接続できるように設定
 ・ 外部からの接続を解放する対象
  - UDP ポート 500
  - UDP ポート 1701
  - UDP ポート 4500
  - IPプロトコル ESP
 ※VPNで内部ネットワークにアクセスできれば良いので、この他は解放しない

ルールの追加方法
 (1) メニューの"Firewall/NAT"→"Firewall Policies"で設定。
 (2) name: "WAN_LOCAL"行の"Actions"から"Edit Ruleset"を選択。
 (3) 表示された"Ruleset Configuration for WAN_LOCAL"ウィンドの"Add New Rule"ボタンを押下。

UDP ポート 500, 1701, 4500の開放(1/2)

"Basic"タブ
"Description"は、任意の名称 例)Allow L2TP
"Action"は、"Accept"を選択
"Protocol"は、"UDP"を選択

UDP ポート 500, 1701, 4500の開放(2/2)

"Destination"タブ
"Port"は、"500,1701,4500"を入力 ※スペース等は空けない

"Save"ボタン押下で設定ウィンドウを閉じる。

IPプロトコル ESPの開放

"Basic"タブ
"Description"は、任意の名称 例)Allow ESP
"Action"は、"Accept"を選択
"Protocol"は、"Choose a protocol by name"から"esp"を選択

"Save"ボタン押下で設定ウィンドウを閉じる。

追加した2つのルールを元からある Allow established/related と Drop invalid state の間に移動後、"Save Rule Order"ボタンを押下し、"Ruleset Configuration for WAN_LOCAL"ウィンドウを閉じる

「どこでも My Mac」との競合対策
UDP ポート 4500は、「どこでも My Mac」でも使用しているため、Mac側で「どこでも My Mac」が有効になっていると、L2TP/IPSecと競合してアクセス不能に陥ります。
 ・ 回避方法
  その1) ローカルネットワーク内にあるすべてのMacで「どこでも My Mac」を無効にする
  その2) EdgerouterのUPnP2を無効にする ※セキュリティ的にはUPnPを無効にするのが吉
  その3) UPnPが必要な場合、UPnP2でUDP ポート 4500での転送を止める

その3)をコマンドで設定する場合
## 設定モードのコマンドを使用して設定
configure

# 対策
set service upnp2 acl rule 10 action deny
set service upnp2 acl rule 10 description "Block Port 4500"
set service upnp2 acl rule 10 external-port 4500
set service upnp2 acl rule 10 local-port 4500
set service upnp2 acl rule 10 subnet 192.168.0.0/24
set service upnp2 listen-on pppoe0
set service upnp2 wan pppoe0

## 設定を反映して保存、設定モード終了
commit
save
exit

リモートクライアント側の設定
続いて、リモートクライアントとして接続する側の設定について。

Android 6.0.1の場合
設定→その他の設定→VPNで表示するVPN画面の右上「+」で新規設定を追加。

・ "名前"は、任意のものを設定
・ "タイプ"は、L2TP/IPSec PSK
・ "サーバアドレス"は、外部ネットワークからアクセスできるもの
・ "IPSec事前共有鍵"は、設定したものを入力
※この他の項目は初期の設定を変更しない
  → IPSec IDは認証用のローカルアカウントと異なることに注意

接続時に認証用のローカルアカウントとパスワードを入力して接続する。

iOS 10.1.1の場合
設定→一般→VPNで表示するVPN画面の下部「VPN構成を追加...」で新規設定を追加。

・ "タイプ"は、"L2TP"を選択
・ "説明"は、任意のものを設定
・ "サーバ"は、外部ネットワークからアクセスできるもの
・ "アカウント"は、認証用のローカルアカウント
・ "パスワード"は、認証用のローカルアカウントのパスワード
・ "シークレット"は、設定した事前共有鍵を入力
※この他の項目は初期の設定を変更しない

以上の設定で、モバイル回線などからのリモートアクセス時に自宅内ネットワークの資源をローカルネットワークと同じように扱えるようになります。


パフォーマンスの確認
VPN経由ではなく、自宅内ネットワークのPCからSPEEDTEST.netにアクセスして計測。

Edgerouter Lite使用時:SPEEDTEST.net SAGAMIHARAサーバで測定した結果

フレッツ 光ネクスト マンション・ハイスピードタイプの理論値に近い速度が出ることが確認できた。

2016/11/23 追記:
Aterm WG1800HPで接続していた時のテスト結果を発見したので追記。

Aterm WG1800HP使用時:SPEEDTEST.net SAGAMIHARAサーバで測定した結果

ついでにEdgerouter Lite、SUMIDAサーバで計測してみた結果

Edgerouter Lite使用時:SPEEDTEST.net SUMIDAサーバで測定した結果

オマケ:ウチでのEdgerouter Liteの設置状況w

0 件のコメント:

コメントを投稿