この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
最近、VyOSと戯れることが多い市田です。
別リージョンとのVPN接続などの際に、ソフトウェアルータであるVyOSをよく利用します。今回は、VyOSをAWS上で作成する際にやることをまとめてみました。
前提の構成
下記のような構成を想定して説明していきたいと思います。
VyOSでVPN接続するまで
基本項目
MarketplaceからVyOSインスタンスを作成できたら、下記の項目を対応していきます。
なお、対向のVPCで指定するAS番号は65000とします。
- 送信元/送信先チェックの無効化
- VyOSバージョンアップ
- コンフィグ投入
- configureコマンドで編集モードになって投入します。
- コンフィグは東京側のVPCで「VPN接続」を作成した際にダウンロードできます。
- 「VPN接続」の作成については、下記の「対向VPC(VPC-Tokyo)の設定」の項目を参照してください。
- ダウンロードしたコンフィグの一部を修正して投入します。
- 設定できたら
commit
コマンドで反映して、save
コマンドで保存します。
こちらの具体的な作業内容については、下記と同様になりますので手順については割愛させていただきます。
シンガポール側VPC(VPC-Singapore)のルーティングの設定
ルーティングの設定も上記のブログ記事と同様になります。
今回は、シンガポール側のVPC(VPC-Singapore)のルートテーブルに、東京側(192.168.1.0/24と192.168.2.0/24)へのルートがVyOSインスタンスを経由するように設定します。
対向VPC(VPC-Tokyo)の設定
対向VPC(VPC-Tokyo)側の設定も、VyOSに限らずハードウェアVPN接続を行う時の手順と同じですので詳細は割愛いたします。
具体的には以下の作業を行います。
カスタマーゲートウェイの作成
- VyOSのElastic IPを指定します。
仮想プライベートゲートウェイの作成
- 作成したらVPC(VPC-Tokyo)にアタッチします。
VPN接続の作成
- 上記で作成した各ゲートウェイを指定、ルーティングは「動的」を選択します。
- VyOS(Vyattaを選択)用のコンフィグをダウンロードします。
ルートテーブルの作成
- VPC(VPC-Tokyo)に対してルートテーブルを作成します
- 「ルート伝達」を有効にします。ルート伝達については続きをご覧ください。
ルート伝達(Route Propagation)
運用コストや管理コストを減らすために、東京リージョン側の仮想プライベートゲートウェイに対して、ルート伝達を有効にしておきます。
(何らかの理由でルートテーブルの管理は手動で行いたいという場合を除きます。)
作業としては次のとおりです。
東京リージョン側で対象のルートテーブルを選択します。
次に「ルート伝達」タブで「伝達」にチェックを入れて保存します。
すると、VyOSから伝達されてきたルーティング情報がルートタブに自動的に反映されていると思います。
今回の場合ですと、シンガポールリージョンのVyOSがあるサブネット(10.10.1.0/24)へのルーティングが自動的に追加されています。
BGPアドバタイズするネットワーク設定の追加
VyOSを経由してプライベートサブネットにアクセスできない
今回想定している構成では、VyOSインスタンスとその他のインスタンスでサブネットグループを分けています。これは、パブリックサブネットとプライベートサブネットを意識した形になります。
しかし、ここまでで作成したVyOSのコンフィグでは、ap-1
またはap-2
からap-3
のインスタンスにアクセスすることができません。
理由は、東京側VPCにシンガポール側のプラベート用サブネット(10.10.2.0/24)へのルーティング情報がない為です。 (ap-3からap-1、ap-2へはアクセスできますが、東京リージョン側にシンガポール側への戻りの経路がないので、応答を得ることができません)
対策
上記の理由の通り、東京側VPC(VPC-Tokyo)のルートテーブルに10.10.2.0/24
へのルーティングを追加すれば解決します。
手動で追加してもいいですが、折角なのでルート伝達できるようにする為に、VyOSに設定を追加します。
設定は、以下のとおりです。
$ configure
# set protocols static route 10.10.2.0/24 next-hop 10.10.1.1
# set protocols bgp 65000 network 10.10.2.0/24
# commit
# save
# exit
最初にVyOS自身に10.10.2.0/24宛てのルーティングを追加します。これは、次のnetwork文で宣言するCIDRが、VyOSのルーティングテーブルにないといけない為です。
その後にアドバタイズするネットワークを設定します。
なお、VPCではサブネットの最初のアドレスがVPCルータ用に予約されるので、next-hopに10.10.1.1
を指定しています。
確認
以上で東京側VPC(VPC-Tokyo)のルーティングテーブルに10.10.2.0/24
へのルーティングが伝達されて追加されます。
これで、シンガポール側のVyOSを経由して、東京リージョンの192.168.1.0/24
、192.168.2.0/24
のサブネットと10.10.2.0/24
とが相互に接続ができるようになりました。
AWSでVyOSを使う時のTips
VPN接続については以上になります。
次からは、AWS上でVyOSを使うときのTipsを紹介したいと思います。
authログのローテーション
VPCで作成したコンフィグの場合、DPD(Dead Peer Detection)という機能が有効になっています。これは、VPNピアが切れた時に再接続などの処理を実施する機能のことです。
このDPDの動作記録は定期的にログ(/var/log/auth.log
と/var/log/messages
)に出力されるのですが、auth.logはローテーションされないので、ある時突然Disk fullになってしまうことがあります。
これを回避するため、下記のようなlogrotateの設定を/etc/logrotate.d/auth
として作成します。(logrotateの設定の内容は各自の要件に合わせて修正してください)
/var/log/auth.log {
weekly
rotate 4
missingok
}
タイムゾーン設定
デフォルトではUTCになっているので必要に応じて修正します。
$ configure
# set system time-zone Asia/Tokyo
# commit
# save
# exit
ホスト名
MarketplaceのAMIで作成した場合、デフォルトのホスト名はVyOS-AMI
です。
必要に応じて変更します。
$ configure
# set system host-name <任意のホスト名>
# commit
# save
# exit
よく使う確認コマンド
VyOSをAWSで使うときはBGP設定などを確認することが多いと思います。
ここでは個人的によく使うコマンドを紹介します。
BGPテーブル確認
vyosが保有している全てのBGP情報を確認できます。
$ show ip bgp
IPsec関連のログの確認
$ show log vpn ipsec
IPsec SAのコネクションの確認
State
の内容などで接続の有無を判断できます。
$ show vpn ipsec sa
Peer ID / IP Local ID / IP
------------ -------------
xxx.xxx.75.64 xxx.xxx.1.236
Description: VPC tunnel 1
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 17.8K/17.8K aes128 sha1 no 2301 3600 all
Peer ID / IP Local ID / IP
------------ -------------
xxx.xxx.212.224 xxx.xxx.1.236
Description: VPC tunnel 2
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 2.6K/2.6K aes128 sha1 no 1284 3600 all
ルートテーブルの確認
VPNが正常に接続できていれば、対向のVPCからルーティング情報を受け取れていることが確認できます。これにより、対向のVPC情報が分からなくても、こちらのVPCのルートテーブルに対向VPCへのルーティングを設定することができます。
下記の例だと、192.168.0.0/16
がBGPで受け取っているものになるので、これが対向VPCのネットワークであることが判断できます。
$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
S>* 0.0.0.0/0 [210/0] via 10.10.1.1, eth0
C>* 10.10.1.0/24 is directly connected, eth0
S>* 10.10.2.0/24 [1/0] via 10.10.1.1, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 169.254.xxx.xxx/30 is directly connected, vti0
C>* 169.254.xxx.xxx/30 is directly connected, vti1
B>* 192.168.0.0/16 [20/100] via xxx.xxx.25.133, vti1, 06:29:59
その他の便利なコマンド
コンフィグを修正したい時
修正箇所を削除して設定し直します。setをdeleteに変更するだけです。
deleteコマンドで削除したいコンフィグを消します。
# delete protocols bgp 65000 network 0.0.0.0/0
setコマンドで新たな設定を入れます。
# set protocols bgp 65000 network 10.10.1.0/24
コンフィグ反映前の確認
コンフィグを変更した時に、commitする前にcompare
コマンドでdiffを取ることができます。例えば先ほどの場合だと、下記のようになります。
# compare
[edit protocols bgp 65000]
-network 0.0.0.0/0 {
-}
+network 10.10.1.0/24 {
+}
strip-privateコマンド
コンフィグモードのshow
コマンドの出力からIPアドレスなどの機密情報をマスクします。
下記のサンプル(一部抜粋)だと、IPアドレスの一部がxxx.xxx
でマスクされています。他にはAS番号やユーザー名などもしっかりマスクされます。
ブログに記載する場合などに便利です。
$ show configuration | strip-private
interfaces {
ethernet eth0 {
address dhcp
duplex auto
hw-id XX:XX:XX:01:19:2b
smp_affinity auto
speed auto
}
loopback lo {
}
vti vti0 {
address xxx.xxx.24.94/30
description "VPC tunnel 1"
mtu 1436
}
vti vti1 {
address xxx.xxx.25.134/30
description "VPC tunnel 2"
mtu 1436
}
}
特定のコンフィグ内容に対しても利用できます。
# show system login | strip-private
user xxxxxx {
authentication {
encrypted-password xxxxxx
plaintext-password xxxxxx
public-keys xxxx@xxx.xxx {
key xxxxxx
type ssh-rsa
}
}
level admin
}
コンフィグの内容だけでなく、動作確認のコマンド結果に対しても利用できます。
下記は、IPsec SAのコネクションの状況確認に対してマスクします。
$ show vpn ipsec sa |strip-private
commandsコマンド
コンフィグモードのshow
コマンドの出力をコマンド形式に変換します。
今のコンフィグを他のVyOSに転用したいとか、すぐに複製したいと言った時に役に立ちます。
ブログなどに載せる場合は、先ほどのstrip-privateコマンドと併用すると便利です。
# show system login | strip-private | commands
set user xxxxxx authentication encrypted-password 'xxxxxx'
set user xxxxxx authentication plaintext-password 'xxxxxx'
set user xxxxxx authentication public-keys xxxx@xxx.xxx key 'xxxxxx'
set user xxxxxx authentication public-keys xxxx@xxx.xxx type 'ssh-rsa'
set user xxxxxx level 'admin'
カスタムメトリクス
VyOSのメモリ使用率やディスク使用量をCloudWatchで取得する場合は、AWS CLIで取得できるようにしておきます。
こちらの具体的な設定方法は下記をご参照ください。
最後に
他にも色々紹介したい機能や利用パターン、AWSネイティブな使い方もありますが、随時ご紹介していきたいと思います。
以上になります。