Làm cách nào để định cấu hình địa chỉ IP bên ngoài cho khách LXC?


18

Tôi đang khám phá các tính năng LXC trong Ubuntu 12.04 và tôi thực sự muốn thiết lập một mạng như thế này:

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

Tôi chỉ muốn một mạng "phẳng" nơi khách có quyền truy cập đầy đủ vào mạng LAN và có thể nhìn thấy từ khách hàng. Tôi đã quen với việc kết nối mạng với libvirt / KVM, như được mô tả ở đây: http://libvirt.org/formatdomain.html#elementsNICSBridge

Trên máy chủ:

# /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 cho khách đầu tiên:

# /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

Có vẻ như 192.168.56.201 là vô hình với thế giới bên ngoài, đó không phải là điều tôi muốn. Có vẻ như tôi phải làm một trong những điều sau:

1) Thiết lập định tuyến thủ công trên máy chủ và khách

2) Làm gì đó hokey ... tạo giao diện ảo trên máy chủ trước thời hạn và định cấu hình cho khách sử dụng chúng lxc.network.type=phys. Tôi không biết nếu nó thực sự sẽ làm việc.

Tôi tập trung vào Ubuntu, nhưng câu trả lời cho RHEL / Fedora cũng hữu ích ....


1
Theo dõi: Tôi đặt br0 sang chế độ lăng nhăng và dường như nó đang làm những gì tôi muốn bây giờ. Tôi đoán đây là tiêu chuẩn thực hành nhưng nó không được đề cập trong bất kỳ hướng dẫn LXC nào tôi đọc qua. Tôi sẽ để câu hỏi này mở trong một thời gian trong trường hợp tôi nhận được bất kỳ phản hồi nào ...
twblamer

Tôi cũng đã làm như vậy (ngoại trừ cài đặt thủ công thêm một chút): tập lệnh netup trong mỗi cấu hình lxc để thêm veth vào cầu nối (trên máy chủ), thiết lập IP thủ công trong mỗi vùng chứa, tập lệnh / giao diện bổ sung trong mỗi vùng chứa để thiết lập lên định tuyến (thông qua chuyển tiếp ip4 trên máy chủ). Nhưng, theo như tôi thấy, cả hai giải pháp đều có nghĩa là container có thể đặt địa chỉ IP của riêng mình thành khá nhiều thứ (và việc thêm giao diện chính của máy chủ vào một cây cầu hơi bất tiện). Vì vậy, tôi cũng quan tâm đến một số thông tin phản hồi / giải pháp.
HoverHell

Câu trả lời:


13

Điều này khá đúng, mặc dù bạn đang thiếu một dòng như thế này:

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

Tôi có một khách LXC đang chạy trên Debian. Đầu tiên, bạn thiết lập cầu chủ (cách dễ dàng), trong /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

Trong trường hợp của bạn, bạn đã gọi nó br0và tôi đã gọi nó wan. Cây cầu có thể được gọi là bất cứ điều gì bạn muốn. Bạn nhận được điều này làm việc đầu tiên nếu nó thất bại, điều tra với (ví dụ,)brctl

Sau đó, cấu hình LXC của bạn được thiết lập để tham gia cây cầu đó:

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

Như HoverHell lưu ý, ai đó có root trong container có thể thay đổi địa chỉ IP. Vâng. Đó là một cây cầu (còn gọi là chuyển mạch Ethernet). Nếu bạn muốn ngăn chặn điều đó, bạn có thể sử dụng các quy tắc tường lửa trên máy chủ lưu trữ ít nhất là trong trường hợp của tôi, các gói cần phải đi qua iptables của máy chủ.


10
Cảm ơn mọi người. Thật là buồn, nhưng tôi vừa quay lại vấn đề này, đã tìm thấy điều này qua google và quên mất tôi là người hỏi ban đầu ...
twblamer

2
@derobert: không chắc chắn điều này đã có sẵn từ trước, nhưng autocũng là một giá trị hợp lệ lxc.network.ipv4.gatewayvà theo hiểu biết của tôi, mặc định là IP của cây cầu mà giao diện veth được kết nối.
0xC0000022L

Giao diện cầu có yêu cầu IP riêng không? Nếu wan_phyphải đối mặt với internet, thì IP cầu nối sẽ phải là một địa chỉ IPv4 công khai, hợp lệ khác vì nó phải nằm trong cùng mạng con với các địa chỉ IPv4 công cộng khác mà tôi sẽ định cấu hình cho khách lxc của mình, phải không? Nhưng điều đó có vẻ khá lãng phí. Askubfox.com/a/884293/394569 đề nghị rằng việc định cấu hình một địa chỉ cầu là không bắt buộc.
josch

