Menyiapkan wadah LXC dijembatani dengan IP statis

15

Saya mencoba untuk mengatur beberapa kontainer LXC pada sebuah host, masing-masing dengan IP statis publik mereka sendiri.

Tuan rumah saya sedang menjalankan Ubuntu terbaru. Ini memiliki antarmuka jaringan tunggal bernama eth0. IP statis dapat di-ping-ping dari internet dan diberi nama eth0: 210, eth0: 211 ... Angka-angka setelah titik dua adalah byte alamat yang paling tidak signifikan. Selain antarmuka ini, saya memiliki pengaturan BR0 pada IP publik host. Ada juga antarmuka lo, veth2LPP9A, dan lxcbr0. Lxcbr0 memiliki alamat IP pribadi.

Host / etc / network / interfaces terlihat seperti:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

Sejauh ini saya telah menggunakan berbagai sumber online, termasuk Bridging LXC wadah untuk menjadi tuan rumah eth0 sehingga mereka dapat memiliki IP publik untuk membantu saya mengatur ini.

File konfigurasi penampung memiliki:

lxc.network.type = veth
lxc.network.link = br0

Saya telah menghapus konfigurasi lxc.network.ipv4 statis dari file ini karena menyebabkan masalah. Ketika saya menjalankan lxc-ls - fancy dengan konfigurasi ini, saya akan melihat IP publik yang sama dua kali dalam output. Selain itu, ini akan mengacaukan konfigurasi subnet dari / etc / network / interface dari penampung.

Berbicara tentang file antarmuka penampung, tampilannya agak seperti:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

Saya harus mengomentari gateway dan menambahkan rute menambahkan perintah ke file ini. Jika tidak, wadah akan membutuhkan waktu beberapa menit untuk boot.

File / proc / sys / net / bridge / bridge-nf- * pada host semuanya diatur ke 0. Nilai / proc / sys / net / ipv4 / ip_forward adalah 1.

Masalahnya adalah, meskipun "route -n" dari kontainer sepertinya sudah seharusnya, saya tidak bisa keluar dari wadah. SSHing ke apa yang seharusnya menjadi IP kontainer, menghubungkan saya ke host.

EDIT: Menghapus IP statis penampung dari host memang membantu, tapi sekarang saya mendapatkan kesalahan baru. Mencoba melakukan ping kontainer dari hasil host di Redirect HostFrom, New nexthop. Paket hanya pergi dari gateway ke host, berulang kali. Menjalankan traceroute dari host menunjukkan bahwa pemberhentian pertama adalah di gateway. Maka semua rute lainnya adalah * * *. Saya mendapatkan masalah yang sama terlepas dari apakah wadahnya online atau tidak.

Kabel Ethernet
sumber

Jawaban:

17

Bahkan Anda dapat mengatur alamat dan gateway dari dalam yang tuan rumah dan mengkonfigurasi wadah untuk tidak menyentuh antarmuka sama sekali menggunakan kata kunci manual.

Tempatkan ini di dalam tamu /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Juga serahkan ke file konfigurasi penampung untuk mengatur antarmuka:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

Tamu akan berperilaku seolah-olah BIOS sudah mengatur antarmuka dan gunakan saja.

Terutama menjelajah lxc.network.ipv4.gateway.

sebastianwagner
sumber
Terima kasih! Ini menyelamatkan hidup saya ... wadah saya akan selalu mencoba untuk mendapatkan alamat dhcp baru ... mengaturnya ke nilai tetap di dalam wadah (statis) mengakibatkan wadah bahkan tidak bisa boot lagi!
Dominik Dorn
Perhatikan bahwa ini tidak berfungsi dengan baik jika host ditangguhkan dan dilanjutkan. Lxc melanjutkan dengan alamat ip yang dialokasikan tetapi tuan rumah berpikir itu tidak memiliki alamat ip lagi. Saya telah menemukan lebih baik untuk mengkonfigurasi dnsmasq untuk lxc-net dan membagikan alamat tetap di sana.
HRJ
@HRJ - Anda harus memasukkan 'how' di komentar Anda atau tautan ke ref daripada hanya mengatakan 'do it'. Ini adalah situs teknis dan Anda harus mengatakan sesuatu yang sebenarnya bisa digunakan.
Ian Macintosh
2
Sepertinya tempat yang tepat untuk melakukan ini adalah di / etc / default / lxc di mana Anda dapat mengatur rentang Anda (lihat LXC_DHCP_RANGE) dan di /etc/dnsmasq.d-available/lxc sesuai dokumen dnsmasq atau halaman manual
Ian Macintosh
4

Karena Anda menjembatani, Anda perlu mengatur alamat IP dalam wadah saja , dan bukan pada host. Tuan rumah seharusnya hanya memiliki alamat IP sendiri .

Michael Hampton
sumber
2

Saya hanya melakukannya kemarin dengan Ubuntu 14.04. Sederhana saja. Anda hanya perlu mengedit /etc/network/interfacesfile di dalam wadah Anda, dan mengatur ini:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

Ganti setiap variabel dengan nilai yang diinginkan.

Anda TIDAK perlu melakukan hal lain!

PS: Perhatikan ruang sebelum beberapa baris. Itu wajib.

Tenda Enrique Moreno
sumber
ini mengakibatkan wadah saya tidak bisa boot lagi (server ubuntu 14.04) .. jawaban dari sebastianwagner berfungsi untuk saya.
Dominik Dorn
2

Cara terbaik yang saya temukan dan tercepat adalah dengan menggunakan profil lxc

lxc profile list - perintah daftar semua profil yang Anda miliki Kemudian

lxc profile copy default minecraft(ini adalah nama profil baru Anda)

Kemudian lxc profile edit minecraft

Ini akan muncul

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

lalu simpan

selanjutnya berikan profil ke wadah LXC Anda seperti ini

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

kemudian cukup restart wadah dan alamat ip baru Anda diatur ke wadah itu

Jayferret
sumber
1

Saya dapat mengatur dengan benar kontainer LXC saya setelah mengikuti jawaban @Enrique Moreno Tent, jadi saya akan menjelaskan apa yang harus dilakukan secara lebih rinci jika Anda tidak tahu cara mengatur item lainnya.

1. Akses wadah LXC Anda melalui lxc-attachperintah

Perintah:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Lihat konfigurasi Anda saat ini dengan ifconfig

Perintah

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` `

3. Mendapatkan alamat, netmask dan gateway

Melihat hasil dari ifconfigperintah di atas, kita kemudian melihat:

Alamat adalah alamat yang Anda inginkan, Anda dapat mengubahnya ke 10.0.3.166.

Netmask ada di sana: 255.255.255.0

Gateway : Untuk gateway Anda menggunakan alamat broadcast dengan di sini adalah 10.0.3.255

Seperti yang Anda lihat di atas, saat ini Anda memiliki semua informasi yang Anda butuhkan untuk mengisi tamu Anda (wadah) /etc/network/interfaces.

4. Mendapatkan dns-nameserversnilai.

Terbitkan perintah:

cat /etc/resolv.conf

Tapi mungkin lebih baik menggunakan Google DNS, yang asre 8.8.8.8dan8.8.4.4

5. Mengedit /etc/network/interfacesDI DALAM WADAH

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8

Iacchus
sumber
ifconfigtelah diganti dengan ip adi versi debian / ubuntu yang lebih baru linuxconfig.org/…
rvazquezglez