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スイッチのように動作します。
- ルーターからのRAパケットが物理NIC(
enp1s0
)に届きます。enp1s0
はブリッジvmbr1
のメンバーなので、パケットをブリッジに渡します。- ブリッジの主な仕事は、受け取ったパケットを他のポート(仮想マシンのNICなど)に転送(フォワード)することです。
- このとき、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

最近のコメント