2017年7月29日土曜日

FreeBSDでネットワークインターフェイスに複数のIPアドレスを設定するときの注意

先日、
FreeBSD 11で10GbE ネットワークカードを使う 
http://www.sakashita-net.jp/2017/07/freebsd-1110gbe.html
でFreeBSDでQLE3440-SR(QLogic NetXtreme II/BCM 57840)という10GbE ネットワークカードを使う話を書きました。

このネットワークインターフェイスに複数のアドレスを設定しようとしたときに、少し困ったのでそのようすを紹介します。

以前の1GbEのネットワークインターフェイス(bge0)では/etc/rc.confに以下にように設定して、うまくいっていました。
ifconfig_bge0="inet 172.40.0.10 netmask 255.255.0.0"
ifconfig_bge0_aliases="\
       inet 172.40.0.11 netmask 255.255.0.0 \
       inet 172.40.0.12 netmask 255.255.0.0 \
       inet 172.40.0.13 netmask 255.255.0.0"

defaultrouter="172.40.0.1"
これと同じように10GbEのネットワークインターフェイス(bxe0)でも設定してみました。
ifconfig_bxe0="inet 172.40.0.10 netmask 255.255.0.0"
ifconfig_bxe0_aliases="\
       inet 172.40.0.11 netmask 255.255.0.0 \
       inet 172.40.0.12 netmask 255.255.0.0 \
       inet 172.40.0.13 netmask 255.255.0.0"

defaultrouter="172.40.0.1"
すると、172.40.0.11〜172.40.0.13のアドレスだけが設定され、172.40.0.10は設定されません。そこで、以下のようにするとうまくいきます。
ifconfig_bxe0_aliases="\
       inet 172.40.0.10 netmask 255.255.0.0 \
       inet 172.40.0.11 netmask 255.255.0.0 \
       inet 172.40.0.12 netmask 255.255.0.0 \
       inet 172.40.0.13 netmask 255.255.0.0"

defaultrouter="172.40.0.1"
rc.confファイルの眺めていると、原因がわかりました。この設定の先で、
ifconfig_bxe0_ipv6="inet6 accept_rtadv"
と書くべきところを
ifconfig_bxe0="inet6 accept_rtadv"
と書いてしまっていました(_ipv6が抜けてしまっていた)。そのため、最初に書いた
ifconfig_bxe0="inet 172.40.0.10 netmask 255.255.0.0"
の設定が失われてしまうようです。

FreeBSDのrc.confは、書きやすい反面、間違ったことを書いた場合の原因究明が難しく感じます。