EdgeRouter XとVyOS on AWSで拠点間VPNを構築する

Oct 31, 2016   #VyOS  #Edgerouter  : EdgeRouter XとVyOS on AWSでOpenVPNを用いた拠点間VPNをはりました

EdgeRouter X がすごい | yabe.jpに触発されて、EdgeRouter Xを購入しました。手元のハードとしてきちんとしたルーターがあるっていいことだと思います。色々と実験できるので。

さて今回はEdgeRouter XとVyOS on AWSでOpenVPNを用いた拠点間VPNをはりました。

この記事で扱うこと・扱わないこと

  • EdgeRouter XVyOSで以下にして拠点間VPNをはるかを扱います
  • AWSについては詳しくは扱いません (Security Groupやネットワークについてなど)

概要

EdgeRouter XとVyOS on AWSでOpenVPNを用いた拠点間VPNをはりました。簡単なネットワーク図としては以下のような感じです:

edgerouter-vyos-on-aws

前提条件

構成するOpenVPNの情報、およびに利用したVyOSとEdgeRouterの情報です。

OpenVPNの情報

Items 自宅 AWS
グローバルIP home.kazu634.com 54.238.253.225
WAN側インターフェース eth0 eth0
LAN側ネットワーク 192.168.10.0/24 10.0.10.0/24
OpenVPNトンネルIPアドレス 192.168.115.2 192.168.115.1

EdgeRouter X

利用したEdgeRouter Xは以下のとおりです:

admin@ubnt:~$ show version
Version:      v1.9.0
Build ID:     4901118
Build on:     08/04/16 11:31
Copyright:    2012-2016 Ubiquiti Networks, Inc.
HW model:     EdgeRouter X 5-Port
HW S/N:       802AA85C1DF4
Uptime:       13:38:07 up 1 day,  4:33,  1 user,  load average: 1.16, 1.60, 1.86

VyOS on AWS

利用したVyOSは以下のとおりです:

vyos@VyOS-AMI:~$ show version
Version:      VyOS 1.1.7
Description:  VyOS 1.1.7 (helium)
Copyright:    2016 VyOS maintainers and contributors
Built by:     maintainers@vyos.net
Built on:     Wed Feb 17 09:57:31 UTC 2016
Build ID:     1602170957-4459750
System type:  x86 64-bit
Boot via:     image
Hypervisor:   Xen hvm
HW model:     HVM domU
HW S/N:       ec24bd54-36b0-acde-7804-900f0a6c0510
HW UUID:      EC24BD54-36B0-ACDE-7804-900F0A6C0510
Uptime:       22:25:54 up 28 min,  1 user,  load average: 0.00, 0.01, 0.02

VyOS on AWS側の作業

AWS側の作業としては以下になります:

VyOSのインスタンスを作成する

ここでは詳しくは説明しませんが、VyOSのインスタンスを作成します。私はt2.nanoで作成しました。

今回作成する際はGlobal側のインターフェースを付与し、グローバルIPアドレスを割り当てました。

ENIを追加する

Private側のインターフェースを追加します。

ENIのプロミスキャスモードをオンにする

VyOSのインスタンスにアサインしたENIのプロミスキャスモードをオンにします。要するにここです:

EC2 Management Console

EC2 Management Console-1

ルーティング

Global側のネットワークのルーティングテーブルに、192.168.10.0/24へのルーティングとして、VyOSのGlobal側のNICを指定します。Private側のネットワークのルーティングテーブルに192.168.10.0/24へのルーティングとして、VyOSのPrivate側のNICを指定します。

VPC Management Console

VyOS上で実施する設定

各種設定を説明します。

タイムゾーンの設定

タイムゾーンの設定をしておくと、後で役に立つはずです:

configure
set system time-zone Asia/Tokyo
commit
save

追加したENIにIPアドレスを付与する

追加したENIにIPアドレスを付与します。とりあえずここではDHCPで割り当てます:

configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address dhcp
commit
save

デフォルトゲートウェイの設定

NICが2つ以上あるので、デフォルトゲートウェイを明示的に指定してあげます。ここではGlobal側のゲートウェイをデフォルトゲートウェイとして指定します:

configure
set system gateway-address 10.0.1.1
commit
save

OpenVPNの設定

最後にOpenVPNの設定を実施します。

共通秘密鍵の作成

オペレーションモードで以下のコマンドを実行します:

generate openvpn key /config/auth/aws-home

OpenVPNの設定

configure

set interfaces openvpn vtun1
set interfaces openvpn vtun1 mode site-to-site

## OpenVPN のプロトコルを指定
set interfaces openvpn vtun1 protocol udp

## OpenVPN が使うポート番号を設定
set interfaces openvpn vtun1 local-port 51194
set interfaces openvpn vtun1 remote-port 51194

