eth0
vethXXXXXX와 vethXXXXXX 사이에 브리지를 만들었고 br0
브리지는 잘 작동하지만 때로는 알 수 없는 이유와 상황으로 인해 이러한 vethXXXXXX 인터페이스를 브리지에 계속 추가합니다. 이런 일이 발생하면 내 LXC 인스턴스가 인터넷과 통신할 수 없습니다.
내가 달렸을 때 brctl delif br0 vethNbUtXk && brctl delif br0 vethYqTf0F
, 모든 것이 정상으로 돌아왔습니다.
이상하게 생긴 인터페이스가 어디서 나오는지 아시나요?
root@ubuntuserver:/var/lib/lxc# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.080027ca5f7a no eth0
vethNbUtXk
vethYqTf0F
lxcbr0 8000.000000000000 no
virbr0 8000.000000000000 yes
이상한 vethXXXXXX 어댑터 중 하나를 생성할 때의 ifconfig 예
vethPBkvAC Link encap:Ethernet HWaddr fe:14:5c:cb:62:d6
inet6 addr: fe80::fc14:5cff:fecb:62d6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3194 errors:0 dropped:0 overruns:0 frame:0
TX packets:3214 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:309019 (309.0 KB) TX bytes:311213 (311.2 KB)
답변1
미래의 독자들을 위해 나는 LXC를 구성하고 브리징을 파악하는 데 나와 함께 작업하고 있는 몇몇 동료들에게 이 이메일을 썼습니다.
글쎄요, 저는 오늘 대부분의 시간 동안 LXC에서 네트워킹하느라 바빴고 이제 상황이 훨씬 더 명확해졌으므로 제가 배운 것을 전달해야겠다고 생각했습니다.
vethILNaLo
먼저 몇 가지 정의를 통해 우리가 무엇을 보고 있는지 알 수 있습니다. (나는 br0 또는 virbr0과 같은 브리지와 eth0과 같은 인터페이스의 차이점을 실제로 이해하지 못하며 해당 인터페이스가 무엇인지 전혀 모릅니다 .)
다리
브리지는 ifconfig에서 인터페이스로 표시되지만 브리지는 다른 2개의 네트워크를 연결하는 것 외에는 아무 작업도 수행하지 않으며 그 자체로는 네트워크 인터페이스가 아닙니다. 를 사용하여 브리지를 보고 변경할 수 brctl show
있으며 /etc/networking/interfaces에서 영구적으로 구성할 수 있습니다.
브리지를 스위치로 생각하는 것이 가장 좋습니다.
우리가 본 교량의 예:
- br0
- lxcbr0
- 바이러스 0
네트워크 인터페이스
인터페이스는 실제로 단일 호스트에 할당되며 단일 인터페이스를 여러 호스트에 할당할 수 없습니다. 호스트는 인터페이스로 네트워크 트래픽을 보내고 받습니다. 선택하는 인터페이스는 route
표시되는 라우팅 테이블에 따라 다릅니다.
브리지가 필요한 이유는 eth0이 호스트 OS에 물리적으로 연결되어 있지만 컨테이너나 다른 가상 머신에도 연결할 수 없기 때문입니다.
우리가 본 물리적 인터페이스의 예:
- 이더넷 0
- vethILNaLo
두 번째 항목에 대한 참고 사항: vethILNaLo
- 이는 시작되는 각 LXC 컨테이너에 대해 생성된 물리적 인터페이스이며, 컨테이너에 연결되고 컨테이너 내에서 eth0으로 간주됩니다.
- LXC 구성 파일에서 이를 정의 할 때마다 또 다른 물리적 인터페이스가 생성되어 컨테이너에 연결됩니다. 이를 컨테이너 내부의 인터페이스 이름을 설정하는 데
lxc.network.type=veth
사용할 수 있습니다 (기본값 eth0, eth1 등은 일반적으로 작동함).lxc.network.name = eth0
- 이 인터페이스가 생성되면 아무 것도 연결되지 않고 전혀 연결되지 않은 것처럼 보입니다.
브리지를 사용하여 vethILNaLo를 네트워크에 연결
브리지는 소프트웨어 기반 스위치와 같다는 점을 기억하십시오. 두 개의 인터페이스를 연결하면 스위치가 물리적 컴퓨터에 연결되는 것과 동일한 방식으로 연결됩니다.
br0을 정의하고 생성할 때 /etc/network/interfaces
기본적으로 스위치를 정의했습니다. 같은 파일에서 eth0을 "스위치" br0에 연결합니다.
iface br0 inet static
bridge_ports eth0
LXC 구성 파일에서 컨테이너 물리적 인터페이스를 동일한 스위치에 연결합니다.
lxc.network.type=veth
lxc.network.link=br0
/etc/network/interfaces
머신 시작 시 설정합니다(호스트 eth0 인터페이스는 항상 "스위치"에 연결되어야 함). LXC는 LXC 컨테이너에 대한 물리적 포트를 생성하고 이를 br0(브리지)이라는 "스위치"에 연결하는 일을 담당합니다. 라우터와 스위치의 차이는 매우 작으므로 이 목적에서는 동일하다고 간주할 수 있습니다. 스위치는 브리지보다 조금 더 똑똑합니다.
lxcbr0과 virbr0은 무엇입니까?
lxcbr0과 virbr0은 모두 LXC에 의해 자동으로 추가되며 동일합니다(virbr0은 이전 버전과의 호환성을 위해 유지되는 이전 버전이고 lxcbr0은 최신 버전이지만 정확히 동일한 작업을 수행합니다). 이 두 브리지("스위치"라고도 함)는 NAT/라우팅 기능도 제공합니다. 따라서 가상 머신을 이러한 브리지에 연결하면 라우터에 연결하는 것과 같습니다.
다른 라우터가 필요하지 않기 때문에(모든 LXC 컨테이너는 네트워크에 자체 IP를 갖습니다) 빌드 문서의 호스트 OS에서 사용하지 않는 브리지 두 개를 제거했습니다.