การตั้งค่าบริดจ์คอนเทนเนอร์ LXC ด้วย IP แบบคงที่


15

ฉันกำลังพยายามติดตั้งคอนเทนเนอร์ LXC หลายตัวบนโฮสต์แต่ละอันมีสแตติกสาธารณะของตนเอง

โฮสต์ของฉันใช้งาน Ubuntu ล่าสุด มันมีอินเตอร์เฟซเครือข่ายเดียวชื่อ eth0 IP แบบสแตติกมีการ pingable จากอินเทอร์เน็ตและชื่อ eth0: 210, eth0: 211 ... ตัวเลขหลังเครื่องหมายจุดคู่เป็นไบต์ที่มีนัยสำคัญน้อยที่สุดของที่อยู่ นอกจากอินเทอร์เฟซเหล่านี้ฉันมีการตั้งค่า br0 บน IP สาธารณะของโฮสต์ นอกจากนี้ยังมีอินเตอร์เฟส lo, veth2LPP9A และ lxcbr0 lxcbr0 มีที่อยู่ของ IP ส่วนตัว

โฮสต์ / etc / network / interfaces ดูเหมือนว่า:

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

จนถึงตอนนี้ฉันใช้แหล่งข้อมูลออนไลน์ต่างๆรวมถึงBridging LXC container เพื่อโฮสต์ eth0 เพื่อให้พวกเขาสามารถมี IP สาธารณะเพื่อช่วยฉันตั้งค่านี้

ไฟล์กำหนดค่าของคอนเทนเนอร์มี:

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

ฉันได้ลบการกำหนดค่าแบบคงที่ lxc.network.ipv4 จากไฟล์นี้เพราะมันทำให้เกิดปัญหา เมื่อฉันรัน lxc-ls - พอดีกับการกำหนดค่านี้ฉันจะเห็น IP สาธารณะเดียวกันสองครั้งในผลลัพธ์ นอกจากนี้มันจะยุ่งกับการกำหนดค่าเครือข่ายย่อยของ / etc / network / interfaces ของคอนเทนเนอร์

เมื่อพูดถึงไฟล์อินเตอร์เฟสของ container ดูเหมือนว่า:

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 [...]

ฉันต้องคอมเม้นต์เกตเวย์และเพิ่มเส้นทางเพิ่มคำสั่งลงในไฟล์นี้ มิฉะนั้นคอนเทนเนอร์จะใช้เวลาในการบูตไม่กี่นาที

ไฟล์ / proc / sys / net / bridge / bridge-nf- * บนโฮสต์ถูกตั้งค่าเป็น 0 ทั้งหมดค่า / proc / sys / net / ipv4 / ip_forward คือ 1

ปัญหาคือถึงแม้ว่าเส้นทาง "-n" ของคอนเทนเนอร์ดูเหมือนควร แต่ฉันไม่สามารถ ping ออกจากคอนเทนเนอร์ได้ SSH กับสิ่งที่ควรเป็น IP ของคอนเทนเนอร์เชื่อมต่อฉันกับโฮสต์

แก้ไข: การลบ IP แบบคงที่ของคอนเทนเนอร์ออกจากโฮสต์ช่วยได้ แต่ตอนนี้ฉันได้รับข้อผิดพลาดใหม่ กำลังพยายาม ping คอนเทนเนอร์จากผลลัพธ์โฮสต์ใน Redirect HostFrom, ใหม่ nexthop แพ็คเก็ตเพิ่งไปจากเกตเวย์ไปยังโฮสต์ซ้ำแล้วซ้ำอีก การเรียกใช้ traceroute จากโฮสต์แสดงว่าการหยุดครั้งแรกอยู่ที่เกตเวย์ จากนั้นเส้นทางอื่นทั้งหมดจะเป็น * * * ฉันได้รับปัญหาเดียวกันไม่ว่าคอนเทนเนอร์จะออนไลน์หรือไม่ก็ตาม

คำตอบ:


17

ในความเป็นจริงคุณสามารถตั้งค่าที่อยู่และเป็นประตูจากภายในโฮสต์manualและกำหนดค่าภาชนะไม่ให้สัมผัสอินเตอร์เฟซที่ทุกคนใช้คำว่า

วางสิ่งนี้ไว้ภายในแขก/etc/network/interfaces:

auto eth0
iface eth0 inet manual

ปล่อยให้เป็นไฟล์ config ของคอนเทนเนอร์เพื่อตั้งค่าอินเตอร์เฟส:

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

แขกจะทำตัวเหมือน BIOS ติดตั้งอินเทอร์เฟซแล้วและใช้งาน

lxc.network.ipv4.gatewayโดยเฉพาะอย่างยิ่งการสำรวจ


ขอบคุณ! สิ่งนี้ช่วยชีวิตฉัน ... คอนเทนเนอร์ของฉันจะพยายามหาที่อยู่ dhcp ใหม่เสมอ ... การตั้งค่าเป็นค่าคงที่ภายในคอนเทนเนอร์ (คงที่) ส่งผลให้คอนเทนเนอร์ไม่แม้แต่บูตอีกต่อไป!
Dominik Dorn

