고정 IP로 브리지 된 LXC 컨테이너 설정


15

각각 공개 정적 IP가있는 호스트에 여러 개의 LXC 컨테이너를 설정하려고합니다.

호스트가 최신 Ubuntu를 실행 중입니다. eth0이라는 단일 네트워크 인터페이스가 있습니다. 정적 IP는 인터넷에서 핑이 가능하며 이름은 eth0 : 210, eth0 : 211 ... 콜론 뒤의 숫자는 주소의 최하위 바이트입니다. 이 인터페이스 외에도 호스트의 퍼블릭 IP에 br0 설정이 있습니다. lo, veth2LPP9A 및 lxcbr0 인터페이스도 있습니다. lxcbr0에는 개인 IP 주소가 있습니다.

호스트 / etc / network / interfaces는 다음과 같습니다.

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

지금까지 eth0을 호스팅하기 위해 LXC 컨테이너 브리징을 포함한 다양한 온라인 소스를 사용 하여 공개 IP 를 설정하여이 설정을 도와 줄 수있었습니다.

컨테이너의 설정 파일은 다음과 같습니다.

lxc.network.type = veth
lxc.network.link = br0

문제가 발생했기 때문에이 파일에서 정적 lxc.network.ipv4 구성을 제거했습니다. 이 구성으로 lxc-ls --fancy를 실행하면 동일한 퍼블릭 IP가 두 번 출력됩니다. 또한 컨테이너 / etc / network / interfaces의 서브넷 구성을 망칠 수 있습니다.

컨테이너의 인터페이스 파일에 대해 말하자면 다음과 같습니다.

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

게이트웨이를 주석 처리하고 route add 명령을이 파일에 추가해야했습니다. 그렇지 않으면 컨테이너를 부팅하는 데 몇 분이 걸립니다.

호스트의 / proc / sys / net / bridge / bridge-nf- * 파일은 모두 0으로 설정되어 있습니다. / proc / sys / net / ipv4 / ip_forward 값은 1입니다.

문제는 컨테이너의 "route -n"이 원하는 것처럼 보이지만 컨테이너에서 ping을 할 수 없다는 것입니다. 컨테이너의 IP가 무엇인지 SSHing하면 호스트에 연결됩니다.

편집 : 호스트에서 컨테이너의 정적 IP를 제거하는 것이 도움이되었지만 지금은 새로운 오류가 발생합니다. 호스트에서 컨테이너를 핑하려고하면 Redirect HostFrom, New nexthop이 발생합니다. 패킷은 게이트웨이에서 호스트로 반복적으로 전달됩니다. 호스트에서 추적 경로를 실행하면 첫 번째 중지가 게이트웨이에 있음을 나타냅니다. 그런 다음 다른 모든 경로는 * * *입니다. 컨테이너가 온라인인지 여부에 관계없이 동일한 문제가 발생합니다.

답변:


17

사실 당신은 할 수 에서 주소와 게이트웨이를 설정 내에서 호스트 키워드를 사용하여 모든의 인터페이스를 만지지 않도록 컨테이너를하고 구성합니다 manual.

이것을 손님 안에 두십시오 /etc/network/interfaces:

auto eth0
iface eth0 inet manual

또한 인터페이스를 설정하려면 컨테이너의 구성 파일에 그대로 두십시오.

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

게스트는 BIOS가 이미 인터페이스를 설정하고 사용하는 것처럼 동작합니다.

특히 탐색하십시오 lxc.network.ipv4.gateway.


고마워! 이것은 내 생명을 구했습니다 ... 컨테이너는 항상 새로운 DHCP 주소를 얻으려고 시도합니다 ... 컨테이너 내부의 고정 값으로 설정하면 (정적) 컨테이너가 더 이상 부팅되지 않습니다!
Dominik Dorn

호스트가 일시 중지되고 다시 시작되면 제대로 작동하지 않습니다. lxc는 할당 된 ip 주소를 계속 사용하지만 호스트는 더 이상 ip 주소가 없다고 생각합니다. lxc-net에 대해 dnsmasq를 구성하고 고정 주소를 유인하는 것이 좋습니다.
HRJ

@HRJ-댓글에 '어떻게'를 포함 시키거나 단순히 '할 것'이라고 말하지 말고 심판에 링크하십시오. 이 사이트는 기술 사이트이므로 실제로 사용할 수있는 것을 말해야합니다.
이안 매킨토시

2
이 작업을 수행하는 올바른 위치는 / etc / default / lxc에 있고 범위를 설정할 수있는 곳 (LXC_DHCP_RANGE 참조)과 dnsmasq 문서 또는 맨 페이지에 따라 /etc/dnsmasq.d-available/lxc에 있습니다.
Ian Macintosh


4

브리징 중이므로 호스트가 아닌 컨테이너 에만 IP 주소를 설정해야 합니다. 호스트에는 고유 한 IP 주소 만 있어야 합니다 .


2

방금 우분투 14.04와 함께했습니다. 간단하다. /etc/network/interfaces컨테이너 내부 의 파일 을 편집 하고 다음을 설정해야합니다.

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

모든 변수를 원하는 값으로 바꾸십시오.

당신은 하지 마십시오 다른 작업을 수행해야합니다!

추신 : 일부 줄 앞의 공백을 확인하십시오. 필수입니다.


이로 인해 컨테이너가 더 이상 부팅되지 않습니다 (우분투 14.04 서버). sebastianwagner의 답변이 저에게 효과적입니다.
Dominik Dorn

2

내가 찾는 가장 빠른 방법은 lxc 프로파일을 사용하는 것입니다

lxc profile list -당신이 가진 모든 프로파일 목록을 명령하십시오.

lxc profile copy default minecraft(이것은 새 프로필의 이름입니다)

그때 lxc profile edit minecraft

이 올 것이다

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

그런 다음 저장

다음과 같이 프로파일을 LXC 컨테이너에 할당하십시오.

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

그런 다음 컨테이너를 다시 시작하면 새 IP 주소가 해당 컨테이너로 설정됩니다.


1

@Enrique Moreno Tent의 답변을 따른 후 lxc 컨테이너를 올바르게 설정할 수 있으므로 다른 항목을 설정하는 방법을 모르는 경우 더 자세히 설명합니다.

1. lxc-attach명령을 통해 LXC 컨테이너에 액세스

명령:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. 현재 구성을 확인하십시오 ifconfig

명령

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

3. 주소, 넷 마스크 및 게이트웨이 얻기

ifconfig위 명령 의 결과를 보면 다음과 같습니다.

주소 는 원하는 주소 이며 10.0.3.166으로 변경할 수 있습니다.

넷 마스크 가 있습니다 : 255.255.255.0

게이트웨이 : 게이트웨이의 브로드 캐스트 주소는 10.0.3.255입니다.

위에서 볼 수 있듯이 현재 게스트 (컨테이너)를 채우는 데 필요한 모든 정보가 있습니다 /etc/network/interfaces.

4. dns-nameservers가치 얻기 .

다음 명령을 실행하십시오.

cat /etc/resolv.conf

하지만 어쩌면 최고의 구글 DNS, asre 사용 8.8.8.88.8.4.4

5. /etc/network/interfaces컨테이너 내부 편집

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8


ifconfig로 대체되었습니다 ip a최근 데비안 / 우분투 버전에서 linuxconfig.org/...
rvazquezglez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.