IIJのルータでStarlinkを利用してみた

2023年11月15日 水曜日


【この記事を書いた人】
野尻 昂宏

SMF/MPCサービスの技術支援部隊として、自社ルータであるSEILと触れ合う日々を送るエンジニアです。多趣味で色々なことに手を出しています。

「IIJのルータでStarlinkを利用してみた」のイメージ

概要

昨今社内外で話題の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配下に設置するルータはMPCSEIL/X4を利用します。
クライアントPCではWindows11を利用します。

Starlinkと周辺機器

構成イメージ図

ルータのステータスから確認する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用途で使うのは一筋縄ではいかなさそうです。
MPCSEIL/X4ではフロートリンクというVPN自動設定機能を利用することで、IPv4 NAT Traversal(以降NAT-T)によるインターネット宛のアウトバウンド通信しか通らないNAT配下環境でのVPNや、IPアドレス変更への追従による動的なグローバルIPアドレスでのVPNを組むことが可能です。

MPCSEIL/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の仕様や情報も日々アップデートされていますので、今後も注視していきたいと思います。

 

 

野尻 昂宏

2023年11月15日 水曜日

SMF/MPCサービスの技術支援部隊として、自社ルータであるSEILと触れ合う日々を送るエンジニアです。多趣味で色々なことに手を出しています。

Related
関連記事