Thiết lập các container LXC bắc cầu có IP tĩnh


15

Tôi đang cố gắng thiết lập nhiều container LXC trên một máy chủ, mỗi container có IP tĩnh công khai của riêng chúng.

Máy chủ của tôi đang chạy Ubuntu mới nhất. Nó có một giao diện mạng duy nhất có tên eth0. Các IP tĩnh có thể ping được từ internet và được đặt tên là eth0: 210, eth0: 211 ... Các số sau dấu hai chấm là byte ít quan trọng nhất của các địa chỉ. Ngoài các giao diện này, tôi có thiết lập br0 trên IP công cộng của máy chủ. Ngoài ra còn có các giao diện lo, veth2LPP9A và lxcbr0. Lxcbr0 có địa chỉ của một IP riêng.

Các máy chủ / etc / mạng / giao diện trông như:

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

Cho đến nay tôi đã sử dụng nhiều nguồn trực tuyến khác nhau, bao gồm các cầu nối LXC để lưu trữ eth0 để họ có thể có IP công cộng để giúp tôi thiết lập điều này.

Tệp cấu hình của container có:

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

Tôi đã xóa cấu hình lxc.network.ipv4 tĩnh khỏi tệp này vì nó gây ra sự cố. Khi tôi chạy lxc-ls --fancy với cấu hình này, tôi sẽ thấy cùng một IP công khai hai lần trong đầu ra. Ngoài ra, nó sẽ gây rối với cấu hình mạng con của giao diện chứa / etc / mạng / giao diện.

Nói về tập tin giao diện của container, nó trông giống như:

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

Tôi đã phải bình luận ra cổng và thêm các tuyến đường thêm lệnh vào tập tin này. Nếu không, container sẽ mất vài phút để khởi động.

Các tập tin / Proc / sys / net / Bridge / Bridge-nf- * trên máy chủ đều được đặt thành 0. Giá trị / Proc / sys / net / ipv4 / ip_forward là 1.

Vấn đề là, mặc dù "tuyến đường -n" của container có vẻ như vậy, tôi không thể ping ra khỏi container. SSH đến những gì nên là IP của người chứa, kết nối tôi với máy chủ.

EDIT: Loại bỏ IP tĩnh của bộ chứa khỏi máy chủ đã giúp, nhưng bây giờ tôi đang gặp một lỗi mới. Cố gắng ping container từ máy chủ dẫn đến Redirect HostFrom, New nexthop. Các gói chỉ đi từ cổng đến máy chủ, lặp đi lặp lại. Chạy một traceroute từ máy chủ cho thấy điểm dừng đầu tiên là ở cổng. Sau đó, tất cả các tuyến đường khác là * * *. Tôi nhận được cùng một vấn đề bất kể container có trực tuyến hay không.

Câu trả lời:


17

Trong thực tế, bạn có thể thiết lập các địa chỉ và cổng từ bên trong các máy chủ và cấu hình container không để liên lạc giao diện ở tất cả các sử dụng từ khóa manual.

Đặt cái này trong tay khách /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Đồng thời để tập tin cấu hình của bộ chứa để thiết lập giao diện:

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

Khách sẽ hành xử giống như BIOS đã thiết lập giao diện và chỉ cần sử dụng nó.

Đặc biệt là khám phá lxc.network.ipv4.gateway.


Cám ơn! Điều này đã cứu mạng tôi ... container của tôi sẽ luôn cố gắng lấy địa chỉ dhcp mới ... đặt nó thành một giá trị cố định bên trong container (tĩnh) dẫn đến việc container không khởi động được nữa!
Dominik Dorn

Lưu ý rằng điều này không hoạt động tốt nếu máy chủ bị đình chỉ và tiếp tục. Lxc tiếp tục với địa chỉ IP được phân bổ nhưng máy chủ cho rằng nó không còn địa chỉ IP nữa. Tôi đã tìm thấy nó là tốt hơn để cấu hình dnsmasq cho lxc-net và cung cấp một địa chỉ cố định ở đó.
HRJ

@HRJ - Bạn nên bao gồm 'làm thế nào' trong bình luận hoặc liên kết đến giới thiệu thay vì chỉ nói 'làm điều đó'. Đây là một trang web kỹ thuật và bạn nên nói một cái gì đó thực sự có thể sử dụng.
Ian Macintosh

2
Có vẻ như vị trí chính xác để thực hiện việc này là cả trong / etc / default / lxc nơi bạn có thể đặt phạm vi của mình (xem LXC_DHCP_RANGE) và trong /etc/dnsmasq.d-av Available / lxc theo tài liệu hoặc trang web của dnsmasq
Ian Macintosh


4

Vì bạn đang cầu nối, bạn cần phải thiết lập địa chỉ IP trong container chỉ , và không phải trên máy chủ. Máy chủ chỉ nên có địa chỉ IP riêng .


2

Tôi mới làm điều đó vào một ngày khác với Ubuntu 14.04. Nó đơn giản. Bạn chỉ cần chỉnh sửa /etc/network/interfacestệp trong thùng chứa của mình và đặt tệp này:

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

Thay thế mọi biến bằng giá trị mong muốn.

Bạn không phải làm gì khác!

PS: Lưu ý khoảng trắng trước một số dòng. Nó là bắt buộc.


điều này dẫn đến việc container của tôi không khởi động được nữa (máy chủ Ubuntu 14.04) .. câu trả lời từ sebastianwagner hoạt động với tôi.
Dominik Dorn

2

Cách tốt nhất tôi tìm thấy và nhanh nhất là sử dụng hồ sơ lxc

lxc profile list - ra lệnh cho danh sách tất cả các hồ sơ bạn có Sau đó

lxc profile copy default minecraft(đây là tên của hồ sơ mới của bạn)

Sau đó lxc profile edit minecraft

Điều này sẽ đến

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:

sau đó lưu nó

tiếp theo gán hồ sơ cho container LXC của bạn như thế này

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

sau đó chỉ cần khởi động lại container và địa chỉ IP mới của bạn được đặt thành container đó


1

Tôi có thể thiết lập chính xác các thùng chứa lxc của mình sau khi làm theo câu trả lời của @Enrique Moreno Lều, vì vậy tôi sẽ giải thích những gì cần làm chi tiết hơn trong trường hợp bạn không biết cách thiết lập các mục khác.

1. Truy cập container LXC của bạn thông qua lxc-attachlệnh

Chỉ huy:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Xem cấu hình hiện tại của bạn với ifconfig

Chỉ huy

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. Lấy địa chỉ, netmask và gateway

Xem kết quả của ifconfiglệnh trên, sau đó chúng ta thấy:

Địa chỉ là địa chỉ bạn muốn, bạn có thể thay đổi nó thành 10.0.3.166.

Netmask có: 255.255.255.0

Cổng : Đối với cổng bạn sử dụng địa chỉ quảng bá với ở đây là 10.0.3.255

Như bạn có thể thấy ở trên, bạn hiện có tất cả thông tin bạn cần để điền vào khách của bạn (container) /etc/network/interfaces.

4. Nhận dns-nameserversgiá trị.

Ban hành lệnh:

cat /etc/resolv.conf

Nhưng có lẽ tốt nhất là sử dụng Google DNS, cũng như 8.8.8.88.8.4.4

5. Chỉnh sửa /etc/network/interfacesbên trong CONTAINER

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đã được thay thế bằng ip acác phiên bản debian / ub
rvazquezglez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.