LXC 컨테이너의 공용 IP 주소

LXC 컨테이너의 공용 IP 주소

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

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

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

어떤 도움이라도 주시면 감사하겠습니다.

답변1

내 접근 방식에서는 서버에 단일 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

답변2

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만 원합니다.

따라서 5.5.5.5를 컨테이너 debian8에 할당한다고 가정해 보겠습니다.

편집 /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>

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

답변3

나는 같은 문제가 있었고 이 솔루션(빠르고 더러운)을 가지고 있습니다.

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

또한 필요한 경우 업스트림 라우터에 경로를 추가합니다.

아마도 최선의 해결책은 아니지만 큰 노력이 필요하지 않을 것입니다! 건배.

관련 정보