Starlink(スターリンク)とクラウドで月額171円の冗長VPNを構築してみました
2023年03月08日 水曜日
CONTENTS
今回は日本、アメリカ、ドイツに設置しているStarlinkの検証環境用に構築した冗長VPNについて説明します。
これまで過去投稿の一覧を書いていましたが、記事が増えてきたので、タグでまとめた先のリンクにします。IIJのスターリンク関係の記事が集まっていますので活用してください。
動画も公開していますので、よろしければそちらもあわせてご覧ください。
ブログ | 動画(YouTube) |
---|---|
3ヵ所のStarlinkをどう繋いでいくのか?
海外のStarlinkを検証していくために、当初から検証環境について色々と検討していました。Starlink機器にインターネット側からアクセスする手段はないのでStarlink機器配下にVPNで常時接続している機器を設置、リモート接続して検証する形を考えていました。VPNを冗長構成にする事でVPN自身のメンテナンスも安全にできるようになります。
VPNネットワークの構成
Starlink配下におく機器は定番のRaspberry Piを使い、VPNには WireGuardを使う事にしました。
WireGuardは設定がシンプルでLinuxカーネルと統合されておりRaspberry Piへの導入や習熟が簡単だった事。MacやWindows、iOSやAndroidでもWireGuardが動いて直接接続できて便利だった事が理由です。
一つの拠点での基本的な接続は下記のような図になります。パブリッククラウド上の仮想サーバでVPNサーバを作ることで、どこからでもWireGuardを搭載したクライアントからつながるようにしています。
VPNサーバは2個作ることで冗長化します。サーバ自体も地理的に離れたところのものを使っています。
3ヵ所からVPNサーバに接続することで、ネットワークはこのような形になりました。
パブリッククラウドの選定と費用の試算
VPNサーバは日本とアメリカで構築したのですが、日本ではOracle Cloud Infrastructure(OCI)を使いました。アメリカはGoogle Cloud Platform(GCP)を使っています。
無償で使えるパブリッククラウドは他にもありますが、期間などに制限なく使える仮想サーバがあるのはこの2社ぐらいのようです。
GCPでは特定の要件を満たしたGCPの使用に対してクレジットで相殺される形になっていて使用料自体は計算されています。月額171円はGCPで相殺されたあとの金額で1日あたりの課金は今の円レートでは5円です(31日で155円で消費税がかかって171円です)。
OCIではAlways Freeリソースと呼ばれる無料で使えるリソースのセットがありこれを利用しています。OCIは有料アカウントにアップグレードせず0円のまま使っています。
もし今回の仮想サーバを普通に作った場合にはGCPで月額1,040円ぐらいかかる試算になります(OCIもあまり変わらない)。
ここではデータ転送量を考慮していませんが、元々VPNとしての通信はそれほど発生しないのと、OCIだと無料枠が10TBあるのでアメリカのStarlinkの制限(1TB)の方が厳しいぐらいになっています。
VPN Serverの構築について
VPN Serverの構築について詳細を書いて行くと別のブログになってしまうので、いくつか気をつけた事だけ書きます。
GCPでの仮想サーバ(GCE)構築についてはインスタンス作成時に”IP転送を有効にする”をチェックして構築する必要があります。仮想サーバのOSにはDebianを使いましたが、OS内のパケットフォワードの有効化”net.ipv4.ip_forward=1”とは別に必要です。またWireGuardのパケットが通過できるようにVPCネットワークにFireWallルールを追加しますが、仮想サーバ構築時に設定したネットワークのタグを使ってルールを設定します。GCEとVPSの管理画面を使いながら設定していく事になります。
OCIでの仮想サーバ構築ではGCPとは違う形になります。COIではIP転送といった項目はなく仮想サーバ上のパケットフォワードの設定設定のみになります。仮想サーバのOSは無償版ではDebianを選択できないのでUbuntuで構築しますが、OCIで用意されたUbuntuのサーバはiptablesによるフィルタがありますのでWireguardが通過できるように制限を調整します。OCIのネットワーク上のFireWallルールは仮想サーバのプライマリVNIC→サブネット→セキュリティリスト→イングレス・ルールで設定します。
VPNサーバはグローバルIPアドレスを持っていますが、このアドレスはクラウドから一時的に割り当てられたものでサーバの一時停止や再構築などで別のIPアドレスになってしまう可能性があります。IPアドレスを予約することで同じIPアドレスにする事も可能ですが、追加の費用かかるので予約をしていません。そのために冗長化しているとも言えます。
IPアドレスが変わっても同じ名前でアクセスできるようにDNSサービスをつかっています。Google DomainsのDNSサービスを使っていますが適当な正引きの名前でVPNサーバ名を指定できるようにしています。更新は手動ですが、頻繁におきる事でもないので当面はこれで運用しようと思っています。
Starlink情報(随時更新)
ブログを書いている側から次々と更新があるのがStarlinkです。今回もあれから変わった事について更新したいと思います。
衛星区間のパケットの折り返しですが国内でStarlinkをもっている方に協力いただいて疎通があるか確認してもらったところ出来なさそうでした。元々セキュリティ的にも出来ないだろうなと思っていたのでこのような挙動でも納得です。
IPv6の利用ですが、国内でもIPv6が使えるようになっています。上記で協力していただいた方のStarlinkにはIPv6が割り振られていました。ただ僕がつかっている日本とドイツのStarlinkでは現在も使えないので、これはアンテナの違いかもしれないと考えサポートに確認したところG1はサポートしないとの回答がありました。日本でもサービス開始からしばらくはG1のアンテナが提供されているので一部のユーザはIPv6が使えないようです、残念です。
IIJへの接続性についてあまりよくないと書いた経路も改善されたようです。AS14593(SpaceX)からこれまでとは違うISPを通って到達しており、遅延が改善しています。
$ traceroute -A -I www.iij.ad.jp traceroute to www.iij.ad.jp (202.232.2.180), 30 hops max, 60 byte packets 1 _gateway (192.168.1.1) [*] 0.645 ms 0.820 ms 1.180 ms 2 100.64.0.1 (100.64.0.1) [*] 41.188 ms 41.179 ms 41.284 ms 3 172.16.248.30 (172.16.248.30) [*] 41.157 ms 41.150 ms 41.248 ms 4 149.19.109.14 (149.19.109.14) [AS14593] 41.119 ms 41.111 ms 41.215 ms 5 209.58.55.68 (209.58.55.68) [AS17819/AS38456] 41.337 ms 41.393 ms 41.567 ms 6 if-ae-33-2.tcore1.tv2-tokyo.as6453.net (180.87.181.204) [AS6453] 41.612 ms 44.902 ms 34.342 ms 7 if-et-15-2.hcore1.ovc-tokyo.as6453.net (120.29.217.10) [AS6453] 44.944 ms 44.919 ms 44.973 ms 8 116.0.90.18 (116.0.90.18) [AS6453] 44.861 ms 44.837 ms 44.908 ms 9 tky001bb00.IIJ.Net (58.138.101.1) [AS2497] 44.804 ms 44.781 ms 44.854 ms 10 osk011bb00.IIJ.Net (58.138.88.18) [AS2497] 55.345 ms 55.327 ms 55.352 ms 11 osk008agr02.iij.net (210.130.16.19) [AS2497] 55.276 ms 55.314 ms 55.409 ms 12 www.iij.ad.jp (202.232.2.180) [AS2497] 35.672 ms 41.029 ms 51.519 ms
スターリンク衛星の新しいバージョン V2 mini が軌道に投入されました、従来のV1.5と比べて1機あたり4倍の容量をもっているそうです。1回のロケットで運べる衛星数は55機から21機に減ってしまいましたが、性能が大きく向上したことで成長速度は1.5倍に増えた計算になります。新しい衛星を掴んだ時だけ性能が大きく向上するのか?色々と挙動は気になりますね。