Bagaimana cara mengkonfigurasi alamat IP eksternal untuk tamu LXC?

18

Saya menjelajahi fitur LXC di Ubuntu 12.04 dan saya benar-benar ingin mengatur jaringan seperti ini:

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

Saya hanya ingin jaringan "flat" di mana para tamu memiliki akses penuh ke LAN dan terlihat dari klien. Saya terbiasa menjembatani jaringan dengan libvirt / KVM, seperti yang dijelaskan di sini: http://libvirt.org/formatdomain.html#elementsNICSBridge

Di tuan rumah:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

lxc.conf untuk tamu pertama:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

Sepertinya 192.168.56.201 tidak terlihat oleh dunia luar, yang bukan itu yang saya inginkan. Sepertinya saya harus melakukan salah satu dari ini:

1) Secara manual mengatur perutean pada host dan tamu

2) Lakukan sesuatu tipu ... buat antarmuka virtual pada host sebelumnya, dan konfigurasikan para tamu untuk menggunakannya lxc.network.type=phys. Saya tidak tahu apakah itu akan berhasil.

Saya fokus pada Ubuntu, tetapi jawaban untuk RHEL / Fedora akan berguna juga ....

twblamer
sumber
1
Tindak lanjut: Saya mengatur br0 ke mode promiscuous dan sepertinya melakukan apa yang saya inginkan sekarang. Saya kira ini adalah praktik standar tetapi tidak tercakup dalam banyak tutorial LXC yang saya baca. Saya akan membiarkan pertanyaan ini terbuka untuk sementara waktu jika saya mendapat tanggapan ...
twblamer
Saya melakukan kira-kira sama (kecuali dengan sedikit lebih pengaturan manual): skrip netup di setiap konfigurasi lxc untuk menambahkan veth ke jembatan (pada host), pengaturan IP manual di setiap wadah, skrip tambahan / antarmuka di setiap wadah untuk mengatur perutean (melalui penerusan ip4 pada host). Tapi, sejauh yang saya lihat, kedua solusi berarti bahwa wadah dapat mengatur alamat IP sendiri untuk hampir semua hal (dan juga menambahkan antarmuka utama host ke jembatan sedikit tidak nyaman). Jadi saya juga tertarik dengan beberapa umpan balik / solusi.
HoverHell

Jawaban:

13

Ini cukup benar — meskipun Anda melewatkan garis seperti ini:

lxc.network.ipv4.gateway = X.X.X.X

Saya memiliki tamu LXC yang menjalankan Debian. Pertama, Anda mengatur jembatan host (cara mudah), di /etc/network/interfaces:

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

Dalam kasus Anda, Anda sudah menyebutnya br0, dan saya sudah menyebutnya wan. Jembatan itu bisa disebut apa saja yang Anda inginkan. Anda mendapatkan ini berfungsi lebih dulu — jika gagal, selidiki dengan (misalnya,)brctl

Kemudian konfigurasi LXC Anda diatur untuk bergabung dengan jembatan itu:

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

Sebagai catatan HoverHell, seseorang dengan root di wadah dapat mengubah alamat IP. Ya. Ini jembatan (alias switch Ethernet). Jika Anda ingin mencegahnya, Anda dapat menggunakan aturan firewall pada host — setidaknya dalam kasus saya, paket harus melalui iptables host.

derobert
sumber
10
Terimakasih semuanya. Agak menyedihkan, tetapi saya baru saja kembali ke ini, menemukan ini melalui google dan lupa saya penanya yang asli ...
twblamer
2
@derobert: tidak yakin ini tersedia saat itu, tetapi autojuga merupakan nilai yang valid untuk lxc.network.ipv4.gatewaydan, menurut pemahaman saya, default ke IP dari jembatan yang terhubung dengan antarmuka veth.
0xC0000022L
Apakah antarmuka jembatan memerlukan IP sendiri? Jika wan_phymenghadapi internet, maka IP jembatan harus menjadi alamat IPv4 publik lain yang valid karena harus berada di subnet yang sama dengan alamat IPv4 publik lainnya yang akan saya konfigurasikan dengan tamu lxc saya, bukan? Tapi itu sepertinya sangat boros. askubuntu.com/a/884293/394569 menyarankan bahwa mengkonfigurasi alamat jembatan tidak sepenuhnya diperlukan.
josch
@josch Dalam contoh itu, wan_phy tidak memiliki IP, ada di jembatan sebagai gantinya. Saya ragu perlu IP sama sekali, jika Anda tidak ingin "host" memiliki IP eksternal.
derobert
6

