IIJのルータでStarlinkを利用してみた
2023年11月15日 水曜日
CONTENTS
概要
昨今社内外で話題のStarlinkについて、様々な利用用途の検討や動作検証が行われています。
今回私はIIJ自社開発ルータであるSEILを用いてStarlinkを利用してみましたので、その結果をご紹介いたします。
また、検証結果からStarlink配下にルータを置いてどのようなネットワーク構成が組めそうかという点についても少し触れていきます。
※Starlinkに関する他のエンジニアブログ記事も是非ご覧いただけますと幸いです。
https://eng-blog.iij.ad.jp/archives/tag/starlink
IIJマルチプロダクトコントローラサービス(MPC)
今回の検証では、IIJマルチプロダクトコントローラサービス(以下MPC)というSEILを管理するサービスを利用しています。
MPCではSEILをインターネット上の管理画面から一元的に管理することが出来、今回Starlinkを利用する際にもSEILのステータス取得やコンフィグの反映を実施する上で役立ってくれています。
StarlinkをMPCルータで利用してみる
今回の検証環境
IIJ本社オフィスが入居している飯田橋グランブルームの屋上を一時的に利用させていただき、今回の検証を実施しました。
屋上での一時的な検証ということもあり電源を自由に利用出来ない為、ポータブル電源を利用しています。
利用したStarlinkはレジデンシャルプランで、アンテナはG2と呼ばれるものです。
(今回のStarlink Wi-Fiルータには標準でイーサネットの口がないため、別途イーサネットアダプターをオプションで購入しています)
Starlink配下に設置するルータはMPCのSEIL/X4を利用します。
クライアントPCではWindows11を利用します。
ルータのステータスから確認するStalrink
まずはStarlinkを利用するためのSEILのコンフィグを作成していきます。
#Router Advertisement(以降RA)によるge0へのIPv6アドレス設定 interface.ge0.ipv6.address : router-advertisement #RAによるIPv6デフォルトルート設定 route.ipv6.1.destination : default route.ipv6.1.gateway : router-advertisement #DHCPによるge0へのIPv4アドレス設定 interface.ge0.ipv4.address : dhcp #DHCPによるIPv4デフォルトルート設定 route.ipv4.1.destination : default route.ipv4.1.gateway : dhcp #DHCPv6 Prefix Delegation(以降DHCPv6-PD)によるge1へのIPv6アドレス設定 dhcp6.client.service : enable dhcp6.client.1.interface : ge0 dhcp6.client.1.prefix-delegation.1.subnet : ge1 dhcp6.client.1.prefix-delegation.1.sla-id : 0x01 #ge1でのRAによるIPv6プレフィックス配布 router-advertisement.service : enable router-advertisement.1.interface : ge1 router-advertisement.1.advertise.1.prefix : auto #ge1でのDHCPv6によるIPv6DNS配布 dhcp6.server.service: enable dhcp6.server.1.interface: ge1 dhcp6.server.1.dns.1.address: 2001:4860:4860::8888 dhcp6.server.1.dns.2.address: 2001:4860:4860::8844 #ge1の静的IPv4アドレス設定 interface.ge1.ipv4.address : 172.16.0.100/24 #ge1でのDHCPによるIPv4アドレス,IPv4DNS配布 dhcp.server.service : enable dhcp.server.1.interface : ge1 dhcp.server.1.pool.address : 172.16.0.200/24 dhcp.server.1.pool.count : 10 dhcp.server.1.gateway : 172.16.0.100 dhcp.server.1.dns.0.address : 8.8.8.8 dhcp.server.1.dns.1.address : 8.8.4.4 #ge0でのnat設定 nat.ipv4.napt.0.private: 172.16.0.1-172.16.0.254 nat.ipv4.napt.0.interface: ge0
重要そうなポイントのみに絞りコンフィグを一部記載すると上記の通りです。まとめると、
- WAN側(ge0)インタフェース
-IPv4:DHCPによりアドレスを設定
-IPv6:Router Advertisement(以降RA)によりアドレスを設定 - LAN側(ge1)インタフェース
-IPv4:172.16.0.200/24を静的に設定
配下へDHCPでIPアドレスとDNS情報を配布
-IPv6:ge0のDHCPv6 Prefix Delegation(以降DHCPv6-PD)によりアドレスを設定
配下へRA及びDHCPv6によりIPv6プレフィックスとDNS情報を配布
といった形です。
StarlinkではWi-Fiルータの機能を無効にするバイパスモードという設定が存在します。
これによってルータが利用するネットワークの構成が変わってくる為、default状態とバイパスモード有効時の両方においてどのようなアドレスが割り当てられるかを確認していきます。
バイパスモード無効時(default状態)
それではStarlinkとSEILを起動させて確認を進めていきます。
まずはdefaultの状態で「show status interface」コマンドによりSEILのインタフェースに付与されたアドレス情報を確認してみます。
interface ge0: Description: "" Status: link up, administratively up MTU: 1500 TCPMSS: none TCPMSS6: none LastChange: 2023/09/27 16:39:05 Ipkts: 19889, Ierrs: 0, Opkts: 13215, Oerrs: 0, Colls: 0 InOctets: 18899166, OutOctets: 3186689, InDrops: 0, OutDiscards: 1 InUnknownProtos: 0 Media: auto (2500baseKX Full-Duplex) EthernetAddress: 00:e0:4d:50:5c:20 IP address: 192.168.1.21 netmask: 255.255.255.0 broadcast: 192.168.1.255 IPv6 address: fe80::2e0:4dff:fe50:5c20%ge0 prefixlen: 64 scopeid: 0x9 IPv6 address: 2406:2d40:3084:e000:2e0:4dff:fe50:5c20 prefixlen: 64 scopeid: 0x9 IPv6 address: fdce:b680:5c56:0:2e0:4dff:fe50:5c20 prefixlen: 64 scopeid: 0x9 interface ge1: Description: "" Status: link up, administratively up MTU: 1500 TCPMSS: none TCPMSS6: none LastChange: 2023/09/27 16:39:05 Ipkts: 11608, Ierrs: 0, Opkts: 18471, Oerrs: 0, Colls: 0 InOctets: 2288539, OutOctets: 18651317, InDrops: 0, OutDiscards: 13 InUnknownProtos: 0 Media: auto (2500baseKX Full-Duplex) EthernetAddress: 00:e0:4d:50:5c:21 IP address: 172.16.0.100 netmask: 255.255.255.0 broadcast: 172.16.0.255 IPv6 address: fe80::2e0:4dff:fe50:5c21%ge1 prefixlen: 64 scopeid: 0xa IPv6 address: fdce:b680:5c56:5::1 prefixlen: 64 scopeid: 0xa IPv6 address: fdce:b680:5c56:5:: prefixlen: 64 scopeid: 0xa anycast
WAN側(ge0)にDHCPで付与されたIPアドレスは、以前谷口のエンジニアブログ(Starlink(スターリンク)がやってきたのでネットワークを調べました)でもあったようにWi-Fiルータから192.168.1.0/24のネットワークのアドレスが払い出されています。
興味深い内容としては、
・RAでグローバルアドレスとユニークローカルアドレス(以下ULA)という2つのIPv6アドレスが付与されている
・DHCPv6-PDではULAのアドレスのみが付与されている
という点です。
ひとまず配下に接続したクライアント側も「ipconfig /all」によりアドレス情報を確認します。
イーサネット アダプター イーサネット: 接続固有の DNS サフィックス . . . . .: 説明. . . . . . . . . . . . . . . . .: Intel(R) Ethernet Connection (23) I219-V 物理アドレス. . . . . . . . . . . . .: E8-80-88-F7-69-38 DHCP 有効 . . . . . . . . . . . . . .: はい 自動構成有効. . . . . . . . . . . . .: はい IPv6 アドレス . . . . . . . . . . . .: fdce:b680:5c56:5:b87a:8555:34c5:c36c(優先) 一時 IPv6 アドレス. . . . . . . . . .: fdce:b680:5c56:5:a128:23b2:3df7:9679(優先) リンクローカル IPv6 アドレス. . . . .: fe80::5b73:93ab:f788:6faf%19(優先) IPv4 アドレス . . . . . . . . . . . .: 172.16.0.200(優先) サブネット マスク . . . . . . . . . .: 255.255.255.0 リース取得. . . . . . . . . . . . . .: 2023年9月27日 16:38:20 リースの有効期限. . . . . . . . . . .: 2023年9月28日 4:38:20 デフォルト ゲートウェイ . . . . . . .: fe80::2e0:4dff:fe50:5c21%19 172.16.0.100 DHCP サーバー . . . . . . . . . . . .: 172.16.0.100 DHCPv6 IAID . . . . . . . . . . . . .: 300449928 DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-2C-36-62-1E-E8-80-88-F7-69-38 DNS サーバー. . . . . . . . . . . . .: 8.8.8.8 8.8.4.4 NetBIOS over TCP/IP . . . . . . . . .: 有効
ルータに設定したDHCP、RAによりIPv4とIPv6のアドレスが問題なく設定出来ています。
ではこの状態でIPv4、IPv6それぞれインターネット向け(GoogleのPublicDNS宛)に疎通確認を実施してみます。
8.8.8.8 に ping を送信しています 32 バイトのデータ: 8.8.8.8 からの応答: バイト数 =32 時間 =29ms TTL=118 8.8.8.8 からの応答: バイト数 =32 時間 =28ms TTL=118 8.8.8.8 からの応答: バイト数 =32 時間 =47ms TTL=118
IPv4は問題なし。
2001:4860:4860::8888 に ping を送信しています 32 バイトのデータ: 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。
IPv6は失敗。
ULAのアドレスでそのまま通信してしまっているのが悪いのかもしれないと考え、試しにSEILに下記のようにIPv6のNAT設定を追加してみます。
#IPv6 NAT設定(ge0インタフェースにて、fdce:~~~を2406:~~~に変換する。またNeighbor Discoveryに代理応答する) nat.ipv6.0.type : transparent nat.ipv6.0.internal : fdce:b680:5c56:5::/64 nat.ipv6.0.external : 2406:2d40:3084:e000::/64 nat.ipv6.0.interface : ge0 nat.ipv6.0.ndproxy : enable
結果は、
2001:4860:4860::8888 に ping を送信しています 32 バイトのデータ: 2001:4860:4860::8888 からの応答: 時間 =38ms 2001:4860:4860::8888 からの応答: 時間 =34ms 2001:4860:4860::8888 からの応答: 時間 =42ms
無事IPv6も成功。
このことから、StarlinkのWi-Fiルータの配下に個別ルータを設置する場合、クライアント側に割り当てるULAを個別ルータ側でグローバルIPv6にNATしてあげる必要がありそうです。
今回は検証目的のためULAの非固定プレフィクスを見越したIPv6NATを設定しましたが、実際には適切なIPv6ネットワーク設定が必要です。
※IPv6 RAの通信をそのままbridgeして個別ルータ配下に転送する場合はクライアントにグローバルなIPv6アドレスが割り当てられるため、この問題は発生しないはずです。
バイパスモード有効時
次にバイパスモードを有効にして再度「show status interface」コマンドによりSEILのアドレス情報を確認していきます。
interface ge0: Description: "" Status: link up, administratively up MTU: 1500 TCPMSS: none TCPMSS6: none LastChange: 2023/09/27 17:41:58 Ipkts: 1425, Ierrs: 0, Opkts: 1313, Oerrs: 0, Colls: 0 InOctets: 709921, OutOctets: 338680, InDrops: 0, OutDiscards: 2 InUnknownProtos: 0 Media: auto (2500baseKX Full-Duplex) EthernetAddress: 00:e0:4d:50:5c:20 IP address: 100.117.199.46 netmask: 255.192.0.0 broadcast: 100.127.255.255 IPv6 address: fe80::2e0:4dff:fe50:5c20%ge0 prefixlen: 64 scopeid: 0x9 IPv6 address: 2406:2d40:3000:1b29:2e0:4dff:fe50:5c20 prefixlen: 64 scopeid: 0x9 interface ge1: Description: "" Status: link up, administratively up MTU: 1500 TCPMSS: none TCPMSS6: none LastChange: 2023/09/27 17:41:58 Ipkts: 1268, Ierrs: 0, Opkts: 1332, Oerrs: 0, Colls: 0 InOctets: 320288, OutOctets: 667165, InDrops: 0, OutDiscards: 14 InUnknownProtos: 0 Media: auto (2500baseKX Full-Duplex) EthernetAddress: 00:e0:4d:50:5c:21 IP address: 172.16.0.100 netmask: 255.255.255.0 broadcast: 172.16.0.255 IPv6 address: fe80::2e0:4dff:fe50:5c21%ge1 prefixlen: 64 scopeid: 0xa IPv6 address: 2406:2d40:3084:e001::1 prefixlen: 64 scopeid: 0xa IPv6 address: 2406:2d40:3084:e001:: prefixlen: 64 scopeid: 0xa anycast
WAN(ge0)側にDHCPで付与されたIPアドレスは、Wi-Fiルータが無効になった為、100.64.0.0/10のネットワークのアドレスが払い出されています。
バイパスモードを有効にした結果、ge0に割り当てられるIPv6はグローバルアドレスのみとなった為、ULAはWi-Fiルータ側で払い出しを行っていたものと考えられます。
また、DHCPv6-PDでge1側に割り当てられたアドレスは2406:2d40:3084:e001/64のネットワークであり、これはDHCPv6-PDのsla-idを0x01に設定しているため末尾がe001となっているということを踏まえると、default状態の時にge0に割り当てられた2406:2d40:3084:e000/64と同じネットワークが配布されていることがわかります。
default状態の時はWi-FiルータがDHCPv6-PDでIPv6のプレフィックス情報を設定し、RAでそのプレフィックス情報を配布していたという形です。
次に配下に接続したクライアント側で「ipconfig/all」によりアドレス情報を確認します。
イーサネット アダプター イーサネット: 接続固有の DNS サフィックス . . . . .: 説明. . . . . . . . . . . . . . . . .: Intel(R) Ethernet Connection (23) I219-V 物理アドレス. . . . . . . . . . . . .: E8-80-88-F7-69-38 DHCP 有効 . . . . . . . . . . . . . .: はい 自動構成有効. . . . . . . . . . . . .: はい IPv6 アドレス . . . . . . . . . . . .: 2406:2d40:3084:e001:dd97:ee1c:cefd:fa64(優先) 一時 IPv6 アドレス. . . . . . . . . .: 2406:2d40:3084:e001:d565:2cd0:a2e0:7bf(優先) リンクローカル IPv6 アドレス. . . . .: fe80::5b73:93ab:f788:6faf%19(優先) IPv4 アドレス . . . . . . . . . . . .: 172.16.0.200(優先) サブネット マスク . . . . . . . . . .: 255.255.255.0 リース取得. . . . . . . . . . . . . .: 2023年9月27日 17:42:29 リースの有効期限. . . . . . . . . . .: 2023年9月28日 5:42:29 デフォルト ゲートウェイ . . . . . . .: fe80::2e0:4dff:fe50:5c21%19 172.16.0.100 DHCP サーバー . . . . . . . . . . . .: 172.16.0.100 DHCPv6 IAID . . . . . . . . . . . . .: 300449928 DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-2C-36-62-1E-E8-80-88-F7-69-38 DNS サーバー. . . . . . . . . . . . .: 8.8.8.8 8.8.4.4 NetBIOS over TCP/IP . . . . . . . . .: 有効
ルータに設定したDHCP、RAによりIPv4とIPv6のアドレスが問題なく設定出来ています。
また、default状態時と異なり、クライアント側にグローバルIPv6アドレスが割り当てられています。
この状態で再度IPv4、IPv6それぞれインターネット向け(GoogleのPublicDNS宛)に疎通確認を実施してみます。
8.8.8.8 に ping を送信しています 32 バイトのデータ: 8.8.8.8 からの応答: バイト数 =32 時間 =32ms TTL=119 8.8.8.8 からの応答: バイト数 =32 時間 =28ms TTL=119 8.8.8.8 からの応答: バイト数 =32 時間 =23ms TTL=119
IPv4は問題なし。
2001:4860:4860::8888 に ping を送信しています 32 バイトのデータ: 2001:4860:4860::8888 からの応答: 時間 =24ms 2001:4860:4860::8888 からの応答: 時間 =27ms 2001:4860:4860::8888 からの応答: 時間 =28ms
IPv6も問題なし。
クライアント側でIPv4/IPv6どちらも問題なくインターネット通信が出来ました。
結果として、個別ルータの配下でIPv4/IPv6デュアルスタックな構成を組みたい場合、SEILをご利用いただく際はバイパスモードを有効にしていただくのが良さそうです。
考えられる利用可能な構成
検証の結果を踏まえてSEILを用いてどのようなネットワーク構成が組めるかを考えてみます。
調査をしたところ
・default状態ではインターネット側からのインバウンド通信がWi-Fiルータでブロックされる
という仕様になっていることがわかりましたので、インターネットVPN用途で使うのは一筋縄ではいかなさそうです。
MPCのSEIL/X4ではフロートリンクというVPN自動設定機能を利用することで、IPv4 NAT Traversal(以降NAT-T)によるインターネット宛のアウトバウンド通信しか通らないNAT配下環境でのVPNや、IPアドレス変更への追従による動的なグローバルIPアドレスでのVPNを組むことが可能です。
MPCのSEIL/X4を利用する際、各構成における対応可否は以下のようになると思われます。
インターネットGW(※1) | L3-VPN | L2-VPN | ||||
---|---|---|---|---|---|---|
IPv4 | IPv6 | IPv4 | IPv6 | IPv4 | IPv6 | |
default状態 | 〇 | × | 〇(※2) | ×(※3) | ×(※4) | ×(※3) |
バイパスモード有効 | 〇 | 〇 | 〇(※2) | 〇 | ×(※4) | 〇 |
- ※1 外部公開などは行わず、配下のクライアントがシンプルにインターネット通信を行うという構成を想定しています。[↑]
- ※2 VPN対向側はNATされず、通信の制限がされないグローバルIPアドレスを利用する必要があります。[↑]
- ※3 ULAとグローバルの2つのIPv6アドレスが付与されることによるものです。[↑]
- ※4 SEILのL2-VPNはNATによるアドレス変換に対応していないことによるものです。[↑]
L3-VPNの中でL2-VPNを構築するといった荒業を使えばIPv4のL2-VPNも技術的には可能ですが、少々複雑な設計になるため今回の記事では割愛します。
まとめ
Starlinkの配下に個別でルータを置いてみた結果、バイパスモードを有効にすれば結構色々な構成が組めるのではないかということがわかりました。
今回はStarlinkでレジデンシャルのプランを利用した検証を行いましたが、他のプランではまた違った仕様になっていて今回の検証よりも更に幅広いネットワーク構成が組める可能性があると考えています。
Starlinkの仕様や情報も日々アップデートされていますので、今後も注視していきたいと思います。