ネットワークブリッジ

提供: ArchWiki
ブリッジから転送)
ナビゲーションに移動 検索に移動

関連記事

ブリッジは複数のネットワークセグメントをまとめるのに使われる一種のソフトウェアです。ブリッジは仮想ネットワークスイッチのように動作し、透過的に働きます (他のマシンはブリッジの存在を知る必要がありません)。ブリッジには実際のデバイス (例: eth0) と仮想デバイス (例: tap0) を接続することができます。

この記事では少なくとも一つのイーサネットデバイスを含むブリッジを作成する方法を説明します。QEMU のブリッジモードやソフトウェアベースのアクセスポイントの設定などに役立ちます。

ブリッジの作成

ブリッジを作成する方法は複数存在します。

ネットワークブリッジを作成するには、いくつかの方法があります。このセクションでは、少なくとも 1 つのイーサネットインターフェイスを備えたブリッジを設定するために必要な手順の概要を説明します。これは、QEMU のブリッジモード、ソフトウェアベースのアクセスポイントの設定などに役立ちます。

警告: リモートサーバー上にブリッジを作成し、メインのネットワークインターフェイスをブリッジに追加する場合、ブリッジにインターフェイスを追加する前に、まずメインのネットワークインターフェイスのIPアドレスをブリッジに追加し、ブリッジをセットアップし、バックアップデフォルトルートをセットアップすることを確認してください。そうしないと、サーバーはネットワーク接続を失い、SSH でログインできなくなります。

iproute2 を使う

このセクションでは (base メタパッケージに含まれている) iproute2 パッケージの ip ツールを使ってネットワークブリッジを管理します。

新しいブリッジを作成して状態を up に変更:

# ip link add name bridge_name type bridge
# ip link set dev bridge_name up

ブリッジにインターフェイス (例: eth0) を追加するには、まずインターフェイスをプロミスキャスモードに設定して立ち上げておく必要があります:

# ip link set dev eth0 promisc on
# ip link set dev eth0 up

インターフェイスの master を bridge_name に設定することでブリッジにインターフェイスを追加します:

# ip link set dev eth0 master bridge_name

既存のブリッジと関連付けられたインターフェイスを表示するには、bridge ユーティリティを使って下さい (iproute2 に含まれています)。詳しくは man bridge を参照。

# bridge link show

ブリッジを削除するときは、最初に全てのインターフェイスを削除します。プロミスキャスモードをオフにして down に設定してから元の状態に戻してください。

# ip link set eth0 promisc off
# ip link set eth0 down
# ip link set dev eth0 nomaster

ブリッジを空にしたら、削除することができます:

# ip link delete bridge_name type bridge

メインネットワークインターフェースの追加

これをリモートサーバーで実行しており、メイン ネットワークインターフェイス (例: eth0) をブリッジに追加する計画がある場合は、まず現在のネットワークステータスをメモします:

$ ip address show eth0
$ ip route show dev eth0

この例の関連情報は次のとおりです:

  • 添付されている IP アドレス eth0: 10.2.3.4/8
  • デフォルトゲートウェイ: 10.0.0.1
  • ブリッジネーム: br0

ブリッジの初期設定:

# ip link add name br0 type bridge
# ip link set dev br0 up
# ip address add 10.2.3.4/8 dev br0
# ip route append default via 10.0.0.1 dev br0

次に、これらのコマンドを続けて実行します。これらをスクリプトファイルに配置して、スクリプトを実行することをお勧めします:

# ip link set eth0 master br0
# ip address del 10.2.3.4/8 dev eth0

説明:

  • eth0 がブリッジに追加されると、ルーティングには使われなくなります。{ic|br0}} がその代わりになるので、IP が必要です、デフォルトルートがアタッチされている必要があります。
  • インターフェイスを br0 に追加する前に eth0 の IP アドレスを削除することはできません。
  • しかし、eth0 上の IP アドレスを素早く削除する必要があります。
  • Linux は同じルーティングテーブル上に 2 つのデフォルトルートを持つことができません。
  • eth0 の IP アドレスが削除されると、それに接続されていたデフォルトルートも自動的に削除されます。

bridge-utils を使う

このセクションでは (公式リポジトリの) bridge-utils パッケージに含まれている brctl ツールを使ってネットワークブリッジを管理します。オプションの完全な説明は man brctl を見て下さい。

新しいブリッジを作成:

# brctl addbr bridge_name

ブリッジにデバイスを追加 (例: eth0):

# brctl addif bridge_name eth0
ノート: ブリッジにインターフェイスを追加すると、そのインターフェイスは既存の IP アドレスを失います。リモートで接続するのに使っているインターフェイスをブリッジに追加すると、切断されてしまいます。この問題は、ブリッジを作成するスクリプトを作成してシステムの起動時に実行することで回避することができます。

現在のブリッジと接続されているインターフェイスを表示:

$ brctl show

ブリッジデバイスを立ち上げる:

# ip link set up dev bridge_name

ブリッジを削除、先にブリッジを down に設定する必要があります:

# ip link set dev bridge_name down
# brctl delbr bridge_name

メインネットワークインターフェースの追加

まず、現在のネットワーク状態を記録します:

$ ip address show eth0
$ ip route show dev eth0

この例の関連情報は次のとおりです:

  • 添付されている IP アドレス eth0: 10.2.3.4/8
  • デフォルトゲートウェイ: 10.0.0.1
  • ブリッジネーム: br0

ブリッジの初期設定:

# brctl addbr br0
# ip address add 10.2.3.4/8 dev br0
# ip link set dev br0 up

次に、これらのコマンドを続けて実行します。これらをスクリプトファイルに配置して、スクリプトを実行することをお勧めします。

# brctl addif br0 eth0
# ip address del 10.2.3.4/8 dev eth0

