Saya tahu, bahwa saya dapat menetapkan IP statis secara manual, menggunakan /etc/network/interfaces
.
Saya juga tahu, bahwa saya dapat membaca alamat MAC wadah LXC (misalnya dengan mencari lxc.network.hwaddr
entri /var/lib/lxc/<container-name>/config
dan menetapkan IP berdasarkan menggunakan entri dhcp-host=<mac-addr>,10.0.3.3
di /etc/dnsmasq.d/<some file>
.
Dalam file yang /etc/default/lxc-net
saya baca
# 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
Itu akan sesuai dengan kebutuhan saya; sayangnya hal itu tidak berpengaruh.
lxc-net
tidak membantu jika Anda tidak menghapus jembatan lxcbr0 Anda. Lihat jawaban saya.Jawaban:
Saya mengalami ini baru-baru ini dan saya pikir saya menemukan solusi yang mudah. Saya (hanya) mengujinya di Ubuntu 14.04.
Pertama, batalkan komentar pada baris ini / etc / default / lxc-net:
Di /etc/lxc/dnsmasq.conf, tentukan dhcp-hostsfile:
Kemudian tambahkan entri di /etc/lxc/dnsmasq-hosts.conf seperti ini:
Hati-hati: perubahan akan menjadi efektif setelah Anda me-restart lxc-net (yang me-restart dnsmasq):
Setelah itu Anda dapat memodifikasi /etc/lxc/dnsmasq-hosts.conf dan mengirim sinyal SIGHUP ke dnsmasq:
Jadi ya, Anda perlu me-restart lxc-net, tetapi hanya sekali. Semoga ini membantu.
sumber
killall -s SIGHUP dnsmasq
. Saya setuju, bahwa hanya "SIGHUP-ing" dnsmasq lebih efisien daripada me-restart seluruh daemon (terutama jika tidak bekerja tanpa menambal skrip pemula).lxc-net
hanya diperlukan untuk membiarkan dnsmasq menggunakan konfigurasi dari /etc/lxc/dnsmasq.conf (dan informasi ini ada di/etc/default/lxc-net
mana tidak diketahui olehdnsmasq
). Jika Anda sudah mengaturnya sebelumnya, cukup SIGHUP yang lain.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
jika Anda tidak ingin menginstalkillall
atau memuat ulangdnsmasq
instance lainIni berfungsi dengan baik di Ubuntu 14.04.1
Batalkan komentar pada baris ini
/etc/default/lxc-net
hentikan semua kontainer, restart lxc-net:
Konfigurasikan alamat ip di
/etc/lxc/dnsmasq.conf
di mana
{NAME}
nama kontainer LXC Anda:sumber
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
file dan menetapkan alamat ip statis ke wadah.Jawaban Tombart berfungsi jika Anda cukup sabar untuk menunggu penyegaran DNS DAN Anda bersedia untuk memulai kembali wadah (tamu) sesudahnya.
Berikut ini adalah resep yang mengharuskan semua wadah lxc lainnya yang sedang berjalan dimatikan . Jika Anda tidak mampu membelinya, maka saya tidak menemukan cara untuk memaksa konfigurasi dnsmasq baru. (Untuk beberapa reasone signaling HUP ke pid dnsmasq ditemukan dalam
/run/lxc/dnsmasq.pid
tidak berfungsi baik.)Jadi, jika Anda ingin memiliki sesuatu yang berfungsi secara instan dan tidak ada wadah lxc lain yang berjalan, ikuti jawaban saya.
$name
adalah nama dari simpul yang ingin kita atur ulang penugasannya, dan$internalif
merupakan nama adaptor yang dijalin oleh LXC. Anda bisa mendapatkan nilai$internalif
dengan misalnyaaugtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
jika Anda menginstalaugeas-tools
tetapi biasanya itu hanyalxcbr0
.Sayangnya, ada bug (fitur?) Di
/etc/init/lxc-net.conf
dalam Ubuntu 14,04 yang mencegah memuat kembalidnsmasq
kecuali perangkat jembatan turun untuk tuan rumah.sumber
Solusi ini bekerja dengan menambal skrip pemula lxc. Itu membagi tugas kompleks membawa lxcbr0 jembatan dan memulai
dnsmasq
menjadi dua pekerjaan terpisah. Sekarang Anda tidak perlu me-restart seluruhlxc-net
jembatan untuk hanya memuat ulangdnsmasq
- memuat kembalisudo service restart lxc-dnsmasq
sudah cukup dan tidak perlu mematikan jembatan.sudo service lxc-net stop
dan pastikan tidak ada jembatan lxcbr0 (atau setara)./etc/init/lxc-net.conf
dengan konten berikut:.
/etc/init/lxc-dnsmasq
dengan konten berikut:.
sumber
Berikut ini adalah skrip python sederhana yang merilis sewa dnsmasq LXC. Anda dapat menjalankannya dari mesin host atau memalsunya dari wadah lain - ya itu berhasil !:
Persyaratan untuk di atas adalah scapy python library:
Setelah dijalankan, Anda akan melihat di log sistem sesuatu seperti:
Untuk mengonfirmasi, cukup periksa apakah entri dihapus dari
/var/lib/misc/dnsmasq.lxcbr0.leases
. Wadah itu sendiri akan menyimpan IP sehingga harus dihentikan sebelum memulai wadah baru yang harus menggunakan kembali IP.sumber
Saya menyadari jawaban saya terlambat beberapa tahun, tetapi mungkin itu membantu orang lain. Masalahnya adalah Anda mengedit kode khusus untuk paket LXC Ubuntu (
write_lxc_net
fungsi) yang dimaksudkan untuk ditulis ke tujuan lain sebagai string, tidak diproses dalamlxc-net
skrip itu sendiri!Akibatnya, proses dnsmasq tidak menerima file konfigurasi yang Anda coba lewati, meninggalkan Anda dengan "tidak ada efek", seperti yang Anda katakan.
Alih-alih, Anda ingin mengatur variabel ini di dekat bagian atas skrip, di antara yang lainnya:
sumber