LXC 컨테이너의 퍼블릭 IP 주소


26

좋아, 그래서 LXC 컨테이너에서 네트워킹을 수행하는 방법을 알고 싶다. 다른 웹 사이트에서 얻은 일종의 모호한 정보뿐만 아니라 실제 초보자 가이드가 작동하게합니다. 대부분의 예제는 사람들이 테스트 할 수 있도록 기본적으로 설정되어 있으므로 하나의 서비스를 실행하고 싶습니다 ... 예를 들어 웹 서버.

Ubuntu 12.04 LTS를 실행 중이며 LXC가 설치되어 있으며 컨테이너를 만들고 시작하고 중지 할 수 있습니다. 내 서버에는 분명히 공개 IP를 가지고 있으며 컨테이너를 설정하여 공개 IP를 가질 수있는 방법을 알고 싶습니다. 현재 컨테이너에서 브리지가 이미 존재하는 것 같으므로 컨테이너에 작동하도록 공용 DHCP 범위를 컨테이너에 제공하거나 컨테이너에 고정 IP 주소를 수동으로 할당해야 할 것 같습니다.

컨테이너에 IP를 정적으로 할당하려면 어떻게해야합니까? 호스트의 브리지 구성을 변경해야합니까? MACVLAN 옵션을 사용하는 것이 실제로 더 낫습니까?

도움을 주시면 감사하겠습니다.


LXC에 익숙하지 않지만 일반적으로 isp는 하나의 공개 IP 주소 만 제공합니다. 정적 IP가 여러 개인 패키지가 있습니까?
wlraider70

퍼블릭 IP는 유일한 사용 사례는 아니며,로드 밸런서 컨테이너에 2 개의 퍼블릭 IP를 할당하고 싶지만 다양한 다른 서비스 전용의 전용 LAN IP를 원합니다. 그렇게하면 컨테이너를 다른 하드웨어로 옮기는 경우 IP를 옮기는 것만 큼 쉽습니다 (DNS는 우리가 사용하는 일부 구성 요소에 대해 이와 관련하여 작동하지 않습니다)
David Parks

답변:


23

필자는 서버에 단일 NIC가 있고 호스트와 LXC 게스트간에 해당 NIC를 공유해야한다고 가정합니다. 브릿지 사용이 포함됩니다. 다리는 소유하고 관리합니다 eth0. 호스트는 이제 br0대신 자체 네트워킹을 구성합니다 eth0. LXC 게스트는 브리지에 연결되도록 구성되어 있습니다.

  1. 호스트에서 sudo apt-get install bridge-utils.

  2. 호스트에서 eth0브릿지로 교체하십시오 .

    이것은 위험합니다. 이것을 잘못하면 서버가 잠길 수 있습니다. 로컬 로그인을 사용 가능하게하고 로컬 콘솔 액세스가 작동하는지 확인하여 문제점이있는 경우이 변경 사항을 되돌릴 수 있습니다.

    에서 /etc/network/interfaces:

    1. 교체 auto eth0와 함께 auto br0.
    2. 바꾸다:

      iface eth0 inet dhcp
      

      와:

      iface br0 inet dhcp
          bridge_ports eth0
      

      정적 네트워크 구성이있는 경우 다음을 교체하십시오.

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      와:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      당신은 변경하고 eth0대한 br0과 추가 bridge_ports eth0라인을.

    3. 호스트를 재부팅하십시오. 이 작업을 로컬에서 수행 한 경우 sudo ifdown eth0시작하기 전에 실행 한 sudo ifup br0후에도 실행 됩니다. 브리지가 작동하는 데 약간의 시간이 걸릴 수 있으므로 재부팅 후 5 분 동안 기다렸다가 모두 손실되었다고 가정하십시오.

  3. 이름이 지정된 LXC 컨테이너를 퍼블릭 IP로 옮기려면 :

    1. 컨테이너를 중지하십시오.
    2. 호스트에서 편집 하고로 변경 하십시오 ./var/lib/lxc/container_name/configlxc.network.linkbr0
    3. 호스트에서 평소처럼 공용 IP를 편집 하고 구성하십시오 (필요에 따라 DHCP 또는 정적 구성). 인터페이스는 컨테이너의 관점에서 여전히 호출 됩니다./var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. 컨테이너를 다시 시작하십시오.
  4. 새 LXC 컨테이너의 기본값을 변경하려면 /etc/lxc/default.conf호스트를 편집 하고로 변경 lxc.network.link하십시오 br0.

  5. 모든의 LXC 제공하는 NAT 다리를 필요로하지 않는 경우, 호스트 편집에 (즉. 모든 용기는 새로운 다리를 대신 사용합니다) /etc/default/lxc변화 USE_LXC_BRIDGE"false"호스트 실행에 다음과 sudo service lxc restart.


감사! 비슷한 질문이 많이 있습니다. 그러나이 답변은 마침내 물건을 작동시키는 데 도움이되었습니다.
Mausy5043

1

Robie,이 답변을 게시 해 주셔서 감사합니다.이 작업을 시도하기 위해 머리카락을 지르고 있었고 이것이 유일한 방법이었습니다!

다른 관리자의 지침을 명확하게하기 위해 알아 낸 몇 가지 사항을 언급해야한다고 생각했습니다.

내 호스트에는 게스트의 eth0에 여러 개의 고정 IP 별칭이 할당되어 있습니다. 예를 들면 다음과 같습니다.

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

이제 우리는 같은 방식으로 br0을 설정하고 싶지 않으며, 위에 표시된 Robie와 같은 별칭이없는 하나의 IP 만 원합니다.

컨테이너 debian8에 5.5.5.5를 할당한다고 가정 해 봅시다.

편집 /var/lib/lxc/debian8/etc/network/interfaces및 추가 :

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

그런 다음이 명령을 발행하십시오. route add default gw <gateway-ip, in my case 5.5.5.1>

그 후 컨테이너를 재부팅하면 모든 것이 마침내 작동합니다! :)


1

나는 같은 문제가 있었고이 해결책 (빠르고 더러운)이 있습니다.

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

서버에서 : route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

또한 필요한 경우 업스트림 라우터에 경로를 추가하십시오.

아마도 최상의 솔루션은 아니지만 큰 노력이 필요하지 않습니다! 건배.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.