[Ubuntu][netplan][network] Ubuntu 18.04 でのnetplanを使用したbondingの設定

AIX、UNIX、LinuxUbuntu
netplan.jpg

Ubuntu 18.04を相変わらずいじっているわけですが、netplanになってから、bridgeインターフェースやbondingインターフェースの設定方法がかなり簡単になっています。

今回はbondingインターフェースをbridgeに所属させる方法を試してみました。

とりあえずnetplanのドキュメントは以下になるでしょう。

物理インターフェースにaliasを設定する

最初にbondingインターフェースについて記述するわけですが、その前に物理インターフェースをまとめて、aliasにします。

network: version: 2 
  ethernets: 
    frontdevs: 
      match: 
        name: enp6s0f[01]

物理インターフェースのenp6s0f0enp6s0f1を、frontdevsとしてグルーピングします。

これにより、後述するインターフェースの組み合わせにおいて、frontdevsと書くだけでenp6s0f0とenp6s0f1の組み合わせのことを指すようになります。

bondingインターフェースの設定

bondingインターフェースは以下のように記述します。

bonds:
  bond0:
    dhcp4: no
    dhcp6: no
    interfaces: [frontdevs]
    parameters:
      mode: balance-rr
      mii-monitor-interval: 1

ここでは、最終的なbridgeインターフェースにアドレスを持たせるので、dhcpなどは設定されないようにします。組み合わせとなるインターフェースは、先に設定したfrontdevsを指定します。

パラメータは、bondingのパラメータを指定します。このあたりは過去のbondingで設定するべきパラメータを指定するだけです。

Descriptions of bonding modes

  • Mode 0
    • balance-rr
  • Mode 1
    • active-backup
  • Mode 2
    • balance-xor
  • Mode 3
    • broadcast
  • Mode 4
    • 802.3ad
    • Prerequisites:
      1. Ethtool support in the base drivers for retrieving the speed and duplex of each slave.
      2. A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode.
  • Mode 5
    • balance tlb
    • Prerequisites:
      • Ethtool support in the base drivers for retrieving the speed of each slave.
  • Mode 6
    • balance alb

Descriptions of balancing algorithm modes

  • layer2 Uses XOR of hardware MAC addresses to generate the hash. This algorithm will place all traffic to a particular network peer on the same slave.
  • layer2+3 Uses XOR of hardware MAC addresses and IP addresses to generate the hash. This algorithm will place all traffic to a particular network peer on the same slave.
  • layer3+4 This policy uses upper layer protocol information, when available, to generate the hash. This allows for traffic to a particular network peer to span multiple slaves, although a single connection will not span multiple slaves.
  • encap2+3 This policy uses the same formula as layer2+3 but it relies on skb_flow_dissect to obtain the header fields which might result in the use of inner headers if an encapsulation protocol is used.
  • encap3+4 This policy uses the same formula as layer3+4 but it relies on skb_flow_dissect to obtain the header fields which might result in the use of inner headers if an encapsulation protocol is used.

The default value is layer2. This option was added in bonding version 2.6.3. In earlier versions of bonding, this parameter does not exist, and the layer2 policy is the only policy. The layer2+3 value was added for bonding version 3.2.2.

bridgeインターフェースの設定

最後にbondingインターフェースが所属する、bridgeインターフェースを指定します。先にbrctlなどで作成しなくても、ここでの設定が有効になることで、自動的にbridgeインターフェースが作成されます。

bridges:
  br0:
    dhcp4: no
    dhcp6: no
    interfaces:
      - bond0
    addresses:
      - 192.168.1.254/24
      - 2001:db8::254/64
    gateway4: 192.168.1.1
    gateway6: 2001:db8::1
    nameservers:
    addresses: [192.168.1.2, 192.168.1.3]
    search: [example.local]

他のインターフェースを指定するのと大きく変わることはありません。

bridgeインターフェースに所属するインターフェースに、先に記述したbond0を指定するだけです。

これにより、frontdevs (enp6s0f0とenp6s0f1) bond0 br0 という、インターフェースを継承?した形での設定ができます。

今まで使用していた/etc/network/interfacesより、だいぶ分かりやすく、書きやすくなっているなぁと個人的には思っています。

設定の有効化

sudo netplan applyで設定を有効にすることで、設定した情報でインターフェースが有効になります。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4: enp6s0f1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
8: enp6s0f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
9: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:b2:8c:2e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.254/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2001:db8::8c2e/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 604618sec preferred_lft 86218sec
inet6 2001:db8::254/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::10aa:24ff:feb2:8c2e/64 scope link
valid_lft forever preferred_lft forever
10: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
$ systemd-resolve --status --no-pager
<略>
Link 9 (br0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.2
192.168.1.3
DNS Domain: example.local
この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました