LXC 게스트에 대한 외부 IP 주소를 구성하는 방법은 무엇입니까?


18

Ubuntu 12.04의 LXC 기능을 탐색 중이며 실제로 다음과 같은 네트워크를 설정하고 싶습니다.

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

손님이 LAN에 완전히 액세스 할 수 있고 클라이언트에서 볼 수있는 "평평한"네트워크를 원합니다. http://libvirt.org/formatdomain.html#elementsNICSBridge에 설명 된대로 libvirt / KVM으로 네트워킹을 연결하는 데 익숙합니다.

호스트에서 :

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

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

192.168.56.201은 외부 세계에 보이지 않는 것처럼 보입니다. 다음 중 하나를 수행해야 할 것 같습니다.

1) 호스트 및 게스트에서 수동으로 라우팅 설정

2) 호스트에서 가상 인터페이스를 미리 만들고 게스트가이를 사용하도록 구성하십시오 lxc.network.type=phys. 실제로 작동하는지 모르겠습니다.

우분투에 중점을두고 있지만 RHEL / Fedora에 대한 답변도 유용합니다 ....


1
후속 조치 : br0을 무차별 모드로 설정했으며 지금 원하는 것을하고있는 것 같습니다. 나는 이것이 표준 관행이라고 생각하지만 내가 읽은 많은 LXC 튜토리얼 중 어느 것도 다루지 않았습니다. 피드백을받는 경우를 대비하여이 질문을 한동안 열어
두겠습니다

나는 거의 동일한 작업을 수행했습니다 (조금 더 수동 설정 제외) : 각 lxc 구성의 netup 스크립트는 브리지 (호스트의)에 veth를 추가하고 각 컨테이너의 수동 IP 설정, 각 컨테이너의 추가 스크립트 / 인터페이스 설정 라우팅 (호스트에서 ip4 전달을 통해). 그러나 내가 알기로는 두 솔루션 모두 컨테이너가 자신의 IP 주소를 거의 모든 것으로 설정할 수 있음을 의미합니다 (또한 호스트의 기본 인터페이스를 브리지에 추가하는 것은 약간 불편합니다). 그래서 나는 또한 피드백 / 솔루션에 관심이 있습니다.
HoverHell

답변:


13

다음과 같이 줄을 잃어 버렸지 만 이것은 매우 옳습니다.

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

데비안에서 LXC 게스트를 실행하고 있습니다. 먼저 다음에서 호스트 브리지를 설정합니다 (쉬운 방법) /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

