さくらのクラウドでブリッジネットワークを使う
サーバ
Published: 2022-07-07

※ これはあくまでできますが、本来の利用方法ではありません。
ネタとしてお楽しみください。

さくらのクラウドではブリッジでの接続ができません。

NICのMACアドレスで固定化したものを割り当てたり、任意のものに変更することはできますか?

さくらのクラウドのスイッチは作成したVMのMACアドレス以外のパケットは
VMを出ることができないと推測されます。

VMの中にブリッジを作りLXDのコンテナなどに、そのためルーター+スイッチのIPアドレスや、
スイッチのローカルIPアドレスを直接割り当て 通信することはできません。

通常だとこのような構成になると思います。

しかし、eth0のデバイスについているMACアドレスのみがVMの外側と通信できるため、
この状況ではインターネットに接続できません。

コンテナ1のveth0についているMACアドレスで通信するため、VMの外側に出れない。

そこで、ふと気になったのがVRRPの仮想MACアドレスの扱いです。
VRRPを利用した場合の仮想IPアドレス(VIP)の使用について制限はありますか?

VRID 1~4までが利用できる事になっています。

仮想MACアドレスを使用する場合、以下の4種類のみ使用可能です。
00:00:5e:00:01:01
00:00:5e:00:01:02
00:00:5e:00:01:03
00:00:5e:00:01:04

もしかして、このMACアドレスであれば通信すればVMから出ることが可能ではないか?
ということで試してみることにします!

network:
  ethernets:
    eth0:
      dhcp4: 'no'
      dhcp6: 'no'
  bridges:
    br0:
      interfaces: [ eth0 ]
      macaddress: <eth0のMACアドレス>
      addresses:
        - XXX.XXX.XXX.5/29
      dhcp4: 'no'
      dhcp6: 'no'
      gateway4: XXX.XXX.XXX.1

とりあえず、br0を作ります。

br0につないだコンテナを作ります。

lxd のdefault profileでbr0に接続されるようにしています。

devices:
  eth0:
    nictype: bridged
    parent: br0
    type: nic

普通にコンテナにもネットワークの設定をします。

# lxc launch images:ubuntu/22.04 c1
# lxc exec c1 bash
root@c1:~# cat << _EOF_ > /etc/netplan/10-lxc.yaml
network:
  ethernets:
    eth0:
      dhcp4: 'no'
      dhcp6: 'no'
      addresses:
        - XXX.XXX.XXX.8/29 
      gateway4: XXX.XXX.XXX.1
      nameservers:
        addresses:
          - 133.242.0.3
          - 133.242.0.4
  renderer: networkd
  version: 2
root@c1:~# netplan apply

普通に繋がりません。。。

root@c1:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 133.242.60.197 icmp_seq=1 Destination Host Unreachable
From 133.242.60.197 icmp_seq=2 Destination Host Unreachable
From 133.242.60.197 icmp_seq=3 Destination Host Unreachable
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4088ms pipe 4

VRRP用の仮想MACアドレスを設定してみます。

network:
  ethernets:
    eth0:
      dhcp4: 'no'
      dhcp6: 'no'
      addresses:
        - XXX.XXX.XXX.8/29 
      macaddress: 
      gateway4: XXX.XXX.XXX.1
      nameservers: 00:00:5e:00:01:01
        addresses:
          - 133.242.0.3
          - 133.242.0.4
  renderer: networkd
  version: 2
root@c1:~# netplan apply

無事外部に疎通できました!

root@c1:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=18.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=18.2 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=18.3 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 18.120/18.195/18.267/0.060 ms

4つほど使えるので、1つのL2ネットワーク内で4コンテナ以内であれば、
bridgeを使って直接IPアドレスを割り当て通信することが出来そうです。

ただ、本来の用途とは全く違うので、つながった!面白い!ぐらいに
とどめておくとよさそうです。