技術ブログ株式会社エーピーコミュニケーションズの技術ブログです。エーピーコミュニケーションズの技術ブログです。Weekのものになります。iTOC事業部MBS部の岸野です。今回はAWS環境のEC2にWireGuardとIPv6を用いて接続してみようと思います。VPNといった物を用いてアクセスするケースが一般的かと思います。VPNとしても利用できるWireGuard使用し、そのWireguardのトンネルをIPv6を使用して構築したいと思います。WireGuardとは公式サイトを覗いてみると以下の説明がありました。industry.簡単にまとめるとシンプルで無駄のないVPNIPsecやOpenVPNよりもパフォーマンスが良いことを目指している最初はLinux向けでしたが、今は色んなプラットフォームで使用ができるとのことです。構成図1上記図のような構成を構築していきます。図中の「EC2-WireGuard」にはIPv4でルーティングさせ、別のVPCSubnetとの通信をIPv4で可能にしてみます。構成図2しかし、今回は図左側のオフィスIPv6環境が用意できなかったので、こちらもAWSで用意してみます。IPv6設定まず、VPCを作成します。ブロック」を使用します。IPv4はお好みの値で良いですが、今回は10.0.0.0/16を使用します。次にサブネットを作成します。Amazon提供のIPv6CIDRブロックは/56で提供されます。1つのサブネットに/56を割り当ててもよいのですが、今回は/64で割り当てを行います。こちらもIPv4はお好みの値で良いですが、今回は10.0.1.0/24を使用します。インターネットゲートウェイ、ルートテーブルの変更インターネットゲートウェイをいつも通りVPCにアタッチします。ルートテーブルに関しては送信先「::/0」をアタッチしたインターネットゲートウェイに向けます。次にEC2を起動させます。今回は以下を選択しました。初回のWireguardセットアップはIPv6でSSHするのでキーペア選択しています。IPv6は後ほど手動で割り振るので一旦無効化でEC2作成します。セキュリティグループはSSHを::/0で設定しました。UDPのカスタムポート51820を「Client-WireGuard」のIPv6アドレスで設定すると接続元を絞れます。その他はデフォルトです。起動できたらIPv6アドレスの固定を行います。下記画像のアクション>ネットワーキング>IPアドレスの管理からアドレス管理の画面に遷移できます。ブロックのアドレスを使用してアドレスを固定します。値は何でもよいですが、建てるサーバのメイン用途のアドレスで固定するとわかりやすくて良いです。DNSサーバなら2001:0DB8:1234:1234:1::53NTPサーバなら2001:0DB8:1234:1234:1::123というようなやり方を私はよく使用します。今回はWireguardのデフォルトポートである51820をそのまま使用しようと思うので、下記のようにca6cを設定しました。対向の「Client-WireGuard」側も同様のやり方で構築しました。インターネットゲートウェイで構築しました。設定しましたら固定したIPv6アドレスでSSH接続します。「EC2-WireGuard」の設定をします。-p「Client-WireGuard」の設定をします。10.1.1.0/24AllowedIPsはどこの通信をWireguardにルーティングさせるかを決めることができます。AllowedIPsに「0.0.0.0/0」設定するとすべての通信をWireguard通過させることもできます。今回は特定IPレンジのみWireguardを通す設定をさせています。コマンドでデータが送受信されているか確認します。sent無事にデータの送受信ができていそうなので問題なさそうです。別途IPv6アドレスとグローバルIPv4アドレスを持たない「EC2-test」を用意し、Client-Wireguard→EC2-testでPing疎通をしてみます。IPv6アドレスとグローバルIPv4アドレスを持たないEC2インスタンスに無事Pingが飛びました。値も東京大阪間と考えれば問題ないと思います。以下がClient-Wireguard→EC2-WireGuardにPingした時の結果です。Wireguardを通すと若干遅延してることがわかるものの、ソフトウェア的な遅延は少なく感じます。msubuntu@ip-10-1-1-59:~$iperf3もしてみました。テストポリシーに抵触しているのか、チューニングしていないからなのかわかりませんがフルパワー出せていない気がします。途切れることなく安定通信してるように見える思います。EC2間の構成になってしまいましたが、最初に簡単にまとめた通りWireguardはほとんどのLinuxディストリビューションやWindows、MacOS、Android/iOS(スマホ)に対応しており、それはすなわち他のクラウド同士やオンプレを混ぜた構成でも使用することができるということです。Armのビルドも標準パッケージで用意されている場合もあり、本文中に記載していませんが「Client-WireGuard」は「t4g.nano」インスタンスで構築しています。複数のpeerを持つことができ、以下の図のような複数接続も可能です。今回は本文中に明確には記載していませんが、クライアント側はアウトバウンド通信のみの許可で問題ありません。*4他のプラットフォームのインストール方法は公式サイトに記載がありますので、確認してみてください。EC2にIPv6アドレスを割り振りWireguardで接続してみました。運用や管理の問題でAWSサービスのElasticIPやDirectConnectなどの方が都合が良いケースが大半と思います。構築でき、持ち物も実機ルータなど物理機器を用意せずに仮想マシン等あれば構築できそうなのが良いですね。最後まで読んでいただきありがとうございました。次回もよろしくお願いします。Services(アドバンストティアサービスパートナー)認定を受けております。一緒に働いていただける仲間も募集中です!今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。www.ap-com.co.jp*1:OSは今回の手順はUbuntuで説明します。AmazonLinux等もWireGuard構築できます。*2:実運用するならもっと速度の出るインスタンスの方が良いと思います。WireguardはArmでも動作するのでArmのインスタンスでもよいかもしれません。*3:IPv4のプライベートアドレスを固定しておらずアドレスがぐちゃぐちゃで申し訳ないです。*4:企業などでNGFWのアプリケーション制御を行っていると検知されるケースがあるようです。Engineeringの導入支援、データ&AI基盤に関連するサービスを提供しています。わたしたちは「エンジニアとお客様を笑顔にする」というVisionを掲げ、インフラエンジニアの未来を創るNeoSIerとして工夫と挑戦を行い続けます。読者になるこのブログについて引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。