EdgeRouter XとVyOS on AWSで拠点間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の情報です。

Items自宅AWS
グローバルIPhome.kazu634.com54.238.253.225
WAN側インターフェースeth0eth0
LAN側ネットワーク192.168.10.0/2410.0.10.0/24
OpenVPNトンネルIPアドレス192.168.115.2192.168.115.1

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

1
2
3
4
5
6
7
8
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は以下のとおりです:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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

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

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

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

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

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

各種設定を説明します。

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

1
2
3
4
configure
set system time-zone Asia/Tokyo
commit
save

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

1
2
3
4
5
configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address dhcp
commit
save

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

1
2
3
4
configure
set system gateway-address 10.0.1.1
commit
save

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

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

1
generate openvpn key /config/auth/aws-home
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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

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

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

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

1
2
3
sudo -s
vi /config/auth/aws-home
chmod 600 /config/auth/aws-home

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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です。ステータス確認コマンドとしては、以下のコマンドがあるようです:

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

1
2
3
4
5
6
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

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

1
2
3
4
5
6
7
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