ProxmoxでIPv6を有効にする(ホスト、コンテナ、VM)

概要

ProxmoxでIPv6を有効化するとき意外とてこずったのでメモ

手順

RAパケットが流れてくるか?

ちゃんとRAパケットが流れてきているかまず確認。このときのNICは物理ポートで実行してください。

tcpdump -i enp1s0 -n 'icmp6 and ip6[40] == 134'
root@pve01:~# tcpdump -i enp1s0 -n 'icmp6 and ip6[40] == 134'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:21:04.017686 IP6 fe80::1 > ff02::1: ICMP6, router advertisement, length 64
19:21:07.225805 IP6 fe80::1 > ff02::1: ICMP6, router advertisement, length 64

ブリッジにIPを割り当てる人は見て

multicast_snoopingを無効にしないとRAを受け取れません。以下Gemini様の解説

enp1s0 (物理NIC)ではRAがキャプチャできるのに、vmbr1 (ブリッジ)ではキャプチャできない」

この現象は、Linuxのブリッジ機能の典型的な挙動です。

なぜそんなことが起きるのか?

簡単に言うと、Linuxのブリッジ(vmbr1)は、デフォルトではレイヤー2スイッチのように動作します。

  1. ルーターからのRAパケットが物理NIC(enp1s0)に届きます。
  2. enp1s0はブリッジvmbr1のメンバーなので、パケットをブリッジに渡します。
  3. ブリッジの主な仕事は、受け取ったパケットを他のポート(仮想マシンのNICなど)に転送(フォワード)することです。
  4. このとき、RAパケットはブリッジを「通過」して他のポートへ流れていきますが、ブリッジ自身(vmbr1インターフェース)が自分宛のパケットとして処理せずに、素通りさせてしまっている状態です。

物理NICでパケットが見えるのにブリッジで見えないのは、この「素通り」が原因です。

解決策:ブリッジにRAパケットを「傍受」させる

この問題を解決するには、「ブリッジを通過するRAパケットを、vmbr1インターフェースが自分の設定のためにちゃんと処理するように」設定を変更する必要があります。

以下の手順で、この問題を解決できる可能性が非常に高いです。


ステップ1: ブリッジのマルチキャスト設定を変更する

RAパケットは「マルチキャスト」という方式で送信されます。ブリッジがこのマルチキャストを賢く処理しようとして(MLD Snooping)、結果的に自分自身へのパケットを見失うことがあります。

まずはこの機能を無効にして、RAパケットが確実にブリッジに届くようにします。

echo 0 > /sys/class/net/vmbr1/bridge/multicast_snooping

ブリッジインターフェースでRAが受け取れるか確認します

tcpdump -i vmbr1 -n 'icmp6 and ip6[40] == 134'

設定

/etc/network/interfaces

auto vmbr1
iface vmbr1 inet static
        address 192.168.100.115/24
        gateway 192.168.100.1
        bridge-ports enp1s0 enp2s0 enp3s0 enp4s0
        bridge-stp off
        bridge-fd 0

iface vmbr1 inet6 auto
        accept_ra 2
        post-up echo 0 > /sys/class/net/vmbr1/bridge/multicast_snooping
        post-up sysctl -w net.ipv6.conf.$IFACE.accept_ra=2

設定後は再起動しないとダメでした。

コンテナ、VM

Proxmox上のコンテナとVMは IPv6: SLAACを選択すればOK

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index