
Linux 브리지와 VLAN 필터링을 실험하고 있지만 몇 가지 문제가 있습니다.
내가 가진 것은 ens19에 도착하는 트렁크(태그된 프레임)가 있는 VM입니다. 내가 원하는 것은 이 포트를 Linux 브리지에 연결하고 이 브리지에는 그 뒤에 완전한 TCP/IP 스택(호스트의 스택)이 있는 필요한 VLAN에 레이블이 지정된 "가상" 인터페이스가 있는 것입니다.
내 실험에서는 VLAN 3과 5로 제한했지만 확장이 쉬워야 한다는 생각입니다. ens19의 하위 인터페이스로 대체될 수 있기 때문에 그 용도는 크지 않을 것 같습니다. 그러나 나중에 ens19 포트를 gretap 인터페이스와 연결하여 터널에서 여러 VLAN을 순환시킬 것이라는 관심이 생겼습니다.
나는 더미 및 탭 인터페이스를 사용하여 테스트를 수행했지만 이러한 인터페이스의 특성상 작동하지 않는 것 같습니다. br0.3 하위 인터페이스로 테스트했는데 클라이언트가 ARP 응답을 받았지만 PING은 ICMP 응답을 받지 못했습니다.
ip link add name br0 type bridge vlan_filtering 1
ip link set dev br0 up
ip link add link br0 name br0.3 type vlan id 3
ip link set dev ens19 master br0
ip link set ens19 up
ip link set dev br0 up
ip link set dev br0.3 up
ip addr add 10.3.0.106/22 dev br0.3
답변1
멍청한 다리
현재 설정에서는 트래픽 통과가 없습니다. 기본적으로 모든 포트와 브리지 자체 인터페이스에서 VLAN 1을 사용하기 때문에 모든 것이 VLAN 인식 브리지에 의해 필터링됩니다. VLAN ID 3이 있는 프레임이 도착하거나 방출되면 필터와 일치하지 않으므로 삭제됩니다.
현재 실험이 작동하도록 하려면 브리지를 "멍청한" 브리지로 다시 설정하십시오.
ip link set dev br0 type bridge vlan_filtering 0
이제 태그가 지정된 트래픽은 에 ens19
도착(태그 지정)되고 br0
(다른 곳으로 전달되지 않는 경우) 태그가 해제되어 br0.3
다음 위치에 도달합니다.라우팅스택(예: IPv4, ARP 또는 IPv6 유형). 태그가 지정되지 않은 트래픽이 있는 경우에도라우팅을 통해 스택 br0
. VLAN 태그가 지정된 다른 모든 트래픽은 이를 요구할 항목이 없기 때문에 삭제됩니다.라우팅스택 자체는 VLAN을 이해하지 못합니다.
브리지는 VLAN ID의 의미를 고려하지 않고 VLAN 태그가 지정된 프레임을 전달하므로 여러 VLAN에서 동일한 MAC 주소가 사용되는 경우 문제가 발생할 수 있습니다. 이는 교량에서 전달 데이터베이스 처리를 혼란스럽게 하거나 추가 장비 등에 중복 또는 루프가 나타날 수 있습니다.
따라서 실제로 VLAN 인식 브리지가 선호됩니다.
VLAN 인식 브리지
브리지가 중립적인 역할을 해야 하고 목표가 새로운 VLAN별 포트 등을 쉽게 생성하는 것이라면변화VLAN 하위 인터페이스에 필요한 것처럼 인터페이스를 삭제하고 다시 생성할 필요 없이 포트의 VLAN을 사용하면 실제로 VLAN 인식 브리지가 유용합니다. 이 구성에서는 여전히 VLAN 하위 인터페이스를 사용할 수 있지만 br0
이를 피할 수 있습니다. 대신에베스각 VLAN에 대한 쌍: 하나는 브리지 포트로, 다른 하나는 라우팅 스택과 통신하는 인터페이스로 사용됩니다(이는베스네트워크 네임스페이스를 전혀 포함하지 않음)
br0
ens19
사용 가능한 다른 물리적 인터페이스가 없는 경우 관리로 사용하는 경우를 제외하고는 라우팅에 자체를 사용할 필요가 없습니다 . 아래 설정은 모든 항목에 대해 기본 포트 VLAN ID 1을 가져오는 대신 br0
설정을 통해 자체를 포함하여 추가된 모든 포트를 완전히 잠그는 것으로 시작됩니다. vlan_default_pvid 0
또한 기본적으로 아무것도 통과할 수 없으므로 구성 중에 누출 위험 없이 즉시 브리지 포트를 UP으로 설정할 수 있습니다.
VLAN 인식 브리지에서 VLAN을 구성하려면bridge vlan
새로운 명령rtnetlink(7)
커널 API. 더 이상 사용되지 않는 brctl
명령은 이 작업을 수행할 수 없습니다.이전 커널 API(또는 /sys
)은 이에 대한 기능을 제공하지 않습니다.
OP의 사례는 연속적인 단계로 진행됩니다.
생성 및 트렁크 링크
브리지에는 고유한 MAC 주소가 할당되어야 합니다.기본적으로 브리지 포트에서 사용 가능한 가장 낮은 MAC 주소를 상속합니다., 시간이 지남에 따라 변경될 수 있습니다.베스아래 방법을 사용하면 새 VLAN이 추가될 때 시간이 지남에 따라 브리지의 MAC 주소가 변경될 수 있습니다. 이는 이 방법의 실제 문제는 아니지만 함께 사용하는 경우 VLAN 하위 인터페이스 방법에 영향을 미치거나
br0
IP가 있는 경우 의 사용에 영향을 미칠 수 있습니다. 주소 자체. 최근 시스템 기반 시스템에서는 다음과 같습니다.이미 완료되었습니다체계화된관련된 네트워크 관리자가 무엇이든, 이 동작이 원치 않는 경우에도 MAC 주소를 명시하지 않고 생성된 새로운 가상 이더넷과 유사한 인터페이스를 감지하는 경우.ip link add name br0 address 12:34:56:78:9a:bc up type bridge vlan_filtering 1 vlan_default_pvid 0 ip link set dev ens19 up master br0
선택 사항: 관리를 위해
br0
전송(태그됨)된 VLAN 1(태그 없음)을 계속 사용합니다 .ens19
bridge vlan add vid 1 dev ens19 bridge vlan del vid 1 dev br0 self pvid untagged
브릿지 인터페이스 자체
self
를 구성할 때 추가 키워드가 필요합니다.VLAN을 추가합니다
ens19
(여기에서는 VLAN ID 3 및 5).bridge vlan add vid 3 dev ens19 bridge vlan add vid 5 dev ens19
또는 ens19를 고려하는 경우그만큼업링크 트렁크 포트에 다른 모든 VLAN을 추가하면 됩니다.
bridge vlan add vid 2-4094 dev ens19
-compressvlans
내용을 다시 표시하는 데 사용합니다 . 그렇지 않으면 4093줄의 단일 항목이 표시됩니다.bridge -compressvlans vlan show dev ens19
이제 다음을 사용하여 동일한 전체 결과를 얻을 수 있습니다.
VLAN 하위 인터페이스
br0
(여기서는 VLAN ID 3 사용)브리지 인터페이스(여기) 또는 브리지 포트(다음 글머리 기호)에 VLAN ID가 추가되지 않은 경우 브리지가 VLAN 인식 브리지로 설정되면 해당 트래픽이 전달되지 않습니다.
다음 작업에 VLAN ID를 추가하고 태그를 지정해야 합니다
br0
.bridge vlan add vid 3 dev br0 self
위와 같이 모든 항목을 한 번만 미리 추가할 수 있습니다.
bridge vlan add vid 2-4094 dev br0 self
그런 다음 일반적인 VLAN 하위 인터페이스가 그 위에 추가됩니다.
ip link add link br0 name br0.3 up type vlan id 3 ip addr add 10.3.0.106/22 dev br0.3
인터페이스와 연결된 VLAN ID(및 IP LAN 10.3.0.0/22에 대한 일반적인 설정)를 변경하려면 하위 인터페이스를 삭제하고 다른 VLAN ID를 사용하여 새 인터페이스를 다시 생성해야 합니다. 인터페이스는
type vlan
재구성할 수 없습니다.아니면 한 쌍의베스인터페이스(여기서는 VLAN ID 5 사용)
pvid untagged
VLAN 하위 인터페이스를 사용하는 것과 동일한 역할을 합니다. 브리지에서 포트로 태그를 해제하고, 포트에서 브리지로 태그를 지정합니다. 하나의 VLAN ID만 PVID가 될 수 있습니다. 여기서는 단일 VLAN ID가 사용됩니다.ip link add name vlan5 up type veth peer name br0vlan5 ip link set br0vlan5 up master br0 bridge vlan add vid 5 dev br0vlan5 pvid untagged ip addr add 10.3.4.106/22 dev vlan5
예에서 선택한 이름이 VLAN ID를 반영하므로 혼동을 일으킬 수 있다는 점을 제외하면 관련 VLAN ID는 (거의) 즉시 변경될 수 있습니다(여기에서는 5에서 6으로 변경).
bridge vlan del vid 5 dev br0vlan5 bridge vlan add vid 6 dev br0vlan5 pvid untagged
에 모든 VLAN을 아직 구성하지 않은 경우
ens19
해당 VLAN도 변경하십시오.bridge vlan del vid 5 dev ens19 bridge vlan add vid 6 dev ens19