在樱花云中使用桥接网络
服务器
Lastmod: 2025-01-21
Published: 2022-07-07

※ 这只是可以做到的,但并不是其原本的使用方法。
请当作玩笑来看待。

在樱花云中无法通过桥接进行连接。

可以分配固定的 NIC MAC 地址,或更改为任意地址吗?

樱花云的交换机似乎不允许除了创建的虚拟机的 MAC 地址以外的包
离开虚拟机。

在虚拟机中创建桥接,无法直接分配路由器和交换机的 IP 地址,或
交换机的本地 IP 地址给 LXD 容器并进行通信。

通常,这种结构应该是这样的。

但是,由于只有 eth0 设备中的 MAC 地址能够与虚拟机外部通信,因此,
在这种情况下无法连接到互联网。

由于无法通过容器 1 的 veth0 中的 MAC 地址进行通信,
所以无法离开虚拟机。

因此,突然让我想到了 VRRP 虚拟 MAC 地址的处理。
使用 VRRP 时,虚拟 IP 地址(VIP)是否有限制?

VRID 1 到 4 可以被使用。

使用虚拟 MAC 地址时,只有以下四种可用:
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 地址就可以进行通信并离开虚拟机?
所以决定尝试一下!

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 的默认配置文件中设置为连接到 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) 字节的数据。
From 133.242.60.197 icmp_seq=1 目标主机不可达
From 133.242.60.197 icmp_seq=2 目标主机不可达
From 133.242.60.197 icmp_seq=3 目标主机不可达
^C
--- 8.8.8.8 ping 统计信息 ---
5 个数据包发送,0 个接收,+3 错误,100% 数据包丢失,耗时 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) 字节的数据。
64 字节来自 8.8.8.8: icmp_seq=1 ttl=118 时间=18.1 ms
64 字节来自 8.8.8.8: icmp_seq=2 ttl=118 时间=18.2 ms
64 字节来自 8.8.8.8: icmp_seq=3 ttl=118 时间=18.3 ms
^C
--- 8.8.8.8 ping 统计信息 ---
3 个数据包发送,3 个接收,0% 数据包丢失,耗时 2002ms
rtt 最小/平均/最大/mdev = 18.120/18.195/18.267/0.060 ms

可以使用四个 MAC 地址,因此,在一个 L2 网络内,如果限制在四个容器之内,则可以通过桥接直接分配 IP 地址进行通信。

但是,由于这与原本的用途完全不同,所以即使连接成功,
也只是感到“连接上了!有趣!”而已,
可能要适可而止。