저는 vagrant-libvirt를 사용하고 있으며 가상 머신을 LAN에 연결하여 DHCP 임대를 받고 네트워크에서 액세스할 수 있도록 하고 싶습니다. vagrant-libvirt는 분명히 브리지를 생성하지 않으므로 브리지를 생성했습니다.
brctl addbr br0
enp10s0을 추가합니다.
brctl addif br0 enp10s0
그리고 배웠다Linux 네트워킹의 중요한 교훈:
참고: 브리지에 인터페이스를 추가하면 인터페이스의 기존 IP 주소가 손실됩니다. 브리지에 추가하려는 인터페이스를 통해 원격으로 연결하면 연결이 끊어집니다. 이 문제는 시스템 시작 시 생성되는 브리지를 스크립팅하여 해결할 수 있습니다.
커널이 인터페이스를 다시 초기화했기 때문에 주소가 손실되었다는 것을 이해할 수 있지만 왜 복구되지 않았습니까? enp10s0의 네트워크에 dhcp 서버가 있어서 순진하게 다시 돌아올 것이라고 예상했습니다. (저는 호스트와의 연결을 끊지 않고 생성하고 삭제할 수 있는 Hyper-V의 가상 스위치를 사용하는 데 익숙합니다.)
enp10s0에 연결하기 전에 브릿지에 IP 주소를 할당하지 않았기 때문인가요? 아니면 아직 다리가 세워지지 않았기 때문일까요? 아니면 둘다?
답변1
왜 bridge-utils에 이러한 알려진 제한 사항이 있어 사용자를 괴롭히는지 모르겠습니다. 일부는 익숙한 brctl 도구를 선호할 수도 있지만, 적어도 귀하의 경우에는 동일한 문서에 문서화된 최신 iproute2 도구를 사용해 보는 것이 좋습니다.아치 위키 페이지당신이 링크했습니다. 귀하의 경우:
ip link add name br0 type bridge
ip link set br0 up
ip link set enp10s0 up
ip link set enp10s0 master br0
나는 더 깊은 지식은 없지만 적어도 iproute2 도구 중 일부는 Bridge-utils와 같은 이전 도구보다 최신 커널 인터페이스를 사용한다고 믿습니다. brctl이 실패한 경우 위의 방법이 작동한다면 이것이 이유라고 생각됩니다.
답변2
TLDR: 브리지 인터페이스를 이더넷 스위치로 취급합니다. 모든 [가상] 호스트는 스위치에 연결되고 물리적 포트는 다른 스위치에 대한 업링크입니다. 컴퓨터와 업링크 케이블을 스위치의 동일한 포트에 연결하는 것은 의미가 없습니다. 이는 호스트에 해당 물리적 포트를 계속 사용할 수 없는 이유입니다.
시스템에 브리지를 추가하면 물리적 포트의 특성이 변경됩니다. 일반적으로 물리적 포트의 MAC 주소와 IP 주소는 일대일 대응입니다. 이것이 ARP 프로토콜이 기대하는 것입니다. 특정 호스트에 도달하기 위해 패킷을 보낼 이더넷 주소를 결정할 수 있기 때문입니다. 이를 일반적으로 호스트 인터페이스라고 합니다.
브리지를 추가하면 모든 것을 변경하고 싶을 것입니다. 일반적으로 머신에 여러 호스트(아마도 가상 머신 또는 컨테이너)를 가질 계획이며 ARP에는 각 실제 머신 또는 가상 머신에 대해 별도의 MAC 주소가 필요합니다. 따라서 물리적 포트를 캡처하는 브리지를 만듭니다. 그런 다음 가상 머신을 추가하면 해당 MAC 주소가 브리지에 추가되고 가상 포트가 생성되며 이더넷 네트워크가 작동합니다. 브리지는 내부 가상 포트/머신 간의 이더넷 전환도 처리합니다.
일탈을 허용해...너할 수 있다이론적으로는 단일 호스트 포트에 여러 MAC 주소를 할당하는 것도 가능하지만 동일한 물리적 포트에 있는 두 컴퓨터가 서로 통신할 수 있도록 하려는 경우 문제가 발생할 수 있습니다. 그래서 거의 이루어지지 않습니다. 마찬가지로 당신도할 수 있다브리지에 여러 개의 물리적 포트를 추가한 다음 포트 간 전환을 허용하거나 이를 링크 집계 그룹으로 결합할 수 있습니다. 이러한 링크 집계 그룹은 용량이나 안정성을 얻기 위해 단일 가상 링크로 함께 작동하는 여러 링크(케이블)입니다.
마지막으로 생성한 브리지에 호스트를 추가하여 원하는 작업을 수행할 수 있습니다. 다음은 서버가 시작될 때 호스트 자체뿐만 아니라 연결할 가상 머신에 대한 브리지를 설정하는 서버의 /etc/netplan/01-netcfg.yaml 파일의 예입니다.
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp9s0: {}
wifis: {}
bridges:
br0:
dhcp4: true
interfaces:
- enp9s0
그러면 enp9s0과 연결된 브리지가 설정되고 호스트가 IPv4(및 IPv6 SLAAC)와 함께 사용할 수 있도록 브리지에 MAC 주소가 추가됩니다. 이 넷플랜을 인스턴스화하면 다음과 비슷한 내용이 표시됩니다.
user@server:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 70:cd:60:aa:1b:29 brd ff:ff:ff:ff:ff:ff
3: enp10s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 70:cd:60:aa:4e:cf brd ff:ff:ff:ff:ff:ff
4: wls5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 04:0c:ce:1d:61:07 brd ff:ff:ff:ff:ff:ff
altname wlp13s0
16: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d6:34:90:36:5e:c2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.95/24 brd 192.168.1.255 scope global dynamic noprefixroute br0
valid_lft 82942sec preferred_lft 82942sec
inet6 1024:2048:4096:6530:f468:8db5:f14c:fa4d/64 scope global temporary dynamic
valid_lft 3439sec preferred_lft 3439sec
inet6 1024:2048:4096:6530:d434:90ff:fe36:5ec2/64 scope global dynamic mngtmpaddr
valid_lft 3439sec preferred_lft 3439sec
inet6 fe80::d434:90ff:fe36:5ec2/64 scope link
valid_lft forever preferred_lft forever
17: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:39:55:a0 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe39:55a0/64 scope link
valid_lft forever preferred_lft forever
이 출력에는 물리적 브리지 인터페이스(인터페이스 2, enp9s0)와 브리지 자체(인터페이스 16, br0)가 표시됩니다. 이 설정에서 호스트는 주소 192.168.1.95의 IP 연결을 가지며 qemu-kvm 가상 머신은 (인터페이스 17, vnet2)를 통해 브리지에 연결됩니다. VM의 MAC 주소는 55:a0으로 끝나며, Linux 서버는 이를 학습하기 위해 ARP를 수행하지 않는 한 VM이 해당 인터페이스에 어떤 IP 주소를 임대했는지 알 수 없습니다. 이 배열에서는 호스트와 가상 머신이 LAN에 연결되고 서로 연결될 수 있습니다. 브리지된 인터페이스가 있는 다른 VM은 인터페이스 17, vnet2처럼 보이며 일반적으로 qemu-kvm은 VM이 시작될 때 필요에 따라 가상 인터페이스를 생성합니다.
사용하지 않는 다른 이더넷 포트(enp10s0) 또는 wlan 포트(wls5)를 브리지에 추가하여 더 멋진 효과를 얻을 수도 있지만 이는 기본 사항을 보여주며 실제로 호스트 시스템에서 사용하는 것입니다.