โปรดทราบว่าวิธีนี้ใช้งานไม่ได้หากโฮสต์ถูกระงับและทำงานต่อ lxc ดำเนินการต่อด้วยที่อยู่ IP ที่จัดสรร แต่โฮสต์คิดว่าไม่มีที่อยู่ IP อีกต่อไป ฉันพบว่ามันเป็นการดีกว่าที่จะกำหนดค่า dnsmasq สำหรับ lxc-net และส่งมอบที่อยู่ถาวรที่นั่น
HRJ

@HRJ - คุณควรรวม 'วิธีการ' ในความคิดเห็นหรือลิงก์ไปยังการอ้างอิงมากกว่าเพียงแค่พูดว่า 'ทำ' นี่เป็นเว็บไซต์ด้านเทคนิคและคุณควรพูดบางสิ่งที่เป็นประโยชน์
Ian Macintosh

2
ดูเหมือนว่าสถานที่ที่ถูกต้องในการทำเช่นนี้มีทั้งใน / etc / default / lxc ซึ่งคุณสามารถตั้งค่าช่วงของคุณ (ดู LXC_DHCP_RANGE) และใน /etc/dnsmasq.d-available/lxc ตามเอกสาร dnsmasq หรือ manpage
Ian Macintosh


4

เนื่องจากคุณกำลังเชื่อมต่อคุณจะต้องตั้งค่าที่อยู่ IP ในคอนเทนเนอร์เท่านั้นและไม่ได้อยู่ในโฮสต์ โฮสต์ควรมีที่อยู่ IP ของตัวเองเท่านั้น


2

ฉันเพิ่งทำเมื่อวันก่อนด้วย Ubuntu 14.04 มันง่าย คุณเพียงแค่ต้องแก้ไข/etc/network/interfacesไฟล์ภายในคอนเทนเนอร์ของคุณและตั้งค่านี้:

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

แทนที่ทุกตัวแปรด้วยค่าที่ต้องการ

คุณไม่ต้องทำอะไรอีก!

PS: สังเกตเห็นช่องว่างก่อนบางบรรทัด มันเป็นข้อบังคับ


สิ่งนี้ส่งผลให้คอนเทนเนอร์ของฉันไม่บูทอีกต่อไป (เซิร์ฟเวอร์ Ubuntu 14.04) .. คำตอบจาก sebastianwagner ใช้งานได้สำหรับฉัน
Dominik Dorn

2

วิธีที่ดีที่สุดที่ฉันค้นหาและเร็วที่สุดคือการใช้โปรไฟล์ lxc

lxc profile list - สั่งรายการโปรไฟล์ทั้งหมดที่คุณมีแล้ว

lxc profile copy default minecraft(นี่คือชื่อของโปรไฟล์ใหม่ของคุณ)

แล้วก็ lxc profile edit minecraft

สิ่งนี้จะเกิดขึ้น

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:

จากนั้นบันทึก

ถัดไปกำหนดโปรไฟล์ให้ภาชนะ LXC ของคุณเช่นนี้

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

จากนั้นเพียงรีสตาร์ทคอนเทนเนอร์และที่อยู่ IP ใหม่ของคุณจะถูกตั้งค่าเป็นคอนเทนเนอร์นั้น


1

ฉันสามารถตั้งค่าคอนเทนเนอร์ lxc ของฉันได้อย่างถูกต้องหลังจากทำตามคำตอบของ @Enque Moreno Tent ดังนั้นฉันจะอธิบายสิ่งที่ต้องทำในรายละเอียดเพิ่มเติมในกรณีที่คุณไม่ทราบวิธีการตั้งค่ารายการอื่น ๆ

1. เข้าถึงคอนเทนเนอร์ LXC ของคุณผ่านlxc-attachคำสั่ง

คำสั่ง:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. ดูการกำหนดค่าปัจจุบันของคุณด้วย ifconfig

คำสั่ง

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. รับที่อยู่ netmask และเกตเวย์

เมื่อเห็นผลลัพธ์ของifconfigคำสั่งด้านบนเราจะเห็น:

ที่อยู่คือที่อยู่ที่คุณต้องการคุณสามารถเปลี่ยนเป็น 10.0.3.166

Netmaskอยู่ที่นั่น: 255.255.255.0

เกตเวย์ : สำหรับเกตเวย์คุณใช้การออกอากาศที่อยู่ด้วยที่นี่คือ 10.0.3.255

ขณะที่คุณสามารถดูด้านบนคุณขณะนี้มีข้อมูลทั้งหมดที่คุณจำเป็นต้องกรอกแขกของคุณ /etc/network/interfaces(คอนเทนเนอร์)

4. การรับdns-nameserversค่า

ออกคำสั่ง:

cat /etc/resolv.conf

แต่บางทีที่ดีที่สุดคือการใช้ Google DNS ซึ่ง asre 8.8.8.8และ8.8.4.4

5. การแก้ไข/etc/network/interfacesภายในคอนเทนเนอร์

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


ifconfigถูกแทนที่ด้วยip aเดเบียน / อูบุนตูเวอร์ชันล่าสุดlinuxconfig.org/ …
rvazquezglez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.