本構成について
Akamai's cloud computing services上に構築したインスタンスとAWSのインスタンス間の通信を行う際にはインターネット経由で通信を行う必要があります。
今回はLinodeインスタンスにstrongSwanとFRRoutingを構築して、AWSのSite-to-Site VPNに接続し、安全な通信経路とBGPによる動的ルーティングを構築します。
Linode VLAN内のインスタンスの経路を冗長化させるため、VRRPを活用して冗長化を実現します。
VRRPの実装にはKeepalivedを利用します。
構成の前提
前提として、2台のVPNインスタンスにはすでにVPNとBGPの設定が終わっている状態となります。
構築手順については以下を参照ください。
Keepalivedとは
KeepalivedはLinux上で動作するオープンソースソフトウェアで、サービスの高可用性とロードバランシングを提供します。Linux Virtual Serverを用いたレイヤー4ロードバランシングと、VRRPを利用した冗長化を実現し、サービスのダウンタイムを最小に抑えることができます。
Linode VLANについての補足
Linode VLANはLayer 2(データリンク層)で動作するため、ブロードキャスト、マルチキャストの通信が可能となります。
今回の構成ではVRRPを利用しますが、ARPリクエストの通信は問題なく可能となります。
VPN/Routing Instance 1 のFRRoutingの設定を追加
iBGPの設定を行います。
root@localhost:~# vtysh
Hello, this is FRRouting (version 8.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
localhost# conf t
localhost(config)#
router bgp 65000
! iBGPの設定を追加
neighbor 10.0.1.3 remote-as 65000
!
address-family ipv4 unicast
! iBGPの設定を追加
neighbor 10.0.1.3 soft-reconfiguration inbound
neighbor 10.0.1.3 next-hop-self
exit-address-family
exit
!
end
設定を保存します。
localhost# wr
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
VPN/Routing Instance 2 のFRRoutingの設定を追加
iBGPの設定を行います。
root@localhost:~# vtysh
Hello, this is FRRouting (version 8.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
localhost# conf t
localhost(config)#
router bgp 65000
! iBGPの設定を追加
neighbor 10.0.1.2 remote-as 65000
!
address-family ipv4 unicast
! iBGPの設定を追加
neighbor 10.0.1.2 soft-reconfiguration inbound
neighbor 10.0.1.2 next-hop-self
exit-address-family
exit
!
end
設定を保存します。
localhost# wr
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
BGP確認
Neighborが確率していることを確認します。
localhost# show ip bgp summary remote-as 65000
IPv4 Unicast Summary (VRF default):
BGP router identifier , local AS number 65000 vrf-id 0
BGP table version 3
RIB entries 3, using 552 bytes of memory
Peers 3, using 2169 KiB of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
10.0.1.3 4 65000 8655 8656 0 0 0 07:12:33 2 2 N/A
Linode インスタンスにVRRPを構築する
以下を参考にKeepalivedをインストールします。
sudo apt install keepalived
VPN/Routing Instance 1 の Keepalived設定
keepalived.confを設定します。
virtual_ipaddressにはVLAN内のアドレスで利用していないIPを指定します。
vim /etc/keepalived/keepalived.conf
vrrp_instance Instance1 {
state MASTER
interface eth1
virtual_router_id 10
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.0.1.200
}
}
VPN/Routing Instance 2 の Keepalived設定
keepalived.confを設定します。
virtual_ipaddressにはVLAN内のアドレスで利用していないIPを指定します。
vim /etc/keepalived/keepalived.conf
vrrp_instance Instance2 {
state BACKUP
interface eth1
virtual_router_id 10
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.0.1.200
}
}
Keepalivedの設定確認
Config Testを行い、何も出力されないことを確認します。(異常がある場合のみ出力されます)
keepalived --config-test
サービスを起動します。
systemctl start keepalived
systemctl enable keepalived
virtual_ipaddressが付与されていることを確認します。
root@localhost:~# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:de:01:4b:83:f5 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.2/24 brd 10.0.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.0.1.200/32 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::92de:1ff:fe4b:83f5/64 scope link
valid_lft forever preferred_lft forever
Linode インスタンスからの疎通確認
VLANの設定を行ったLinodeインスタンスを構築し、疎通確認をします。
AWSのVPCのネットワークへの経路を構築したVPNインスタンスを経由するように設定します。
Network設定の書き換えを行うため、上書きされないようにAuto-configure networkingを無効にします。
無効にした後に設定を追記します。
vim /etc/systemd/network/05-eth1.network
[Route]
Destination=10.0.0.0/24
Gateway=10.0.1.200
尚、一時的に経路確認したい場合にはコマンドでも追加可能です。
sudo ip route add 10.0.0.0/24 via 10.0.1.200
設定を反映させます。
netplan apply
pingやicmpを利用して疎通が取れることを確認します。
root@localhost:~# ping 10.0.0.24
PING 10.0.0.24 (10.0.0.24) 56(84) bytes of data.
64 bytes from 10.0.0.24: icmp_seq=1 ttl=126 time=75.0 ms
64 bytes from 10.0.0.24: icmp_seq=2 ttl=126 time=75.1 ms
64 bytes from 10.0.0.24: icmp_seq=3 ttl=126 time=77.2 ms
64 bytes from 10.0.0.24: icmp_seq=4 ttl=126 time=74.4 ms
root@localhost:~# tracepath 10.0.0.24
1?: [LOCALHOST] pmtu 1500
1: 10.0.1.2 0.511ms
1: 10.0.1.2 0.330ms
2: 10.0.1.2 0.442ms pmtu 1436
2: 10.0.1.2 0.452ms pmtu 1422
2: 10.0.0.24 74.666ms reached
Resume: pmtu 1422 hops 2 back 3
以上で構築は完了です。
まとめ
FRRoutingでBGPとVRRPを活用することで、どちらかのVPNインスタンスに障害があった場合でも動的に経路変更を行うことができるようになりました。
高可用性が求められる通信などでのユースケース等に利用していただければと思います。
関連記事
アカマイ・テクノロジーズ合同会社はQiitaでAkamai's cloud computing services関連など開発者向けの記事を掲載しております。