本サイトではアフィリエイト広告を利用しています
FreeBSD ブリッジ作成

PC-UNIX ネットワーク 設定

FreeBSD でブリッジを速攻で作るには?

2020年6月14日

FreeBSD マシンを構築した際に、Wi-Fi アダプタと有線LAN アダプタとの間でデータをやり足りしたいというケースがたまにあります。

FreeBSD マシンがネットに繋がっていて、テスト用のクライアントマシンにはネット環境がないような場合、FreeBSD に繋いでネット環境を共有したい、あるいは何らかの理由でネットワークを分割することができない場合などです。

設定環境


FreeBSD INSPIRON 12.1-RELEASE FreeBSD 12.1-RELEASE r354233 GENERIC amd6

FreeBSD のブリッジ作成は以前からサポートされていますが、5.*-RELEASE 頃の設定方法とは仕様が異なっています。以前は /etc/sysctl.conf に net.link.ether.bridge.enable=1 などの変数を設定するのが普通でしたが、最近のバージョンは ifconfig で簡単に設定できます。
最近のバージョンは sysctl を使いませんので注意です。

つまり、ネットワークカードをたくさん差したマシンでも、ネットワークをサブネットに分けなくても、楽に設定できるので是非活用したい機能です。

ブリッジテスト図

FreeBSD ブリッジ図

ここでは、実験的に FreeBSD マシンの

無線 LAN(wlan0):192.168.1.10/24
有線 LAN(re0):192.168.100.10/24

をブリッジします。
有線 LAN はプロバイダ提供の無線ルーターから DHCP でアドレスを拾ってきます。
無線 LAN は Windows マシンに直接接続し、一昔前ならクロスケーブルを使うようなケースです。PC に FreeBSD マシンの中にある大きいファイルをコピーするために、有線 LAN を利用します。同時に、PC からインターネットにアクセスするときに、有線 LAN、ブリッジ、無線 LAN、インターネットへと出て行く設定にします。

常識的には、図の無線 LAN と有線 LAN は逆なのが普通ですが、ここでは唯一無線でインターネットに繋がっている FreeBSD マシンに有線接続してインターネットに出ていくケースを考えます。その他のパターンは、ページを改めて構築してみます。

ifconfig でインターフェースを複製します

 bash
# ifconfig bridge create
bridge0
# ifconfig bridge0
bridge0: flags=8802 metric 0 mtu 1500
        ether 02:db:84:40:e9:00
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
        groups: bridge
        nd6 options=9

ifconfig bridge create とやると、bridge インターフェイスが作成されます。番号は0番から順番に振られますが、意識的に

 bash
# ifconfig bridge1 create
bridge1

と1番から作成するようなこともできます。
maxaddr 2000 は、最大 2,000 個のMAC アドレスをブリッジが転送先として保持することができるという意味です。timeout 1200 は、最大 1,200 秒後までその情報を保持すると言うことを示しています。

ブリッジインターフェースを有効にします

ここでは、有線と無線のアダプタをあらかじめ有効にしておく必要があります。
無線の方は起動時に、無線ルーターの DHCP からアドレスを拾ってくるようになっているので、自動的に有効になっていますが、有線の方は他の有線 LAN 搭載のマシンに接続しただけですので、自前で IP アドレスやらを設定してやる必要があります。

 bash
# ifconfig re0 inet 192.168.100.10/24
# ifconfig re0 up
# ifconfig re0
re0: flags=8943 metric 0 mtu 1500
        options=82099
        ether a4:1f:72:11:5b:32
        inet 192.168.100.10 netmask 0xffffff00 broadcast 192.168.100.255
        media: Ethernet autoselect (1000baseT )
        status: active
        nd6 options=29

有線 LAN アダプタ(re0)に IP アドレス 192.168.100.10 を設定しました。無線 LAN 側についてはマシン起動時に有効にされたそのままの設定を使います。

 bash
# ifconfig bridge0 up
# ifconfig bridge0 addm re0
# ifconfig bridge0 addm wlan0

ブリッジインターフェースを有効にして、アダプタ re0 と wlan0 をブリッジしました。
これで、re0 と wlan0 との間の Ethernet フレームが相互に転送されるようになりました。
動作が確認できれば、今後はコマンドを分けずにまとめることも可能です。チェック段階では、エラーが出た場合の特定がやさしくなるので、小刻みにコマンドを分けました。

最後に、ブリッジインターフェースにも IP アドレス(IPv4)を設定しておきます(しなくても動きます)。

 bash
# ifconfig bridge0 inet 192.168.100.1/24

ここでは、IPv4 の 192.168.100.1 マスク 24 を設定しました。

ブリッジインターフェースにも IPv6 アドレスを設定することもできます(しなくても問題ありません)。

 bash
# ifconfig bridge0 inet6 fe80::ed87:66e3:4fb2:1 prefixlen 64 alias

ここではローカルアドレスを設定しました。
試しに、自分にピン打ち(ping)して動作確認です。

 bash
# ping6 fe80::ed87:66e3:4fb2:1%bridge0
PING6(56=40+8+8 bytes) fe80::ed87:66e3:4fb2:1%bridge0 --> fe80::ed87:66e3:4fb2:1%bridge0
16 bytes from fe80::ed87:66e3:4fb2:1%bridge0, icmp_seq=0 hlim=64 time=0.062 ms
16 bytes from fe80::ed87:66e3:4fb2:1%bridge0, icmp_seq=1 hlim=64 time=0.045 ms
16 bytes from fe80::ed87:66e3:4fb2:1%bridge0, icmp_seq=2 hlim=64 time=0.044 ms
16 bytes from fe80::ed87:66e3:4fb2:1%bridge0, icmp_seq=3 hlim=64 time=0.062 ms
16 bytes from fe80::ed87:66e3:4fb2:1%bridge0, icmp_seq=4 hlim=64 time=0.047 ms
^C

ピンは IPv6 のもの(ping6)を使います。
IPv6 はアドレスのみならずインターフェイスを指定して送る必要があるため、

 bash
# ping6 fe80::ed87:66e3:4fb2:1%bridge0

赤字の %bridge0 を省いてしまわないように注意しましょう。

FreeBSD 起動時に自動的にブリッジが有効になる設定をしておく

この例では、有線 LAN 接続で FreeBSD マシンに繋いだ PC が FreeBSD マシンの Wi-Fi アダプタ経由でネットサーフィンをするような場合に有効な設定になります。
特に有線 LAN から接続してきて、他のネットワークに出て行かないようなケース(単に有線で FreeBSD マシンのコンソールに入るなどの例)では、ブリッジの設定はしなくても実用上問題になりません。

いつもの "/etc/rc.conf" にスタートアップを書き込む

/etc/rc.conf をエディタで開きます。

 
ifconfig_re0="inet 192.168.100.10 netmask 255.255.255.0"
ipv4_addrs_re0="192.168.100.10/24"
cloned_interfaces="bridge0"
ifconfig_re0="up"
#ifconfig_wlan0="up"
#ifconfig_bridge0="addm re0 addm wlan0 up"
autobridge_interfaces="bridge0"
autobridge_bridge0="re0 wlan0"

上の内容を書き込む(追記しておく)ことで、ブリッジが起動時に有効になります。

以上、今後ルーターボックスや VLAN を実現するための動作基礎確認と設定見極めです。
VLAN 、Jail 環境で実践的に使っていきます。

-PC-UNIX, ネットワーク, 設定
-, ,