Ir al contenido
  • +31 653-919-302
Cafayate.Net
  • 0
  • 0
  • Inicia sesión
  • Nederlands English (US) Español (AR)
  • Contáctanos
  • Inicio
  • Blog
  • Empleos
  • Contáctanos
Cafayate.Net
  • 0
  • 0
    • Inicio
    • Blog
    • Empleos
    • Contáctanos
  • +31 653-919-302
  • Nederlands English (US) Español (AR)
  • Inicia sesión
  • Contáctanos

LXC, Bridge, Dnsmasq, Iptables en Vagrant

  • Todos los blogs
  • Tech Blog
  • LXC, Bridge, Dnsmasq, Iptables en Vagrant
  • 5 de marzo de 2021 por
    Administrator

    Intro

    Ik ben laatst overgestapt van ubuntu naar debian jessie. Daar wil de ik ook lxc gebruiken met vagrant, echter merkte ik dat het netwerk gedeelte het niet deed.
    De container kreeg geen ip adres en toen dat eindelijk werkte, kon ik geen paketten ophalen omdat ik een “can not resolv” dns error kreeg.
    Na 1 week aan het zoeken, lezen en uitproberen zat de de duvel in de details. Mijn opzet is als volgt:

    • lxc
    • bridge-utils
    • iptables
    • dnsmasq
    • vagrant

    De opzet maakt gebruik van nat.

    Opzetten van de bridge:

    Wat me opviel bij lxc was dat er geen lxcbr0 bridge was, wat bij ubuntu wel het geval is. Deze wordt door ubuntu opgezet door een script lxc-net, maar die is er niet bij debian aangezien het een wrapper script is. Voor zover ik heb begrepen heb je een bridge nodig, omdat je eth0 van je host niet kan gebruiken, want deze zit in een andere namespace en er kan maar 1 namespace per nic gebruikt worden.  Ik neem aan dat het voor beveiligingsdoeleinden zo is ingesteld. Het opzetten van de bridge heb ik gedaan via een systemd service. Systemd is de defacto standaard op debian jessie en nu ook in ubuntu 15.04.

    Systemd instellingen

    De service staat bij mij in:

    /etc/systemd/system en heet lxc-net.service

    en heeft volgende inhoud

    [Unit]
    Description=Bridge interface for LXC Containers

    [Service]
    Type=oneshot

    # Bring up bridge interface
    ExecStart=/sbin/brctl addbr lxcbr0
    ExecStart=/sbin/ip address add 10.0.3.1/24 dev lxcbr0
    ExecStart=/sbin/ip link set lxcbr0 up

    RemainAfterExit=yes

    # Bring bridge interface down
    ExecStop=/sbin/ip link set lxcbr0 down
    ExecStop=/sbin/brctl delbr lxcbr0

    [Install]
    WantedBy=multi-user.target

    Daarnaast gebruik ik dnsmasq om te zorgen dat de container via dhcp een ip adres krijgt en dat dns verzoeken worden afgehandeld.

    Bestand /etc/systemd/system/lxc-dhcp.service met inhoud

    [Unit]
    Description=Dnsmasq for LXC
    Requires=lxc-net.service
    Requires=sys-devices-virtual-net-lxcbr0.device
    After=sys-devices-virtual-net-lxcbr0.device
    After=lxc-net.service

    [Service]
    ExecStart=/usr/sbin/dnsmasq \
    –dhcp-leasefile=/var/run/lxc-dnsmasq.leases \
    –user=dnsmasq \
    –keep-in-foreground \
    –listen-address=10.0.3.1 \
    –strict-order \
    –except-interface=lxcbr0 \
    –bind-interfaces \
    –log-dhcp \
    –log-queries \
    –dhcp-range=10.0.3.2,10.0.3.254,4h

    [Install]
    WantedBy=multi-user.target

    Daarna enable je de boel

    #systemctl enable lxc-net.service
    #systemctl enable lxc-dhcp.service

    Ik heb de dnsmasq.service uitgeschakeld aangezien het conflicten kan geven met de instellingen voor dnsmasq in lxc-dhcp.service.

    #systemctl disable dnsmasq.service

    Met enable geef je aan, dat de service de volgende keer bij het booten weer moet worden gestart. Om de service handmatig te starten:

    #systemctl start lxc-net.service
    #systemctl start lxc-dhcp.service

    Met ifconfig checken of je lxcbr0 hebt en dan een lxc container aanmaken met vagrant (vagrant-lxc plugin).

    Iptables

    Vagrant even laten rammelen en ….. potverdikkeme een error. Iets met netwerk, grrrr. Dan maar even handmatig in de container inloggen

    #lxc-attach -n naam van container

    Hmmm, ifconfig…. en geen ip adres. Hoe kan dat nou? Blijkt dat de firewall een stokje steekt voor dhcp request.  Dhcp draait op poort 67 en die moet je vrijgeven.

    #!/bin/bash
    iptables -I INPUT -i lxcbr0 -p udp –dport 67 -j ACCEPT
    iptables -I INPUT -i lxcbr0 -p tcp –dport 67 -j ACCEPT
    iptables -I INPUT -i lxcbr0 -p tcp –dport 53 -j ACCEPT
    iptables -I INPUT -i lxcbr0 -p udp –dport 53 -j ACCEPT
    iptables -I FORWARD -i lxcbr0 -j ACCEPT
    iptables -I FORWARD -o lxcbr0 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
    iptables -t mangle -A POSTROUTING -o lxcbr0 -p udp -m udp –dport 68 -j CHECKSUM –checksum-fill

    Aangezien ik nat gebruik, komen er nog wat regels bij.

    Waar ik de hele tijd tegen aan liep was dat ik inmiddels wel een ip adres kreeg, maar dat apt-get update nog steeds een resolve error gaf.
    Zoals gezegd zit de duvel in de details en de mijne was –strict-orderin lxc-dhcp.service. Toen ik die erin had gezet ging het goed. Met deze instructie geef je aan dat er in een bepaalde volgorde gezocht moet worden om een adres naar ip adres te resolven en niet de eerste de beste server maar nemen.

    en Tech Blog
    How to switch from NetworkManager to systemd-networkd on Linux

    Diseñado para empresas

    Somos un equipo de personas apasionadas cuyo objetivo es mejorar la vida de todos a través de productos revolucionarios. Creamos grandes productos para resolver sus problemas empresariales. Nuestros productos están diseñados para pequeñas y medianas empresas dispuestas a optimizar su rendimiento.

    Contáctenos

    Plantexel
    Pedernera
    Salta Capital 
    Argenina

    • +31 653-919-302
    • [email protected]
    Síganos
    Copyright © Plantexel
    Nederlands | English (US) | Español (AR)