내 목표는 호스트의 브리지 인터페이스를 사용하여 일부 QEMU/libvirt 기반 게스트를 설정하여 각 게스트 VM이 내 LAN 네트워크에서 DHCP 할당 IP 주소를 갖도록 하는 것입니다. 나는 너무 복잡하지 않은 가상 머신 구성을 성공적으로 설정하고 사용했으며 내 하드웨어가 가상화를 지원한다는 것을 알고 있으므로 말하자면 본론으로 들어가려고 합니다.
토폴로지
각 노드는 1Gbps 이더넷을 통해 연결됩니다(따라서 무선 인터페이스 없음).
[라우터]---[스위치 1]---[스위치 2]---[호스트]
주인
- 우분투 16.04.5 실행
- 관리 활동을 위해 dhcp로 구성된 1x 1Gbps NIC(em1)
- 고정 IP 주소(br0/eth1 슬레이브)가 있는 브리지로 구성된 1x 1Gbps NIC
- 브리지 연결은 동일한 LAN 네트워크에 있는 다른 호스트의 SSH 및 ping을 사용하여 성공적으로 테스트되었습니다. 인터페이스 파일에서 스패닝 트리 프로토콜을 명시적으로 비활성화했으며 brctl show 명령은 eth1이 유일한 인터페이스인 브리지를 올바르게 표시합니다.
게스트 설치를 위해 virt-install을 사용해 보세요
설치 명령
virt-install --name={guest-name} --vcpus=2 --memory=4096 --network bridge=br0
--cdrom={.iso-img-path} --disk size=20,path={diskimg-path} --os-variant=debian8
--graphics vnc,password={pass},listen=0.0.0.0 --noautoconsole
지금까지 관찰된 동작 및 문제 해결
성공적인 설치를 위해 게스트 VM VNC에 연결
Debian 9 그래픽 설치 프로그램이 호스트 브리지 인터페이스를 통해 DHCP에 대해 게스트 네트워크 인터페이스를 자동으로 구성할 수 없다고 보고합니다.
주문하다'sudo tcpdump -i br0 | sudo tcpdump -i br0 |'(아래 출력)은 브로드캐스트되는 요청만 표시하고 응답은 표시하지 않습니다.
10:08:57.833669 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, 52:54:00:8a:9e:69에서 요청(oui 알 수 없음), 길이 300
기술적인 배경 지식이 있지만 낮은 수준의 세부 사항과 DHCP 문제를 올바르게 해결하는 방법에 익숙하지 않습니다.
업데이트 1
Ubuntu 호스트에 tshark를 구성하고 Wireshark를 실행하는 노트북을 이더넷을 통해 라우터의 스위치 포트에 연결했습니다.
참고: 제가 아는 한, 제 라우터는 포트 미러링이나 포트 모니터링을 지원하지 않습니다.
새로운 토폴로지
[라우터]---[스위치1]---[스위치2]---[호스트-Tshark]
|
[Deb9.5-Wireshark]
Tshark 명령 및 결과
[]$ tshark -w out.pcap -f "udp port 68 or port 67" -i any
[]$ tshark -r out.pcap -V | grep -e Frame -e Bootstrap -e User\ Datagram\ Protocol -e Bootp\ flags -e "Internet Protocol Version 4"
Frame 295: 344 bytes on wire (2752 bits), 344 bytes captured (2752 bits) on interface 0
Frame Number: 295
Frame Length: 344 bytes (2752 bits)
[Frame is marked: False]
[Frame is ignored: False]
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Bootstrap Protocol (Discover)
Bootp flags: 0x0000 (Unicast)
- 위에서 캡처 명령을 시작한 다음 빠르게 Debian 9 설치 VNC로 이동하고 DHCP 자동 구성을 다시 시도한 다음 캡처를 빠르게 중지했습니다.
- 캡처가 시작된 후 캡처 횟수가 증가하기 시작했지만 그래픽 설치에 DHCP 구성을 다시 시도하도록 지시할 때까지 모든 패킷은 위의 출력과 동일하게 보였습니다. (일부 패킷이 전달 루프에 걸려 있을 수 있습니까?)
- 호스트에서 Tshark를 사용하기 전에 랩톱에서 Wireshark를 사용하여 집에 와서 몇 가지 필터를 사용해 보았지만 Wireshark로 테스트하는 동안 DHCP/BOOTP(검색) 패킷이 들어오는 것을 보지 못했습니다.
- Bootp 플래그는 유니캐스트로 표시되어 있지만 IP src/dst는 Discover 패킷을 브로드캐스트하고 응답을 기다리는 것처럼 보이게 만듭니다. DHCP에 대해 더 잘 아는 사람이라면 누구나 이 문제를 이해하는 데 도움을 줄 수 있습니다.
업데이트 2 – 해상도 증가
그래서 다음으로 시도한 것은 DHCP를 사용하여 패킷에서 MAC 주소를 검색하고 라우터 GUI에서 고정 IP를 구성하는 것이었습니다. 설치 프로그램의 네트워크 구성 부분을 통과할 수 있었기 때문에 효과가 있었지만 미러 서버에 연결하여 패키지 관리자를 구성해야 하는 지점에 도달했을 때 실패했습니다.
이제 ARP 확인은 나에게 친숙한 것이므로 DHCP 검색 패킷과 유사하게 브리지에서 전송된 ARP 패킷이 응답되지 않는다는 것을 알았습니다. LAN의 다른 호스트에서 브리지 인터페이스로 ping을 보내는 패킷을 검사할 때 응답의 소스 필드에 있는 MAC 주소가 잘못된 것을 확인했습니다. Linux 커널은 느슨하게 결합된 시스템에서 IP 주소를 "시스템 개체"로 처리하므로 여러 인터페이스를 동일한 네트워크(192.168.1.0/24)에 연결해도 특정 IP가 있는 패킷을 처리하는 데 어떤 물리적 인터페이스가 사용되는지 보장되지 않습니다. 관련된.
이 문제를 해결하기 위해 시스템의 모든 물리적 인터페이스를 브리지 인터페이스 정의에 추가했고 재부팅 후 모든 것이 제대로 작동했습니다. 이것은 이상적인 설정은 아니지만 작동하고 DHCP는 예상대로 작동합니다.