![Linux의 가상 스위치 이해](https://linux55.com/image/106004/Linux%EC%9D%98%20%EA%B0%80%EC%83%81%20%EC%8A%A4%EC%9C%84%EC%B9%98%20%EC%9D%B4%ED%95%B4.png)
Linux에서 가상 스위치를 설정하는 방법이 혼란스럽습니다. 나는 다음과 같이 진행합니다 :
ip link add name br0 type bridge
ip link set br0 up
그러면 br0이라는 가상 스위치가 생성됩니다. 이제 내 컴퓨터에 eth0이라는 물리적 네트워크 장치가 있고 KVM/qemu에서 생성된 탭 장치 vnet0이 있다고 가정해 보겠습니다. Tap 장치는 구성을 통해 br0에 자동으로 연결되며 eth0은 수동으로 추가할 수 있습니다.
ip link set eth0 master br0
이제 두 장치 모두 스위치 br0에 연결되어야 합니다.
eth0에는 IP 주소 192.168.1.1을, 가상화 내부의 네트워크 인터페이스에는 192.168.1.2를 할당했습니다. 물론 탭 인터페이스 자체는 이 주소에 대한 정보를 전혀 모릅니다.
가상 스위치 대신 물리적 스위치를 사용하여 이를 설정하는 경우 호스트 시스템에서 주소 192.168.1.2를 ping할 수 있기를 원합니다. 그러나 이 IP는 ping을 통해 접근할 수 없습니다.
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Host Unreachable
...
왜 그런 겁니까?
나는 eth0이 자신이 속한 모든 이더넷 세그먼트에 ARP 요청을 보낼 것으로 예상합니다. 이는 물리적이며 br0으로 정의됩니다. vnet0은 MAC 주소를 사용하여 ARP 요청에 응답해야 합니다.
내가 찾은 해결책은 br0에도 IP 주소를 할당하는 것이었습니다.
ip addr add 192.168.1.3/24 dev br0
이제 ping이 잘 작동합니다.
답변1
eth0에 IP 주소 192.168.1.1을 할당했습니다.
여기서 이 설정이 잘못되었습니다. eth0
브리지 멤버 인터페이스(계층 2)로 설정되므로 IP(계층 3) 주소가 없어야 합니다.
(192.168.1.0/24에 대한 두 개의 직접 경로와 관련된 구성이 깨질 수 있습니다.) 두 개의 서로 다른 인터페이스를 통해 그 중 하나만 작동합니다. 그러나 오류 설정의 구체적인 세부 사항은 중요하지 않습니다. )
왜 그런 겁니까?
나는 eth0이 자신이 속한 모든 이더넷 세그먼트에 ARP 요청을 보낼 것으로 예상합니다. 이는 물리적이며 br0으로 정의됩니다.
eth0은 ARP를 보내지 않습니다. 브리지의 일부가 되면 더 이상 레이어 3 인터페이스가 아닙니다.
- 이 브리지의 (계층 2) 포트는 다음과 같습니다.
eth0
,tap0
, 그리고- 다리 그 자체.
- 이 브리지의 (레이어 3) 참가자는 (동일한 순서로)
- 통과하는 모든 장치
eth0
(대부분: 로컬 네트워크의 다른 장치들) - 반대편에 무엇이 있든
tap0
(아마도 같을 것입니다) br0
상호 작용
- 통과하는 모든 장치