netctl を使う

netctl でブリッジ接続を見て下さい。

systemd-networkd を使う

systemd-networkd#ブリッジインターフェイス を見て下さい。

NetworkManager を使う

Gnome の NetworkManager がブリッジを作成することができますが、ブリッジへの自動接続はいまのところ行いません。Network Settings を開いて、Bridge タイプのインターフェイスを新しく追加し、新しいブリッジ接続を追加して、ブリッジに接続するデバイスの MAC アドレスを選択してください。

接続するデバイスの UUID を確認 (デフォルトでは "bridge0 slave 1" という名前になっています):

$ nmcli connection

接続を有効化:

$ nmcli con up <UUID>

ブリッジに追加したデバイスが NetworkManager のデフォルトインターフェイスとして自動的に接続される場合、Network Settings の歯車をクリックして、"Identity" の "Connect automatically" のチェックを外すことで無効化できます。

IP アドレスを割り当てる

ブリッジが完全に設定されていれば、IP アドレスを割り当てることができます:

iproute2 を使用する場合

# ip addr add dev bridge_name 192.168.66.66/24

NetworkManager を使用する場合

目的のアドレスを指定します:

# nmcli connection modify Connection ipv4.addresses desired_IP

DNS サーバーをセットアップします (これにより、変更を適用した後にページを読み込めなくなることも回避されます):

# nmcli connection modify Connection ipv4.dns DNS_server

IP アドレスを静的に設定します:

# nmcli connection modify Connection ipv4.method manual

変更を適用します:

# nmcli connection up Connection

ヒントとテクニック

ブリッジ上の無線インターフェイス

ブリッジに無線インターフェイスを追加するには、まずアクセスポイントに無線インターフェイスを指定するか、または hostapd でアクセスポイントを起動する必要があります。そうしないとブリッジに無線インターフェイスは追加されません。

Debian wiki の Bridging with a wireless NIC も参照。

ブリッジ自体のトラフィックを高速化する

状況によっては、ブリッジはブリッジボックスとして機能するだけでなく、他のホストと通信することもできます。ブリッジポートに到着し、ブリッジ ボックス自体を宛先とするパケットは、デフォルトで、論理ブリッジポートを入力デバイスとして iptables INPUT チェーンに入ります。これらのパケットは、ネットワークコードによって 2 回キューに入れられます。1 回目は、ネットワークデバイスによって受信された後にキューに入れられます。 2 回目は、ブリッジコードが宛先 MAC アドレスを調べて、それがローカル宛のパケットであると判断した場合、フレームを上位のプロトコルスタックに渡します。[1]

ローカル宛先のパケットを 1 回だけキューに入れる方法は、ブルートテーブルの BROUTING チェーンでパケットをブルートすることです。br0 には IP アドレスがあり、br0 のブリッジポートには IP アドレスが無い場合。次のルールを使用すると、ローカルに送信されるすべてのトラフィックが 1 回だけキューに入れられるようになります:

# ebtables -t broute -A BROUTING -d $MAC_OF_BR0 -p ipv4 -j redirect --redirect-target DROP

ブリッジからの応答は br0 デバイス経由で送信されるため (ルーティングテーブルが正しく、すべてのトラフィックが br0 経由で送信されると仮定します)、パケットが 2 回キューに入れられることによるパフォーマンスの低下がなく、すべてが正常に動作し続けます。

ブリッジポートの MAC アドレスはブリッジデバイスの MAC アドレスと必ずしも一致しないため、リダイレクトターゲットが必要になります。ブリッジ ボックス宛てのパケットはブリッジ br0 の宛先 MAC アドレスと同じ宛先 MAC アドレスを持つため、その宛先アドレスをブリッジポートの宛先アドレスに変更する必要があります。

トラブルシューティング

ブリッジ設定後にネットワークが動作しない

ブリッジに追加されたインターフェイス (例: eth1) からすべての IP アドレスとルートを削除し、代わりにこれらのパラメータをブリッジに設定すると役立つ場合があります。

まず、eth1 に対して dhcpcd インスタンスが実行されていないことを確認してください。実行されていない場合、削除されたアドレスが再割り当てされる可能性があります。

eth1 インターフェースからアドレスとルートを削除します:

# ip addr del address dev eth1
# ip route del address dev eth1

ここで、以前に設定したブリッジの IP アドレスとルートを設定する必要があります。これは通常、このインターフェイスの DHCP クライアントを開始することによって行われます。それ以外の場合は、ネットワーク設定 を参照して手動設定を行ってください。

ブリッジ設定後、ホストされたサーバーでネットワークが動作しない

ブリッジの MAC アドレスは、サーバーが通常使用するネットワークカードの MAC アドレスと必ずしも同じではないため、サーバープロバイダーがブリッジから送信されるトラフィックをドロップし、ブリッジング時に接続が失われる可能性があります (サーバーのイーサネットインターフェイスなど)。したがって、ホストされているサーバーでは、イーサネットインターフェイスの MAC アドレスのクローンを作成するようにブリッジを設定することが必要になる場合があります。

通常接続に接続後、ブリッジ接続に接続できない

Network Manager アプレットで、通常のイーサネット/ワイヤレス接続 (ブリッジスレーブ接続ではない) があり、最初にそれに接続し、次にブリッジ接続に接続しようとすると (最初に通常の接続から切断するかどうかに関係なく)、接続できません。何らかの理由で、自動接続チェックボックスが有効になっている場合でも、ブリッジスレーブ接続 (ネットワーク アプレットにリストされていない) はアクティブになりません。

回避策は、ターミナル経由で手動でアクティブ化することです:

nmcli connection up br1\ slave\ 1

その後、すぐにブリッジ接続が機能します。

参照