Wiem, że mogę przypisać statyczny adres IP ręcznie, używając /etc/network/interfaces
.
Wiem też, że mogę odczytać adres MAC kontenera LXC (np. Szukając lxc.network.hwaddr
wpisu /var/lib/lxc/<container-name>/config
i przypisując adres IP na podstawie wpisów dhcp-host=<mac-addr>,10.0.3.3
w /etc/dnsmasq.d/<some file>
.
W pliku, /etc/default/lxc-net
który przeczytałem
# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
# dnsmasq. For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
# container 'mail1' always get ip address 10.0.3.100.
#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
To by pasowało do moich potrzeb; niestety nie przynosi to żadnego efektu.
lxc-net
nie pomaga, jeśli nie usuniesz mostu lxcbr0. Zobacz moją odpowiedź.Odpowiedzi:
Wpadłem na to ostatnio i myślę, że znalazłem łatwe rozwiązanie. Testowałem (tylko) na Ubuntu 14.04.
Najpierw odkomentuj tę linię / etc / default / lxc-net:
W /etc/lxc/dnsmasq.conf zdefiniuj plik dhcp-hosts:
Następnie dodaj wpisy do pliku /etc/lxc/dnsmasq-hosts.conf w następujący sposób:
Uwaga: zmiany zaczną obowiązywać po ponownym uruchomieniu lxc-net (który ponownie uruchamia dnsmasq):
Następnie możesz zmodyfikować /etc/lxc/dnsmasq-hosts.conf i wysłać sygnał SIGHUP do dnsmasq:
Więc tak, musisz zrestartować lxc-net, ale tylko raz. Mam nadzieję że to pomoże.
źródło
killall -s SIGHUP dnsmasq
. Zgadzam się, że samo „SIGHUP-inging” dnsmasq jest bardziej wydajne niż restartowanie całego demona (szczególnie jeśli nie działa bez łatania swoich skryptów startowych).lxc-net
jest potrzebne tylko po to, aby dnsmasq mógł użyć konfiguracji z /etc/lxc/dnsmasq.conf (i ta informacja jest w niej/etc/default/lxc-net
nieznanadnsmasq
). Jeśli ustawiłeś go wcześniej, wystarczy SIGHUP.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
jeśli nie chcesz instalowaćkillall
ani ponownie ładować innychdnsmasq
instancjiDziała dobrze w Ubuntu 14.04.1
Odkomentuj tę linię
/etc/default/lxc-net
zatrzymaj wszystkie pojemniki, uruchom ponownie lxc-net:
Skonfiguruj adresy IP w
/etc/lxc/dnsmasq.conf
gdzie
{NAME}
jest nazwa twojego kontenera LXC:źródło
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
pliku i przypisania statycznego adresu IP do kontenera.Odpowiedź Tombarta działa, jeśli jesteś wystarczająco cierpliwy, aby czekać na odświeżenie DNS ORAZ chcesz ponownie uruchomić kontener (gość) później.
Poniżej znajduje się przepis, który wymaga, aby wszystkie inne potencjalnie działające kontenery LXC zostały zamknięte . Jeśli nie możesz sobie na to pozwolić, nie widzę sposobu na wymuszenie nowej konfiguracji dnsmasq. (W przypadku niektórych powodów sygnalizacji HUP do pid dnsmasqa znalezionego w
/run/lxc/dnsmasq.pid
również nie działa).Więc jeśli chcesz mieć coś, co działa natychmiast i nie ma uruchomionych innych kontenerów LXC, skorzystaj z mojej odpowiedzi.
$name
to nazwa węzła, dla którego chcemy zresetować przypisanie, i$internalif
nazwa mostkowanego adaptera LXC. Możesz uzyskać wartość$internalif
z np.augtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
Jeśli instalujesz,augeas-tools
ale zwykle jest to po prostulxcbr0
.Niestety
/etc/init/lxc-net.conf
w Ubuntu 14.04 występuje błąd (funkcja?), Który uniemożliwia ponowne załadowanie,dnsmasq
chyba że urządzenie mostkowe jest wyłączone dla hosta.źródło
To rozwiązanie działa przez załatanie skryptów startowych lxc. Dzieli złożone zadanie polegające na podniesieniu mostu lxcbr0 i uruchomieniu go
dnsmasq
na dwa osobne zadania. Teraz nie musisz ponownie uruchamiać całegolxc-net
mostu, aby przeładowaćdnsmasq
- przeładowaniesudo service restart lxc-dnsmasq
jest wystarczające i nie wymaga wyłączania mostu.sudo service lxc-net stop
i upewnij się, że nie ma mostka lxcbr0 (lub równoważnego)./etc/init/lxc-net.conf
następujących treści:.
/etc/init/lxc-dnsmasq
o następującej treści:.
źródło
Oto prosty skrypt Pythona, który uwalnia dzierżawę dnsmasq LXC. Możesz uruchomić go z hosta lub wykuć z innego kontenera - tak, to działa !:
Warunkiem powyższego jest biblioteka pythonowego scapy:
Po uruchomieniu powinieneś zobaczyć w dzienniku systemowym coś takiego:
Aby potwierdzić, sprawdź, czy wpis został usunięty
/var/lib/misc/dnsmasq.lxcbr0.leases
. Sam kontener zachowa adres IP, dlatego należy go zatrzymać przed uruchomieniem nowego kontenera, który powinien ponownie użyć adresu IP.źródło
Zdaję sobie sprawę, że moja odpowiedź jest spóźniona o wiele lat, ale może to pomaga komuś innemu. Problem polegał na tym, że edytowałeś kod specyficzny dla pakietu (
write_lxc_net
funkcji) Ubuntu LXC, który miał być zapisany w innym miejscu docelowym jako ciąg, a nie przetwarzany w samymlxc-net
skrypcie!W rezultacie proces dnsmasq nie otrzymał pliku konfiguracji, który próbowałeś przekazać, pozostawiając cię „bez efektu”, jak mówisz.
Zamiast tego chciałbyś ustawić tę zmienną u góry skryptu, pośród pozostałych:
źródło