## OpenVPN のトンネルの IP アドレスを設定
set interfaces openvpn vtun1 local-address 192.168.115.1
set interfaces openvpn vtun1 remote-address 192.168.115.2

## EdgeRouter X on 自宅のグローバルIPを設定
set interfaces openvpn vtun1 remote-host home.kazu634.com

## 共通鍵の場所を指定
set interfaces openvpn vtun1 shared-secret-key-file /config/auth/aws-home

## 色々な OpenVPN のオプションを設定
set interfaces openvpn vtun1 openvpn-option "--comp-lzo"
set interfaces openvpn vtun1 openvpn-option "--float"
set interfaces openvpn vtun1 openvpn-option "--ping 10"
set interfaces openvpn vtun1 openvpn-option "--ping-restart 20"
set interfaces openvpn vtun1 openvpn-option "--ping-timer-rem"
set interfaces openvpn vtun1 openvpn-option "--persist-tun"
set interfaces openvpn vtun1 openvpn-option "--persist-key"
set interfaces openvpn vtun1 openvpn-option "--user nobody"
set interfaces openvpn vtun1 openvpn-option "--group nogroup"
set interfaces openvpn vtun1 openvpn-option "--fragment 1280”

## 自宅側のネットワークにアクセスする時に OpenVPN を使うよう Static Route 設定
set protocols static interface-route 192.168.10.0/24 next-hop-interface vtun1

## 設定を保存する
commit
save

EdgeRouter X on 自宅側の設定

以下の設定を実施します:

共通秘密鍵のコピペ

VyOS on AWS側で作成した/config/auth/aws-homeの内容をコピペし、EdgeRouter X側に同じパス・ファイル名で秘密鍵ファイルを作成します。

なお、権限を600にしておく必要がありますので、注意ください。おそらくこんな感じで作業したはずです:

sudo -s
vi /config/auth/aws-home
chmod 600 /config/auth/aws-home

OpenVPNの設定

以下の設定を実施します:

configure

set interfaces openvpn vtun1
set interfaces openvpn vtun1 mode site-to-site

## OpenVPN のプロトコルを指定
set interfaces openvpn vtun1 protocol udp

## OpenVPN が使うポート番号を設定
set interfaces openvpn vtun1 local-port 51194
set interfaces openvpn vtun1 remote-port 51194

## OpenVPN のトンネルの IP アドレスを設定
set interfaces openvpn vtun1 local-address 192.168.115.2
set interfaces openvpn vtun1 remote-address 192.168.115.1

## VyOS on AWSのグローバルIPを設定
set interfaces openvpn vtun1 remote-host 54.238.253.225

## 共通鍵の場所を指定
set interfaces openvpn vtun1 shared-secret-key-file /config/auth/aws-home

## 色々な OpenVPN のオプションを設定
set interfaces openvpn vtun1 openvpn-option "--comp-lzo"
set interfaces openvpn vtun1 openvpn-option "--float"
set interfaces openvpn vtun1 openvpn-option "--ping 10"
set interfaces openvpn vtun1 openvpn-option "--ping-restart 20"
set interfaces openvpn vtun1 openvpn-option "--ping-timer-rem"
set interfaces openvpn vtun1 openvpn-option "--persist-tun"
set interfaces openvpn vtun1 openvpn-option "--persist-key"
set interfaces openvpn vtun1 openvpn-option "--user nobody"
set interfaces openvpn vtun1 openvpn-option "--group nogroup"
set interfaces openvpn vtun1 openvpn-option "--fragment 1280"

## AWS側のネットワークにアクセスする時に OpenVPN を使うよう Static Route 設定
set protocols static interface-route 10.0.10.0/24 next-hop-interface vtun1

## 設定を保存する
commit
save

動作確認とか

相互にpingで疎通が取れればOKです。ステータス確認コマンドとしては、以下のコマンドがあるようです:

EdgeRouter X on 自宅

動作確認コマンドの実行サンプル:

admin@ubnt:~$ show openvpn status site-to-site
OpenVPN client status on vtun1 []

Remote CN       Remote IP       Tunnel IP       TX byte RX byte Connected Since
--------------- --------------- --------------- ------- ------- ------------------------
None (PSK)      54.238.253.225  192.168.115.1      2.2K    1.8K N/A

VyOS on AWS

動作確認コマンドの実行サンプル:

vyos@VyOS-AMI:~$ show openvpn site-to-site status

OpenVPN client status on vtun1 []

Remote CN       Remote IP       Tunnel IP       TX byte RX byte Connected Since
---------       ---------       ---------       ------- ------- ---------------
None (PSK)      home.kazu634.com 192.168.115.2     22.3K   23.9K N/A