Saya belum masuk sepenuhnya ke LXC,

tetapi saya telah menyiapkan beberapa kontainer dengan ip statis sendiri yang menyediakan layanan internet untuk beberapa situs web saya ...

Mungkin ini bisa membantu, sesuai keinginan Anda.

Saya menjalankan beberapa kontainer, seperti itu,

PADA MESIN HOST Saya Mengedit File Host, Menambahkan Setiap Mesin Container & Host: vi / etc / hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

setelah menyimpan ...

Sekali lagi, pada mesin host saya mengatur jaringan & jembatan ke:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

di atas jaringan adalah ip router saya, untuk lan. Alamat (internal) & siaran adalah mesin host, ip internal, yang nantinya saya gunakan VHOST untuk akses internet, webservers, ftp, dll.

UNTUK KONTAINER LXC 1-4 I KONFIGURASI SETUP SEPERTI:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

sekarang Container 1 IP = 192.168.1.101

saya ulangi untuk kontainer tambahan agar ada ip statis sendiri di lan ..

dalam wadah 1-4,

masuk dari tuan rumah:

lxc-console -n CONTAINERNAME,

& saya mengatur setiap jaringan wadah ke statis, eth0 ke:

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

SETIAP KONTAINER MEMILIKI IP SENDIRI, (lokal) TERSEDIA DI LAN. SAYA BISA SSH SETIAP IP LOKAL INDIVIDU, UNTUK MENGUJI MENGGUNAKAN PUTTY!

Setelah itu saya cukup yakin Anda harus mencari cara untuk menjalankannya melalui internet setelah, misalnya, vhost ke wadah ip / load balancers / proxy / dll.

Mungkin pengaturan ini dapat membantu.

M1-Serverz
sumber
Jika Anda mengkonfigurasi IP dan gateway dll di konfigurasi wadah LXC, tidak perlu mengulanginya di dalam wadah. Alih-alih mengatur ifacebait ke manual(bukan staticatau dhcp). up, down, dns-nameserversDll masih bisa digunakan di Debian dll
0xC0000022L
1

Saya belum bermain dengan LXC, tetapi artikel ini akan membantu Anda: konfigurasi jaringan menggunakan jembatan ethernet (lihat Metode 2).

Untuk memberi Anda beberapa petunjuk tentang konfigurasi (saya berasumsi Anda sudah menginstal br0 dengan benar):

  1. Anda perlu membuat sepasang perangkat veth menggunakan ip link add type veth
  2. Perintah sebelumnya telah membuat 2 antarmuka virtual: veth0 dan veth1
  3. Sekarang tambahkan antarmuka virtual veth0 ke jembatan: brctl addif br0 veth0
  4. di shell lxc Anda, ketik: ns_exec -nm -- /bin/bash
  5. Sekarang kita harus mengatur virtual lain jika ke namespace jaringan shell lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Sekarang dengan mengkonfigurasi veth1 di shell lxc ke alamat IP yang Anda inginkan (mis. 192.168.56.201), Anda harus siap.
Huygens
sumber
Anda belum menguji ini sama sekali? Anda mungkin akan mendapatkan hadiahnya, tetapi jawaban Anda tidak membantu saya sama sekali dan saya memiliki pengaturan yang sama persis seperti OP.
Jonas G. Drange
Apa yang bisa saya bantu? Apakah ada satu langkah dalam jawaban saya yang tidak berhasil, atau apakah Anda menjalankannya dan itu tidak menyelesaikan masalah? Tidak, seperti yang dikatakan dalam jawaban saya, LXC ada dalam daftar hal yang harus saya lakukan, tetapi saya belum memulai pengujian yang sebenarnya.
Huygens