@josch Trong ví dụ đó, wan_phy không có IP, thay vào đó là cầu nối. Tuy nhiên, tôi nghi ngờ rằng nó cần một IP, nếu bạn không muốn "máy chủ" có IP bên ngoài.
derobert

6

Tôi chưa nhận được đầy đủ vào LXC,

nhưng tôi đã thiết lập nhiều container với ip tĩnh trong mạng cung cấp dịch vụ internet cho một số trang web của tôi ...

Có lẽ điều này có thể giúp đỡ, về những gì bạn muốn cho bạn.

Tôi chạy nhiều container, như vậy,

TRÊN MÁY HOST Tôi đã chỉnh sửa tệp của máy chủ, thêm từng máy chủ và máy chủ lưu trữ: 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

sau khi lưu ...

Một lần nữa, Trên máy chủ, tôi đặt mạng & cầu nối thành:

# /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

phía trên mạng là ip bộ định tuyến của tôi, cho lan. (nội bộ) địa chỉ & quảng bá là máy chủ, ip nội bộ, sau này tôi sử dụng VHOST để truy cập internet, máy chủ web, ftp, v.v.

CHO CONCIN LXC 1-4 TÔI CÀI ĐẶT CONFIG THÍCH SO:

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**

bây giờ Container 1 IP = 192.168.1.101

tôi lặp lại cho các container bổ sung để có ip tĩnh trên lan ..

trong container 1-4,

đăng nhập từ máy chủ:

lxc-console -n CONTAINERNAME,

& i đặt từng mạng container thành tĩnh, eth0 thành:

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

MACHI CONTAINERS CÓ IP CỦA RIÊNG, (cục bộ) CÓ S ONN trên mạng LAN. U CÓ THỂ SSH MỌI IP ĐỊA PHƯƠNG CÁ NHÂN, ĐỂ KIỂM TRA SỬ DỤNG PUTTY!

Sau đó, tôi khá chắc chắn rằng bạn nên tìm ra cách chạy chúng qua internet sau đó, ví dụ, vhost để chứa bộ cân bằng ip / tải / proxy / vv ..

Có lẽ thiết lập này có thể giúp đỡ trong anyway.


Nếu bạn định cấu hình IP và gateway, v.v. trong cấu hình bộ chứa LXC, không cần lặp lại điều đó bên trong bộ chứa. Thay vào đó, đặt khổ ifacethơ thành manual(không statichoặc dhcp). up, down, dns-nameserversVv vẫn có thể được sử dụng trong Debian, vv
0xC0000022L

1

Tôi chưa chơi với LXC, nhưng bài viết này sẽ giúp bạn hiểu: cấu hình mạng sử dụng cầu nối ethernet (kiểm tra Phương pháp 2).

Để cung cấp cho bạn một số gợi ý về cấu hình (Tôi giả sử bạn đã được chỉnh sửa đúng cách):

  1. Bạn cần tạo một cặp thiết bị veth bằng cách sử dụng ip link add type veth
  2. Lệnh trước đã tạo 2 giao diện ảo: veth0 và veth1
  3. Bây giờ thêm giao diện ảo veth0 vào cầu: brctl addif br0 veth0
  4. trong vỏ lxc của bạn, gõ: ns_exec -nm -- /bin/bash
  5. Bây giờ chúng ta phải đặt ảo khác nếu vào không gian tên mạng của shell lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Bây giờ bằng cách định cấu hình veth1 trong vỏ lxc thành địa chỉ IP bạn muốn (ví dụ 192.168.56.201), bạn sẽ được thiết lập tất cả.

Bạn chưa thử cái này à? Bạn có thể sẽ nhận được tiền thưởng, nhưng câu trả lời của bạn hoàn toàn không giúp tôi và tôi có thiết lập chính xác như OP.
Jonas G. Drange

Làm thế nào tôi có thể giúp bạn nhiều hơn? Có một bước trong câu trả lời của tôi không có tác dụng, hoặc bạn đã thực hiện chúng và nó không giải quyết được vấn đề? Không, như đã nói trong câu trả lời của tôi, LXC nằm trong danh sách mong muốn của tôi về những việc cần làm, nhưng tôi chưa bắt đầu thử nghiệm thực sự.
Huygens
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.