nがひとつ多い。

えぬなおの技術的なことを書いていくとこ。

【Kubernetes】【Network】GKEの1.14で追加されるIPマスカレード出来るアドレス範囲について。

ある日、こんな記事が。

Release notes (Rapid channel)  |  Kubernetes Engine Documentation  |  Google Cloud

GKE Sandbox is supported on v1.14.x clusters running v1.14.2-gke.2 or higher.

The following IP ranges have been added to default non-IP-masq iptables rules:

100.64.0.0/10

192.0.0.0/24

192.0.2.0/24

192.88.99.0/24

198.18.0.0/15

198.51.100.0/24

203.0.113.0/24

240.0.0.0/4

つまりどういう事だってばよ、というお話。

目次

IPマスカレード??

www.kddi.com

IPマスカレードとは、ネットワーク機器に割り当てられたIPアドレスを変換して、1つのIPアドレスで通信ができるようにする手法。ルーターファイアウォールと呼ばれる機器でIPマスカレードは実現され、変換する性能によって、通信速度や接続できる端末数が決まる。

Network Address Port Translation(NAPT)と呼ばれることもある。

NAPTっていうと理解が早いね。 何でkubernetesにこのNAPTの話が出てきたかというと、

cloud.google.com

クラスタで IP マスカレードを使用すると、個々のポッド IP アドレスがリンクローカル範囲と任意の追加 IP 範囲の外部トラフィックに公開されなくなり、クラスタのセキュリティが向上します。さらに、マスカレードを使用しない IP 範囲間の通信を設定することもできます。たとえば、192.168.0.0/16 のアドレス範囲にあるポッドが 10.0.0.0/8 のアドレス範囲のネットワーク リソースと通信できます。

kubernetesが自分のホスト外と通信を行う時にはIPマスカレードを使用している、そのアドレス範囲がプライベートアドレス外の上記の予約アドレスでも可能になるというお話だ。

プライベートアドレスについて

従来、GKEのpodのアドレス割り当て範囲は--cluster-ipv4-cidr とか --services-ipv4-cidrとかで使用するいわゆるプライベートアドレスだ。

ネットワークの概要  |  Kubernetes Engine のドキュメント  |  Google Cloud

現在の情報だと、まだGKEのpodに上記の予約アドレスは振れないので、おそらく今回の対応は将来的な実装のお話、もしくはオンプレとのマスカレードの為に実装されるんだと予想している。

プライベートアドレスはRFC1918で策定されている通り。

www.nic.ad.jp

結論は、

他の組織のホストひいてはインターネットへのアクセスを必要としない ホスト。

に振るアドレス。

Internet Assigned Numbers Authority (IANA)は次の三つのIPアドレス空間

ブロックをプライベートインターネットのために予約している。

10.0.0.0 - 10.255.255.255 (10/8 prefix)

172.16.0.0 - 172.31.255.255 (172.16/12 prefix)

192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

らしい。 当然GKEのpodに振られるアドレスも上のアドレス範囲であった。

しかし、今回の発表では、

100.64.0.0/10

192.0.0.0/24

192.0.2.0/24

192.88.99.0/24

198.18.0.0/15

198.51.100.0/24

203.0.113.0/24

240.0.0.0/4

以上のIPマスカレード出来るアドレス群が追加されている。 正確に言えば、

The following IP ranges have been added to default non-IP-masq iptables rules:

以下のIP範囲がデフォルトの非IP-masq iptablesルールに追加されました。

だそうだ。

さて、僕らが知りたいのは、

  • このアドレス群は外部とIPと干渉しあわないのか?
  • 外部にこのIPアドレス範囲が存在してもGKEのiptablesやcalicoなどCNI、上位ISPが意図しないルーティングを起こさないか?

である。

結論はIANAによって予約されたアドレスだからOK

一覧は↓

予約されたIPアドレス | 技術資料 | ウェブチェッカー | ウェブサイトの更新を定期的にチェックしてメールでお伝えします

