3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10,000個以上のIPアドレスを1つのインスタンスに割り当てる

3
Last updated at Posted at 2025-12-08

■背景

新機能でインスタンスのVNICにIP CIDRアドレスをアタッチすることができるようになりました。

今までだと、VNICに対して1つずつしかIPアドレスをアタッチできませんでしたが、今回のアップデートで「IP CIDRアドレス」(=CIDR範囲のネットワーク=複数のIPアドレス)をVNICにアタッチできるようになりました。
「複数のIPアドレスを一度にアタッチ」が重要です。
vnicipaddressimage.png

この仕組みの理解と実際に割り当てられるかを確認することが、今回の目的です。

■インスタンスとVNICとIPオブジェクトの関係

configdiagram.png

■構成

  • 目的
    ・アタッチした複数のIPアドレスと通信ができるか
  • 構成
    ・IP CIDRアドレスを割り当てるインスタンスx1
    ・外からpingで確認するインスタンスx1
    ipping.png

CIDR IPアドレス割り当てたインスタンス <-> 別インスタンスとの接続
10.0.1.8 <-> 10.0.1.254
10.0.1.9 <-> 10.0.1.254

■実際の割り当て

コンソールでの割り当て

ipaddallocateconsole.png
プライマリVNICにセカンダリIP CIDRアドレス10.0.1.8/29(=8つのIPアドレス)を割り当てしました。
自動と手動が選べます。手動の場合はCIDRの最初のアドレスを選択します。

OS側で割り当て

OSではVNICのプライマリIPアドレスしか認識していません。
ドキュメント セカンダリ・プライベートIPアドレスを使用するためのLinuxの構成 を参考に認識させます。

ip addr add
ip addr add <address>/<subnet_prefix_len> dev <phys_dev> label <phys_dev>:<addr_seq_num>
<address>: セカンダリ・プライベートIPアドレス
<subnet_prefix_len>: サブネットの接頭辞の長さ。たとえば、サブネットが192.168.20.0/24の場合、サブネット接頭辞の長さは24です
<phys_dev>: アドレスを追加するインタフェース(例: ens3)
<addr_seq_num>: デバイス上のアドレス・スタックの連続した番号(例:1,2,3と増やして追加した)

コマンド
sudo ip addr add 10.0.1.8/29 dev ens3 label ens3:1
sudo ip addr add 10.0.1.9/29 dev ens3 label ens3:2

※割り当てを解除するコマンド
sudo ip addr del 10.0.1.8/29 dev ens3:1
(展開ください) $ ip addr show 結果
[opc@allocate-cidr-nicins ~]$ ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3:  mtu 9000 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:00:17:11:73:55 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.1.2/24 brd 10.0.1.255 scope global dynamic ens3
       valid_lft 83172sec preferred_lft 83172sec
    inet 10.0.1.8/29 scope global ens3:1
       valid_lft forever preferred_lft forever
    inet 10.0.1.9/29 scope global secondary ens3:2
       valid_lft forever preferred_lft forever
    inet6 fe80::17ff:fe11:7355/64 scope link 
       valid_lft forever preferred_lft forever
(展開ください) $ ifconfig 結果
[opc@allocate-cidr-nicins ~]$ ifconfig
[opc@allocate-cidr-nicins ~]$ ifconfig
ens3: flags=4163  mtu 9000
        inet 10.0.1.2  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::17ff:fe11:7355  prefixlen 64  scopeid 0x20
        ether 02:00:17:11:73:55  txqueuelen 1000  (Ethernet)
        RX packets 46130  bytes 314825958 (300.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17435  bytes 9186323 (8.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens3:1: flags=4163  mtu 9000
        inet 10.0.1.8  netmask 255.255.255.248  broadcast 0.0.0.0
        ether 02:00:17:11:73:55  txqueuelen 1000  (Ethernet)
ens3:2: flags=4163  mtu 9000
        inet 10.0.1.9  netmask 255.255.255.248  broadcast 0.0.0.0
        ether 02:00:17:11:73:55  txqueuelen 1000  (Ethernet)
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2372  bytes 5377899 (5.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2372  bytes 5377899 (5.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ping結果
[opc@254-ins ~]$ ping 10.0.1.8
PING 10.0.1.8 (10.0.1.8) 56(84) bytes of data.
64 bytes from 10.0.1.8: icmp_seq=1 ttl=64 time=0.588 ms
64 bytes from 10.0.1.8: icmp_seq=2 ttl=64 time=0.396 ms
^C
--- 10.0.1.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1061ms
rtt min/avg/max/mdev = 0.396/0.492/0.588/0.096 ms

[opc@254-ins ~]$ ping 10.0.1.9
PING 10.0.1.9 (10.0.1.9) 56(84) bytes of data.
64 bytes from 10.0.1.9: icmp_seq=1 ttl=64 time=0.482 ms
64 bytes from 10.0.1.9: icmp_seq=2 ttl=64 time=0.369 ms
^C
--- 10.0.1.9 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1023ms
rtt min/avg/max/mdev = 0.369/0.425/0.482/0.060 ms

割り当てしたCIDR IPアドレスに対してpingの疎通確認ができました。

10,000個以上のIPアドレスをアタッチしてみる

ここまで仕組みを理解したので、あとは繰り返すだけです。
OCI側でサブネットに10.3.0.0/16(※)のCIDRを割り当てて、インスタンスのVNICに10.3.64.0/18のCIDR IPアドレスをアタッチします。
また、OS側はスクリプトを作って回せば完成です。
18rangecidr.png

実際、VNICに10.3.64.0〜10.3.127.254/18のIPアドレス(16,383個)を割り当てて、pingレベルで疎通できることを確認できました。

■ まとめ

「IP CIDRアドレス」を使えば一度にたくさんのIPアドレス割り当てすることを理解しました。

VCN内に作成できるプライベートIPオブジェクトの最大数は64,000 と書いてありますが、「プライベートIPオブジェクト」なので膨大な数のIPアドレスを割り当てできそうです。

現時点でのユースケースとしては、KubernetesのPodのように、1つのpodに1つのIPアドレスを割り当てる前提で、膨大なPodが存在し膨大な数のIPアドレスが必要となる場合に、今回のアップデートが有効です。

他にもIPv6の膨大なIPを使ったユースケースがあれば探してみたいです。


■参考ブログ・注釈

参考ブログ:Announcing OCI IP CIDR Addresses for VNICs

(※)VCNとサブネットに対してもCIDRを16個まで割り当てできるようになったため、新しいCIDR 10.3.0.0/16を追加

tmpcidr.png

以上です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?