귀하의 경우, 당신은 그것을 br0불렀고 나는 그것을 불렀습니다 wan. 다리는 원하는대로 불릴 수 있습니다. 이 작업을 먼저 수행하십시오. 실패한 경우 (예 :brctl

그런 다음 LXC 구성이 해당 브리지에 가입하도록 설정됩니다.

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

HoverHell이 언급했듯이 컨테이너에 루트가있는 사람은 IP 주소를 변경할 수 있습니다. 네. 브리지 (일명 이더넷 스위치)입니다. 이를 방지하려면 호스트에서 방화벽 규칙을 사용할 수 있습니다. 적어도 제 경우에는 패킷이 호스트의 iptables를 거쳐야합니다.


10
모두 감사합니다. 슬프지만, 나는 이것으로 되돌아 왔고, 구글을 통해 이것을 발견했고, 내가 원래의
asker 인

2
@derobert : 확인이 가능한 다시는 그 다음이었다, 그러나 auto또한 유효한 값입니다 lxc.network.ipv4.gateway내 이해, 그리고, veth 인터페이스가 연결됩니다되는 다리의 IP로 기본 설정됩니다.
0xC0000022L

브리지 인터페이스에는 자체 IP가 필요합니까? 경우 wan_phy인터넷에 직면하고 그것이 내가 바로 내 LXC 손님을 구성 할 것을 다른 공용 IPv4 주소와 동일한 서브넷에 있어야하기 때문에, 다음 다리 IP는 또 다른 유효한 공용 IPv4 주소 여야 할 것이다? 그러나 그것은 상당히 낭비되는 것처럼 보입니다. askubuntu.com/a/884293/394569 는 브리지 주소 구성이 반드시 필요한 것은 아니라고 제안합니다.
josch

@josch이 예에서 wan_phy에는 IP가 없으며 대신 브리지에 있습니다. "호스트"가 외부 IP를 가지기를 원하지 않는다면 IP가 전혀 필요하지 않을 것입니다.
derobert

6

나는 LXC에 완전히 들어 가지 않았습니다.

하지만 내 웹 사이트 중 일부에 인터넷 서비스를 제공하는 LAN에 자체 정적 IP가있는 여러 컨테이너를 설정했습니다 ...

어쩌면 이것이 당신이 원하는 것에 도움이 될 수 있습니다.

여러 컨테이너를 실행합니다.

호스트 컴퓨터에서 각 컨테이너 및 호스트 컴퓨터를 추가하여 호스트 파일을 편집했습니다. 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

저장 후 ...

다시, 호스트 컴퓨터에서 네트워크 및 브리지를 다음으로 설정합니다.

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

네트워크 위에는 LAN 용 라우터 IP가 있습니다. (내부) 주소 및 브로드 캐스트 는 호스트 컴퓨터, 내부 IP이며 나중에 인터넷 액세스, 웹 서버, ftp 등에 VHOST를 사용합니다.

LXC 컨테이너 1-4 I 설정 구성 :

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

이제 컨테이너 1 IP = 192.168.1.101

추가 컨테이너가 LAN에 자체 정적 IP를 갖도록 반복합니다.

컨테이너 1-4에서

호스트에서 로그인하십시오.

lxc-console -n CONTAINERNAME,

& 각 컨테이너 네트워크를 정적, eth0으로 설정합니다.

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

컨테이너마다 LAN에서 사용할 수있는 자체 IP가 있습니다 (로컬). U 퍼티를 사용하여 테스트하기 위해 각 개별 로컬 IP를 SSH 할 수 있습니다!

그 후 im은 확실히 vhost to container ip / load balancers / proxy / 등등과 같이 인터넷을 통해 어떻게 실행하는지 알아 내야합니다.

어쨌든이 설정이 도움이 될 수 있습니다.


LXC 컨테이너 구성에서 IP 및 게이트웨이 등을 구성하면 컨테이너 내부에서 IP 및 게이트웨이 등을 반복 할 필요가 없습니다. 대신 iface스탠자를 manual(not static또는dhcp ) . up, down, dns-nameservers등은 여전히 등 데비안에서 사용할 수 있습니다
0xC0000022L

1

아직 LXC를 가지고 놀지는 않았지만이 기사는 이더넷 브리지를 사용한 네트워크 구성 (방법 2 확인)을 도와줍니다 .

구성에 대한 힌트를 제공하려면 (br0이 이미 올바르게 설정되어 있다고 가정합니다) :

  1. 다음을 사용하여 한 쌍의 정맥 장치를 만들어야합니다. ip link add type veth
  2. 이전 명령은 2 개의 가상 인터페이스 veth0 및 veth1을 작성했습니다.
  3. 이제 가상 인터페이스 veth0을 브리지에 추가하십시오. brctl addif br0 veth0
  4. lxc 쉘에서 다음을 입력하십시오 : ns_exec -nm -- /bin/bash
  5. 이제 다른 가상 if를 lxc 쉘의 네트워크 네임 스페이스로 설정해야합니다 : ip link set veth1 netns PID_OF_LXC_SHELL
  6. 이제 lxc 쉘에서 veth1을 원하는 IP 주소 (예 : 192.168.56.201)로 구성하면 모든 설정이 완료됩니다.

이것을 전혀 테스트하지 않았습니까? 당신은 아마 현상금을 얻을 것이지만, 당신의 대답은 전혀 도움이되지 않으며 OP와 정확히 같은 설정을 가지고 있습니다.
Jonas G. Drange

더 도와 드릴까요? 내 대답에 아무런 효과가없는 단계가 있었습니까, 아니면 수행했지만 문제가 해결되지 않았습니까? 내 대답에서 말했듯이 LXC는 할 일에 대한 위시리스트에 있지만 아직 실제 테스트를 시작하지 않았습니다.
Huygens 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.