IPアドレスのうち、次のIPアドレスは特殊な用途のために予約されたものとなり、グローバルIPネットワークと直接接続している環境上で勝手に使う事はできません。

※もちろんプライベートIPアドレスについては、プライベートネットワーク内においては自由に使う事ができます。

出展 Wikipedia IPv4 2010年9月22日現在

しかし、まぁせっかくなので各アドレスの概要に触れていくことにしよう。

RFC3330(Special-Use IPv4 Addresses)

www5d.biglobe.ne.jp

どうやらこのRFCに正体が書いてあるかもしれないので見ていく。

192.0.0.0/24

192.0.0.0/24 - This block, corresponding to the numerically lowest of the former Class C addresses, was initially and is still reserved by the IANA. Given the present classless nature of the IP address space, the basis for the reservation no longer applies and addresses in this block are subject to future allocation to a Regional Internet Registry for assignment in the normal manner.

192.0.0.0/24 - このブロックは前のクラスCアドレスの数値的に最も低いも のであって、まだIANAによって予約されています。IPアドレス空間の 現在のクラスレスの性質という条件のもとで、予約の根拠はもう適用されま せん、そしてこのブロックの中のアドレスが将来の地域インターネット登記 所の標準的な方法での割当ての適用を受けています。

192.0.0.0/24はIANAで予約されてるから大丈夫そう。もともとサブネットが出来る前にクラス別のルーティングしてた時の名残みたいだから、予約している意味も特になさそうだけど、逆に言えば解放する意味合いもなさそう(あったとしたらMoney)

192.0.2.0/24

192.0.2.0/24 - This block is assigned as "TEST-NET" for use in documentation and example code. It is often used in conjunction with domain names example.com or example.net in vendor and protocol documentation. Addresses within this block should not appear on the public Internet.

192.0.2.0/24 - このブロックは文書化と例での使用するコードのために "TEST-NET"として割り当てられます。これはベンダー文書とプロトコル文書 でドメインexample.comあるいはexample.netと関連してしばしば使われま す。このブロック中のアドレスが公共インターネットに現われるべきではあ りません。

192.0.2.0/24はが公共インターネットに現われるべきでは無いらしい。 後述するが、これはドキュメント利用可能アドレスと呼ばれるものであり、要はhogeとかfooとかに意味合いが近い。

192.88.99.0/24

192.88.99.0/24 - This block is allocated for use as 6to4 relay anycast addresses, according to [RFC3068]. 192.88.99.0/24 - [RFC3068]によれば、このブロックは6to4リレーエニ キャストアドレスに使用するために割当てられます。

6to4リレーエニキャストってのだが以下が詳しい。

https://docs.oracle.com/cd/E19253-01/819-0380/ipv6-config-tasks-24/index.html

