Eu não sei se este é o caminho certo ou a melhor solução, mas funciona sem o NAT. A topologia da rede é a mesma. Temos um NIC físico (em1) e vários IP para cada contêiner. Talvez mais tarde eu possa comprar uma sub-rede. Mas por enquanto vou comprar 4 - 5 IPs.
-------------------
| INTERNET |
-------------------
|
V
----------------------------------------------
| ------------------- ------- [HOST] |
| | br0: 193.X.X.30 | <--- | em1 | |
| ------------------- ------- |
| | |
| V |
| ------------------- |
| | vethMyContainer | |
| ------------------- |
| | |
| V |
| -------------------------------------- |
| | -------------------- [CONTAINER] | |
| | | eth0: 213.X.X.31 | | |
| | -------------------- | |
| | | |
| -------------------------------------- |
----------------------------------------------
Esta é a minha configuração de rede no host (/ etc / network / interfaces):
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
bridge_ports em1
bridge_fd 0
address 193.X.X.30
netmask 255.255.255.0
gateway 193.X.X.1
dns-nameservers 8.8.8.8 8.8.4.4
Arquivo de configuração para o container (/ var / lib / lxc / my-container / config):
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.rootfs = /var/lib/lxc/my-container/rootfs
lxc.utsname = my-container
lxc.arch = amd64
lxc.network.type = veth
lxc.network.veth.pair = vethMyContainer
lxc.network.link = br0
lxc.network.ipv4 = 213.X.X.31/32
lxc.network.ipv4.gateway = 193.X.X.1
lxc.network.script.up = /var/lib/lxc/my-container/script-up.sh
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:aa:bb:cc
lxc.cgroup.memory.limit_in_bytes = 2048M
Devemos nomear nosso dispositivo veth. Porque nós vamos usar o nome no arquivo de script. Os pacotes não podem ser roteados automaticamente do dispositivo br0 para veth. Então eu adiciono uma regra de roteamento e minha tabela ARP não pode atualizar automaticamente. Então eu adicionei um registro ARP estático.
O arquivo de script (/var/lib/lxc/my-container/script-up.sh):
#!/bin/bash
route del 213.X.X.31 br0
route add 213.X.X.31 br0
A configuração de rede no meu contêiner:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
Assim, posso fazer ping diretamente para o meu contêiner sem usar o NAT. Vou atualizar a resposta se eu encontrar uma maneira de não usar os comandos arp e route.