DHCP externo com LXD 2.3+

0

Estou experimentando o LXD. Parece que a maneira padrão de configurar a rede é fazer o host fornecer DHCP e NAT para todos os convidados, mas eu gostaria de omitir o NAT e permitir que os convidados usem o mesmo servidor DHCP que o host. Isso parece ser uma coisa bastante razoável, mas não consigo trabalhar. Não importa o que eu faça, o convidado nunca recebe um endereço atribuído pelo servidor DHCP externo.

Para dificultar as coisas, parece que a configuração de rede da LXD mudou bastante majorly com o LXD 2.3 , e a grande maioria das informações que eu descubro é de versões anteriores. Eu encontrei este problema do GitHub onde alguém estava tentando fazer a mesma coisa e postou uma nova configuração de estilo que trabalhei para eles, mas não pareceu fazer diferença quando tentei.

Então, a questão é, Como faço para configurar uma ponte no LXD 2.3+ sem NAT e usando DHCP externo?

Veja alguns detalhes adicionais:

  • Ubuntu 18.04 com o LXD 3.0.0
  • O host usa a interface enp10s0f0
  • Deseja ligar os convidados à interface enp10s0f1 (que não é usada de outra forma pelo host)
  • Interface adicional enp1s2 não utilizada
  • dominickpastore@ubuntu:~$ lxc network list
    +-----------+----------+---------+-------------+---------+
    |   NAME    |   TYPE   | MANAGED | DESCRIPTION | USED BY |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f0 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f1 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp1s2    | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | lxdbr0    | bridge   | YES     |             | 1       |
    +-----------+----------+---------+-------------+---------+
    
  • Observe que esta é apenas a minha tentativa de configuração atual para lxdbr0 ; Eu tentei muitos:

    dominickpastore@ubuntu:~$ lxc network show lxdbr0
    config:
      bridge.external_interfaces: enp10s0f1
      ipv4.address: none
      ipv4.dhcp: "false"
      ipv6.address: none
      ipv6.dhcp: "false"
    description: ""
    name: lxdbr0
    type: bridge
    used_by:
    - /1.0/containers/first
    managed: true
    status: Created
    locations:
    - none
    

Atualização:

Eu tenho jogado com isso mais e isso me deixa ainda mais confuso. Estou recebendo um comportamento aparentemente muito errático. Isso ainda é meio novo e esquisito, ou estou apenas fazendo coisas erradas? Por um lado, lxc network unset parece não funcionar:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network unset lxdbr0 ipv4.dhcp.ranges
dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

Eu também criei uma segunda ponte para testar duas configurações de uma só vez, e posso defini-las de forma muito semelhante a uma configuração NAT + DHCP (não exatamente a mesma porque não está funcionando), mas apenas a interface original é atribuída um endereço. Não consigo descobrir por que a nova interface não consegue obter um endereço. Observe a configuração similar do IPv4:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network show lxdbr1
config:
  ipv4.address: 10.251.34.1/24
  ipv4.dhcp: "true"
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.nat: "false"
description: ""
name: lxdbr1
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

No entanto, no contêiner, eth0 funciona (conectado a lxdbr0) e eth1 nunca recebe um endereço (conectado a lxdbr1):

root@first:~# ip addr
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
41: eth0@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:64:0e:ea brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.4.4.245/24 brd 10.4.4.255 scope global dynamic eth0
       valid_lft 3101sec preferred_lft 3101sec
    inet6 fe80::216:3eff:fe64:eea/64 scope link
       valid_lft forever preferred_lft forever
43: eth1@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:fe:6d:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::216:3eff:fefe:6d01/64 scope link
       valid_lft forever preferred_lft forever
    
por Nick 11.05.2018 / 19:36

2 respostas

2

A configuração de rede padrão para o LXD é usar uma ponte privada , lxdbr0 .

Para que alguns dos seus contêineres recebam um endereço IP da sua LAN, você pode

  1. Use rede em ponte , conectando a interface Ethernet do host . Veja, por exemplo, link
  2. Use o macvlan . Veja, por exemplo, link

Entre os dois, o macvlan é muito fácil de configurar. Você pode ter alguns contêineres em macvlan , enquanto outros usam redes privadas. Você pode usar perfis no LXD para especificar qual é o quê. Você pode até trocar de um para outro aplicando / anexando um perfil diferente.

Um problema com o macvlan é que os contêineres em mavclan não podem contatar o host pela rede.

Um problema com a rede em ponte macvlan e (na interface Ethernet do host) é que nem funciona em WiFi. Porque as configurações padrão no WiFi são para o ponto de acesso aceitar apenas um único endereço MAC de um cliente de rede associado. Você pode contornar essa limitação se não definir nenhum recurso de segurança no ponto de acesso.

    
por Simos 12.05.2018 / 11:21
0
  1. Configure contêineres com interfaces de modo em ponte do macvlan ligadas à interface física do host.
  2. Adicione a interface em ponte macvlan no host na mesma interface.

Dessa forma, você poderá conversar com o host dos contêineres e vice-versa.

Se você precisar de um ajudante macnlan ifupdown, eu tenho um link

    
por AnrDaemon 28.09.2018 / 16:19