LXC porta do host de encaminhamento de NAT para o contêiner

4

Instalei o LXC em um debian / sid e criei um contêiner jessie / amd64

sudo apt-get install lxc debootstrap libvirt-clients \
                libvirt-daemon-system ebtables dnsmasq

sudo lxc-create -t /usr/share/lxc/templates/lxc-debian -n debian

então eu começo a ponte

sudo virsh net-start default

Isso cria uma rede 2 se virbr0 e virbr0-nic , veth94ECU1 forem criados depois que lxc-start , estiver usando a rede 192.168.122.0/24 e o ip for atribuído por dhcp.

O container começa bem, ele pode chegar ao host e vice-versa, eu posso pingar e se houver um servidor web em execução, posso acessar com um navegador do host.

virsh net-start também adiciona alguma regra a iptables (não tenho um firewall em execução no host, portanto, por padrão, tudo está vazio e ACCEPT )

iptables -L após net-start

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

iptables -L -t nat após net-start

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
RETURN     all  --  192.168.122.0/24     base-address.mcast.net/24 
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24    

/proc/sys/net/ipv4/ip_forward é 1

Agora eu gostaria de NAT alguma porta do host para o recipiente, encontrando uma solução tudo on-line parece apontar na mesma direção, algo assim abaixo deve funcionar:

iptables -A PREROUTING -t nat -p tcp --dport $HPORT -j DNAT --to $VRIP:$VRPORT
iptables -A FORWARD -p tcp -d $VRIP --dport $VRPORT -j ACCEPT

mas não é, o que eu sinto falta?

atualização

Eu mudei de lxc-nat / virsh net-start (virbr0) para hospedeiro nat (br0) seguindo este post: Convertendo eth0 para br0 e obtendo todo o seu LXC ou LXD em sua LAN

Funciona, os containers obtêm o ip via dhcp do roteador LAN e estão na mesma rede, o que é conveniente porque meu roteador pode encaminhar apenas endereços LAN de porta NAT.

Resumidamente, crie uma interface br0 em /etc/network/interfaces , assim:

auto br0
iface br0 inet static
    address 192.168.2.210
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255
    gateway 192.168.2.1
    bridge-ifaces eth0
    bridge-ports eth0
    up ifconfig eth0 up

iface eth0 inet manual

use lxc.network.link = br0 na configuração do contêiner.

Ainda assim, se alguém souber uma forma de NAT, apenas alguma porta sem usar uma ponte de host sobre a qual gostaria de ouvir.

    
por Alex 10.06.2017 / 17:08

0 respostas