AWS・Azure・自宅にてマルチでハイブリッドなクラウドを作ってみた(その1)
大要
- 自学自習のため、マルチでハイブリッドなクラウドを作ってみた
- AWS、Azure、自宅の各拠点をプライベートなネットワークで結ぶ
- ゴールは、各リソースをパブリックな通信なしで利用できるようにすること
- まずは、Softether VPNでサイト間VPNを構築した
次回は PaaS を VPN に繋げる話。 kwatanabe.hatenablog.jp
背景
- 浦島太郎なkWatanabeにとって、クラウドといえばOpenNebula、OpenStack、CloudStackであって、パブリックなクラウドは馴染みがない
- コレはイカんと思い、会社の勉強会*1にかこつけて、何かパブリッククラウドで遊んでみようと思った
- システムを知るにはまずは足回りからがモットーなので、まずは生の計算機とネットワークが見えそうな、マルチでハイブリッドなクラウドに挑戦した
マルチでハイブリッドなクラウド
サイト間VPN
- まず、各拠点をプライベートなネットワークで結ぶためにサイト間VPNを作る
- 各事業者でVPNのPaaSを提供
- 今回は1つの仕組みで完結させる為、Softether VPNを採用
- 注意点としては、AWSもAzureも仮想ネットワークはL3レベルでフィルタされているので、L2ではなくL3でサイト間VPNをはる必要がある
ネットワークの整備
自宅
- 192.168.1.0/24 が整備されている
- VPNサーバ以外の各端末のルーティングテーブルを設定する
- 192.168.20.0/24 via 192.168.1.249 (VPNサーバの仮想L3スイッチの内向きアドレス)
- 192.168.21.0/24 via 192.168.1.249 (同上)
- 192.168.30.0/24 via 192.168.1.249 (同上)
- 192.168.31.0/24 via 192.168.1.249 (同上)
- 192.168.10.0/24 via 192.168.1.249 (同上)
Amazon VPC
- CIDRの範囲:192.168.20.0/24 と 192.168.21.0/24
- サブネット「Hybrid-Subnet」
- サブネット「Hybrid-Subnet-Dammy」
- CIDR:192.168.21.0/24
- アベイラビリティゾーン:Hybrid-Subnetと異なるところ
- ルートテーブルなし
Azure VNet
- IPv4 アドレス空間:192.168.30.0/24 と 192.168.31.0/24
- サブネット「Hybrid_Subnet」
- CIDR:192.168.30.0/24
- ルートテーブル
- 192.168.1.0/24 via 192.168.30.100 (VPNブリッジのVirtualMachine)
- 192.168.20.0/24 via 192.168.30.100 (同上)
- 192.168.21.0/24 via 192.168.30.100 (同上)
- サブネット「Hybrid_Subnet_Dammy」
- CIDR:192.168.31.0/24
- ルートテーブルはHybrid_Subnetと同じ
- BastionHost:無効化
- DDoS Protection Standard:無効化
- ファイアウォール:無効化
- サブネット「Hybrid_Subnet」
Softether VPN のインストール
自宅(VPNサーバ)
- 環境は、LXCで構築した Debian 10 のシステムコンテナ
- ネットワークインタフェースは2つ
SoftEther の サイトから Linux 64bit 用のバイナリを入手してリンクする
$ sudo apt install wget gcc make $ cd /opt $ wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz -O - | sudo tar xzf - $ cd /opt/vpnserver $ sudo make
systemdのユニットファイルを作成して、自動起動を有効化する
$ cat << EOF | sudo tee /etc/systemd/system/softether-vpnserver.service [Unit] Description=Softether VPN Server Service After=network.target [Service] Type=forking User=root ExecStart=/opt/vpnserver/vpnserver start ExecStop=/opt/vpnserver/vpnserver stop Restart=on-abort WorkingDirectory=/opt/vpnserver [Install] WantedBy=multi-user.target EOF $ sudo chmod +x /etc/systemd/system/softether-vpnserver.service $ sudo systemctl daemon-reload $ sudo systemctl start softether-vpnserver $ sudo systemctl enable softether-vpnserver
適当な端末から eth0 に向かって、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「DEFAULT」の設定
- ユーザ名:テキトー
- 認証方法:パスワード認証
- SecureNATは無効
- ローカルブリッジ:eth1
- 仮想HUB「HYBRID」の設定
- ユーザ名:テキトー
- 認証方法:パスワード認証
- SecureNATは無効
- 待受ポート:5555/TCP (SE-VPN) のみ
- 仮想L3スイッチの設定
- インターフェース
- 192.168.1.249 ⇒ 接続先HUB「DEFAULT」に接続
- 192.168.10.1 ⇒ 接続先HUB「HYBRID」に接続
- ルーティングテーブル
- 192.168.20.0 ⇒ 192.168.10.2 (AWS用)
- 192.168.30.0 ⇒ 192.168.10.3 (Azure用その1)
- 192.168.31.0 ⇒ 192.168.10.3 (Azure用その2)
- インターフェース
以上で設定完了。
AWS および Azure(VPNブリッジ)
- Amazon EC2 と Azure VirtualMachine で Debian10 のインスタンスを作成
SoftEther の サイトから Linux 64bit 用のバイナリを入手してリンクする。
$ sudo apt install wget gcc make $ cd /opt $ wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Bridge/64bit_-_Intel_x64_or_AMD64/softether-vpnbridge-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz -O - | sudo tar xzf - $ cd /opt/vpnbridge $ sudo make
ユニットファイルを作成して、自動起動を有効化する
$ cat << EOF | sudo tee /etc/systemd/system/softether-vpnbridge.service [Unit] Description=Softether VPN Bridge Service After=network.target [Service] Type=forking User=root ExecStart=/opt/vpnbridge/vpnbridge start ExecStop=/opt/vpnbridge/vpnbridge stop Restart=on-abort WorkingDirectory=/opt/vpnbridge [Install] WantedBy=multi-user.target EOF $ sudo systemctl daemon-reload $ sudo systemctl start softether-vpnbridge $ sudo systemctl enable softether-vpnbridge
VPNブリッジは自力でアドレス変換しないとダメなのでポートフォワードを有効化
$ sudo vim /etc/sysctl.conf net.ipv4.ip_forward = 1 $ sudo sysctl -p
適当な端末から、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「BRIDGE」
SoftEther VPN の設定後に、tapデバイスに ip addr でIPアドレスを設定
- AWS:192.168.10.2
- Azure:192.168.10.3
SoftEther VPNの設定後に、ip route でローカルのルーティングテーブルを編集
- AWS
- 192.168.1.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.30.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.31.0/24 via 192.168.10.1 dev tap_vpntap
- Azure
- 192.168.1.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.20.0/24 via 192.168.10.1 dev tap_vpntap
改めて、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「BRIDGE」
- カスケード接続:仮想HUB「HYBRID」
- 状態:オンライン
- カスケード接続:仮想HUB「HYBRID」
以上で設定は完了。
まとめ
- 本記事の手順を実施した時点で上記の環境が構築できている
- IaaS レベルのハイブリッドクラウドであれば、これで構築完了
- 各拠点間の端末から ping を送りあうと疎通ができるはず
- 次回は各拠点に PaaS をデプロイして、疎通できるようにする
次回に続く kwatanabe.hatenablog.jp