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

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

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에 완전히 액세스할 수 있고 클라이언트가 볼 수 있는 "플랫" 네트워크를 원합니다. 나는 아래에 설명된 대로 libvirt/KVM 브리지 네트워킹을 사용하는 데 익숙합니다.http://libvirt.org/formatdomain.html#elementsNICSBridge

호스트 머신에서:

# /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. 이것이 실제로 작동하는지 모르겠습니다.

나는 Ubuntu에 초점을 맞추고 있지만 RHEL/Fedora 답변도 유용합니다 ...

답변1

이것은 거의 정확합니다. 비록 다음 줄을 생략했지만:

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를 통과해야 합니다.

답변2

저는 아직 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이고 나중에 VHOST를 사용하여 인터넷, 웹 서버, FTP 등에 액세스합니다.

LXC 컨테이너 1-4의 경우 다음과 같이 구성을 설정했습니다.

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(로컬)가 있습니다. Putty로 테스트하기 위해 각 개별 로컬 IP에 SSH를 사용할 수 있습니다!

그 후에는 가상 호스트에서 컨테이너 IP/로드 밸런서/프록시/등으로 인터넷을 통해 실행하는 방법을 알아내야 한다고 확신합니다.

어쨌든 이 설정이 도움이 될 것입니다.

답변3

아직 LXC를 사용해본 적은 없지만 이 글이 도움이 될 것입니다.이더넷 브리지를 사용한 네트워크 구성(방법 2를 확인하세요).

구성에 대한 몇 가지 팁을 제공하려면(br0을 올바르게 구성했다고 가정합니다):

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

답변4

lxc네트워크 인터페이스 유형을 설정할 수 있는 LXD 클라이언트 CLI는 이를 구성 파일 macvlan로 설정합니다.default

lxc profile device set default eth0 nictype macvlan

프로필을 사용하는 컨테이너에는 defaultLAN IP가 있습니다.

관련 정보