
2026/02/23 7:42
**FreeBSD 15 の新しいブリッジ機能** FreeBSD 15 では、パフォーマンスの向上・設定の簡易化・安定性の強化を実現したスリム化されたブリッジ実装が導入されました。 --- ### 主な改善点 - **低レイテンシ** を実現するために最適化されたパケット処理経路。 - ブリッジインターフェース上で直接 VLAN タギングをサポート。 - 帯域幅やキュー制限のチューニング用 `sysctl` 設定が簡素化。 - ブリッジ接続セグメント間で IPv6 フォワーディングを組み込みでサポート。 --- ### インストールと設定手順 1. **ブリッジモジュールの読み込み** ```sh kldload bridge ``` 2. **ブリッジインターフェース作成**(例:`bridge0`) ```sh ifconfig bridge0 create ``` 3. **メンバーインターフェースの追加** (`em0`, `em1`, …) ```sh ifconfig bridge0 addm em0 addm em1 up ``` 4. **IP アドレスを割り当てる(管理用に任意)** ```sh ifconfig bridge0 inet 192.168.10.1/24 ``` --- ### よくある利用ケース - L2 仮想化(例:KVM ゲストが同一ネットワークセグメントを共有) - 複数のアップリンクで冗長構成 - 追加ルーティング不要で VLAN 分割をシンプルに実現 --- ### パフォーマンス向上のヒント - NIC がサポートしている場合は `bridge_hwfilter` を有効化し、ハードウェアアクセラレーテッドフィルタリングを利用。 - トラフィックプロファイルに合わせて `bridge_maxframe` と `bridge_mtu` の `sysctl` 値を調整。 - `netstat -e` や `sockstat -4` でブリッジ統計情報をモニタリング。 --- ### トラブルシューティング - ブリッジ上のインターフェースに IP アドレス競合がないか確認。 - カーネルログ(`dmesg`)で「bridge」に関するエラーを探す。 - `ifconfig bridge0` でメンバー接続と状態を確認。 --- これらの手順を踏むことで、FreeBSD 15 の新ブリッジ機能を活用し、高性能かつ信頼性の高いネットワーク環境を構築できます。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
FreeBSD 15は、従来のVLANごとのブリッジモデルを廃止し、
vlanfilter フラグで複数のタグ付きまたはタグなし VLAN をホストできる単一の多機能ブリッジに置き換えました。新設計では個別のブリッジが不要になり設定が簡素化されます。sysctl net.link.bridge.member_ifaddrs は、ブリッジメンバー上のレイヤー3アドレスをソフト非推奨にし(FreeBSD 16.0‑RELEASEで削除予定)、VLAN フィルタリングが有効でない場合はタグ付きメンバーを追加すると
ifconfig: BRDGSIFVLANSET ix1: Invalid argument (extended error VLAN filtering not enabled)
というエラーになります。
最小構成例:
ifconfig_ix1="up -tso4 -tso6 …" cloned_interfaces="bridge0" ifconfig_bridge0="vlanfilter addm ix1 tagged 2,3,128"
VNET ジャイルは
jib スクリプト(またはカスタム /scripts/vnetif)を使い、epair デバイスを作成して正しい VLAN タグでブリッジに接続できます。カーネルは現在 epair 用の安定した MAC 生成 (net.link.epair.ether_gen_addr) を提供しているため、jib スクリプトの MAC 安定化ロジックは不要です。例として /scripts/vnetif は epair を作成し、IPv6 link‑local を無効にし、ポート名を付け、一方の側をタグなし VLAN 2 としてブリッジへ追加します。
Bhyve VM では手動でタップインタフェース(例:
tap133)が事前に作成され、ブリッジに追加されます (ifconfig bridge0 addm tap133 untagged 2)。VM 設定はこれらのタップを参照しますが、新しいブリッジ/VLAN モデルへのネイティブサポートはありません。FreeBSD 15 の変更後は network0_mac フィールドが無効になるため、タップインタフェース作成時に安定した MAC アドレスを設定する必要があります。
総じて、新しいブリッジ+VLAN デザインは従来の VLAN ごとのアプローチよりも設定が簡単になり、カスタムスクリプトへの依存が減少し、ギガビット速度でのパフォーマンスが向上します(10 Gbps でも潜在的にメリットがあります)。残る懸念点としては、ルーター・オン・ア・ストック構成との互換性があります。
本文
FreeBSD 15 では、VLAN をネイティブにサポートし、メンバーインタフェース上のレイヤー 3 アドレスをソフト‑デプリケートする新しいブリッジ実装が導入されました。これによりブリッジは本物のハードウェアスイッチと同様に振る舞います。
net.link.bridge.member_ifaddrs という sysctl がこの挙動を制御しており、FreeBSD 16.0‑RELEASE で削除されます(ゼロに設定した場合と同じです)。
🚧 「ルーター・オン・ア・スティック」構成との互換性については懸念がありますが、これは将来の課題です。
主なメリット
- 一つのブリッジで全 VLAN を扱える
- パケット処理が最適化されており、多数のメンバーインタフェースを持つ旧設計よりも高速
私のハードウェアではギガビットトラフィックに対しては影響はほとんどありませんが、10 Gb/s のラインレートを目指す場合には顕著になる可能性があります。
従来のブリッジ
旧設計では VLAN ごとに別々のブリッジが必要でした。
- 特定 VLAN 用にブリッジを作成
- 物理インタフェースから VLAN インタフェースを作成
- VLAN インタフェースをブリッジに接続
このようにすると、すべてのブリッジメンバーがその VLAN 上で通信できるようになります。VLAN が増えると管理が煩雑になり、ジャイルが複数 VLAN を跨いで通信する際には特に面倒です。
例:rc.conf
の一部
rc.conf# Bhyve と VNET ifconfig_ix1="up -tso4 -tso6 \ -vlanhwfilter -vlanmtu -vlanhwtso -vlanhwtag -vlanhwcsum -lro" vlans_ix1="vlan2 vlan3 vlan128" create_args_vlan2="vlan 2" create_args_vlan3="vlan 3" create_args_vlan128="vlan 128" cloned_interfaces="bridge0 bridge1 bridge2" ifconfig_bridge0_name="vlan2bridge" ifconfig_vlan2bridge="addm vlan2 up" ifconfig_bridge1_name="vlan3bridge" ifconfig_vlan3bridge="addm vlan3 up" ifconfig_bridge2_name="vlan128bridge" ifconfig_vlan128bridge="addm vlan128 addm"
新しいブリッジ
新実装では、単一のブリッジを使い、各メンバーに対してタグ付き/未タグ付き VLAN を指定できます。
# Bhyve と VNET ifconfig_ix1="up -tso4 -tso6 \ -vlanhwfilter -vlanmtu -vlanhwtso -vlanhwtag -vlanhwcsum -lro" cloned_interfaces="bridge0" ifconfig_bridge0="vlanfilter addm ix1 tagged 2,3,128"
これだけです。
重要: ブリッジに
vlanfilter フラグを付けることが必須です。設定しないと
ifconfig: BRDGSIFVLANSET ix1: Invalid argument (extended error VLAN filtering not enabled)
というエラーになります。
VNET ジャイル
旧公式
/usr/share/examples/jails/jib スクリプトは epair(4) デバイスを作成していました。私はスクリプトを簡素化し、安定した MAC アドレス管理機能を追加しました。
webserver { exec.prestart += "jib addm $name vlan2"; exec.poststop = "jib destroy $name"; vnet; vnet.interface = "e0b_$name"; }
スクリプトはジャイルのホスト ID を使って
ether_gen_addr(9) で安定した MAC アドレスを生成しますので、追加設定は不要です。
スタブルな epair
名とブリッジへの接続
epair#!/bin/sh # /scripts/vnetif set -eu ENAME=$1 # ジャイル名 BRIDGE=$2 # ブリッジ名(例: bridge0) VLAN=$3 # VLAN 番号 NEW_EPAIR=$(ifconfig -D epair create -vlanhwfilter up) EPAIR_NUM=${NEW_EPAIR##epair} EPAIR_NUM=${EPAIR_NUM//[a]/} # IPv6 link‑local を無効化;レイヤー 3 はブリッジメンバーに許可されない ifconfig ${NEW_EPAIR} inet6 ifdisabled -auto_linklocal -accept_rtadv no_radr # epair の両端を名前変更 ifconfig epair${EPAIR_NUM}a name e0a_${ENAME} ifconfig epair${EPAIR_NUM}b name e0b_${ENAME} # 正しい VLAN タグでブリッジに追加 ifconfig ${BRIDGE} addm e0a_${ENAME} untagged ${VLAN}
ジャイル設定は次のようになります。
webserver { exec.prestart += "/scripts/vnetif $name bridge0 2"; vnet; vnet.interface = "e0b_$name"; }
epair インタフェースはジャイル停止時に自動で破棄されるので、exec.poststop は不要です。
Bhyve VM
Bhyve の
vm-bhyve ツールは現状、新しいブリッジ+VLAN 機能をサポートしていません。対策としては、タップインタフェースを事前に作成し
/etc/rc.local でブリッジへ追加します。
VM 設定例
loader="grub" cpu="2" memory="4G" network0_type="virtio-net" network0_switch="bridge0" # 手動で作成したブリッジ network0_device="tap133" # 事前に作成したタップインタフェース disk0_type="nvme" disk0_name="disk0.img" uuid="2109c019-9fd0-11f0-9ab1-d05099db8057" network0_mac="58:9c:fc:0f:74:60" # 必要ならここで MAC を固定 disk1_type="ahci-cd" disk1_name="seed.iso" disk1_dev="file"
/vm-bhyve/.config/system.conf
switch_list="bridge0" type_bridge0="manual" bridge_bridge0="bridge0"
(例)/etc/rc.local
# VM such-and-such 用 ifconfig tap129 create up ifconfig bridge0 addm tap129 untagged 2
この方法は機能しますが、やや手間がかかります。より良い解決策が出たら更新予定です。
結論
FreeBSD 15 の新ブリッジ+VLAN デザインにより、単一のブリッジで多くの VLAN を簡潔に管理できます。
vlanfilter フラグを付けることで安定した epair 管理(VNET ジャイル)や手動タップ設定(Bhyve VM)が可能になり、公式ツールが対応するまで迅速に導入できます。