任意のIPv6アドレス空間AとIPv6アドレス空間Bが遠隔にあり、その間がIPv4アドレス空間が存在した場合、 通常v4とv6アドレスは互いに疎な関係にあり、ルーティングできない。 その場合に使われるトンネリング技術内でISPやIX側で使用されるアドレスであり、通常エンドユーザのIPv4アドレス空間のルーティング対象ではない(それにこの6to4アドレスは脆弱なのでほぼ使われてない https://docs.oracle.com/cd/E19253-01/819-0380/ipv6-ref-58/index.html)。

ちなみにエニーキャストは同じアドレスを複数のホストが所有して「近いホストを優先して」投げる方式のことだ。

ってことで、まあGKE内で振って、内部でこういった擬似6to4リレーをしたい逸般ユーザとかいれば使ってどうぞって事なのかな。

198.18.0.0/15

198.18.0.0/15 - This block has been allocated for use in benchmark tests of network interconnect devices. Its use is documented in [RFC2544].

198.18.0.0/15 - このブロックはネットワーク相互接続装置のベンチマー クテストでの使用に割り当てられます。その使い方は[RFC2544]で文書化 されます。

このRFC2544はネットワーク測定の教科書として非常に有用なので紹介しておきます。

RFC2544 ネットワーク相互接続装置のためのベンチマーク方法論

さて話に戻りますが、このアドレスに関しても予約されている。 ISP側が安心して相互実験出来るようアドレスだろう、技術者としては涙が出る配慮だね。

240.0.0.0/4

240.0.0.0/4 - This block, formerly known as the Class E address space, is reserved. The "limited broadcast" destination address 255.255.255.255 should never be forwarded outside the (sub-)net of the source. The remainder of this space is reserved for future use. [RFC1700, page 4]

240.0.0.0/4 - このブロックは、以前はクラスEアドレス空間として知られ ていて、予約されています。「限定ブロードキャスト」宛先アドレス 255.255.255.255は決してソースの(サブ)ネットの外に転送されるべきで はありません。この空間の残りが未来の使用のために確保されます。 [RFC1700、ページ4]。

クラスEは知っていたが、限定ブロードキャストは知らなかった・・・。

リミテッド・ブロードキャストアドレス (limited broadcast address)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 https://wa3.i-3-i.info/word11995.html

そこに送れば、自分が今いるネットワーク内のすべてのコンピュータにお届けしてくれるIPアドレス

・・・?それって255.255.255.255のことじゃなかったか?

ま、

IPアドレス(クラスD・クラスE) TCP/IP入門

クラスEのIPアドレスの範囲は、「240.0.0.0~255.255.255.255」で、このクラスは、実験用としてTCP/IPIPv4)の開発当初から予約されています。実際に使われることはありません。

だから別にGKE上で使ってもいいだろってことだろう。

あまり。

RFC3330には載っていなかった、

  • 100.64.0.0/10
  • 198.51.100.0/24
  • 203.0.113.0/24

を見ていこう。

100.64.0.0/10

www.geekpage.jp

RFC 6598 - IANA-Reserved IPv4 Prefix for Shared Address Space

記事を見る限りは概ね、

ISPがCGNなどで利用するためのISP Shared Address(100.64.0.0/10)がIANAで予約され、ISP Shared AddressのRFC6598が本日発行されました。

感覚としては10.0.0.0/8、172.16.0.0/12、192.168.0.0/16に続いて第4のプライベートIPv4アドレスが誕生したような感覚ではありますが、100.64.0.0/10はサービスプロバイダネットワーク内でのみ利用される点で異なります。

だそうだ。これもISPの実験的な使用に適していそう。

198.51.100.0/24, 203.0.113.0/24

192.0.2.0/24に関してはRFC3330でもあったので紹介したが、これらはその仲間だ。

toe.bbtower.co.jp

この記事が面白い。

技術関連の話題に触れる際には、IPアドレスドメイン名を例示することがよくあります。うっかり実在のIPアドレスドメイン名を使ってしまうと、迷惑をかけてしまうかもしれません。ここでは、ドキュメント用にリザーブされたIPアドレス等、必要になりそうなものをまとめてみました。

[RFC5737] IPv4 Address Blocks Reserved for Documentation

で定義されており、

192.0.2.0/24 (TEST-NET-1) 198.51.100.0/24 (TEST-NET-2) 203.0.113.0/24 (TEST-NET-3) が文書用のIPv4アドレスとしてリザーブされています。

し、知らなかった・・・(_)確かに実在のIPとかでブログ書くとなって時にこの予約IPを使えばわかりやすいかも(よく落ちるグローバルIPとかの模擬を実在のIPで書いちゃうとアレだしな・・・。)

終わりに

概ね全て予約アドレスであるものの、

  • 学術用途
  • テストネット
  • グローバルでもう意味を成してない予約アドレス

が今回の対象でだった。 実験やインターネットを題材とした研究に使いやすいようになのか・・・? 全く何の根拠もない予測と断っておきますが、Googleさんのopenラボとももしかしたら関係があるかも・・・?

Google | CERN openlab

そんな学術的な実験をマルチクラウドでやっていない僕からすると、少なくともgke-1.14ではGKEのpodにこのIPは振れないのであんまり関係ないお話だったかもしれない。