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을 올바르게 구성했다고 가정합니다):
- 다음 명령을 사용하여 veth 장치 쌍을 생성해야 합니다.
ip link add type veth
- 이전 명령은 veth0 및 veth1이라는 2개의 가상 인터페이스를 생성했습니다.
- 이제 브리지에 가상 인터페이스 veth0을 추가합니다.
brctl addif br0 veth0
- lxc 쉘에 다음을 입력하십시오:
ns_exec -nm -- /bin/bash
- 이제 lxc 쉘의 네트워크 네임스페이스에 또 다른 더미를 설정해야 합니다.
ip link set veth1 netns PID_OF_LXC_SHELL
- 이제 lxc 쉘에서 veth1을 원하는 IP 주소(예: 192.168.56.201)로 구성하여 준비가 되었습니다.
답변4
lxc
네트워크 인터페이스 유형을 설정할 수 있는 LXD 클라이언트 CLI는 이를 구성 파일 macvlan
로 설정합니다.default
lxc profile device set default eth0 nictype macvlan
프로필을 사용하는 컨테이너에는 default
LAN IP가 있습니다.