Linux IP 브리징 및 vlan_filtering

Linux IP 브리징 및 vlan_filtering

저는 이더넷 스위치(KSZ9897)를 지원하기 위해 Linux에서 DSA를 사용하고 있습니다. 스위치는 잘 작동하지만 Linux(커널 4.19)를 통해 브리지 VLAN 필터링을 설정하는 데 문제가 있습니다.

브리지를 생성하고 다음과 같이 멤버 포트를 추가합니다.

ip link add name br0 type bridge
ip link set dev lanB master br0
ip link set dev lanA master br0

이 시점에서 Linux는 "lanB" 인터페이스에 연결된 PC를 ping할 수 있는 br0 인터페이스를 만들었습니다.

이제 VLAN을 사용하여 lanA와 lanB를 분리하고 싶습니다. VLAN 필터링을 활성화하고 PVID를 설정합니다.

ip link set dev br0 type bridge vlan_filtering 1
bridge vlan add dev lanB vid 2 pvid untagged master
bridge vlan add dev lanA vid 3 pvid untagged master

VLAN 설정을 사용하면 브리지 VLAN 상태를 덤프할 수 있습니다.

bridge vlan show
port     vlan ids
lanB     2 PVID Egress Untagged

lanA     3 PVID Egress Untagged

br0      1 PVID Egress Untagged

이 시점에서 문제가 발생합니다. 이제 CPU와 LANB 간에 ping을 수행할 수 있도록 br0 인터페이스를 2 PVID로 설정해야 합니다. 하지만 오류가 발생합니다.

bridge vlan add dev br0 vid 2 pvid
RTNETLINK answers: Operation not supported

CPU 포트의 pvid를 변경할 수 없는 경우 이를 수행하는 방법을 모르겠습니다. 나의 궁극적인 목표는 ip link add link br0 name br0.2 type vlan id 2lanB와 통신하기 위한 VLAN 인터페이스를 추가하는 것입니다. 그러나 br0 스위치 포트가 VLAN 2의 일부로 구성되지 않은 경우 이 작업은 실패합니다.

내가 잘못하고 있는 걸까요, 아니면 뭔가를 놓치고 있는 걸까요?

답변1

브리지 VLAN을 변경하는 명령에는 약간 다른 구문이 필요하다는 것을 알았습니다. 'self'는 장치에 연결되어야 합니다.

bridge vlan add dev br0 self vid 2 pvid

그러면 명령이 예상대로 작동합니다.

관련 정보