내 설정에서 멀티 캐스트 TX 트래픽은 iptables로 표시되었지만 새로운 라우팅 테이블을 사용한 정책 라우팅은 작동하지 않았습니다. 유니 캐스트 TX 패킷에서 작동했지만 (원래 패킷을 eth0에서 eth5로 리디렉션) tc를 사용하면 eth5로 eth0 mcast 트래픽을 얻을 수 있음 src mac 및 src ip 주소가 eth5의 주소로 변경되므로 스위치 학습에 문제가 발생하지 않습니다. 커널 패킷 스케줄링 CONFIG_NET_SCHED에 대한 모든 커널 지원이 활성화되어야합니다
eth0에서 eth5로 리디렉션되는 유니 캐스트 및 멀티 캐스트 트래픽에 대한 WORKS 이하
Netfilter는 커널의 패킷을 나타내는 구조와 직접 상호 작용하는 데 사용할 수 있습니다. sk_buff라는이 구조에는 수정하려는“__u32 nfmark”라는 필드가 있습니다. 그러면 TC는이 값을 읽어 패킷의 대상 클래스를 선택합니다.
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A 출력 -s $ {IP_ADDR_ETH0} -p udp-멀티 포트 일치 --dports 329,330 -o eth0 -j MARK --set-mark 2
스케줄링 정책을 나타내는 트리를 만들고 PRIO qdisc (패킷 스케줄러)를 사용합니다 (사용 가능한 다른 것을 시도 할 수 있음). 장치의 루트에 연결하는 qdiscs
tc qdisc add dev eth0 루트 핸들 15 : prio
이제 한쪽에는 트래픽 조절 정책이 있고 다른쪽에는 패킷 표시가 있습니다. 이 둘을 연결하려면 필터가 필요합니다.
참조 man tc-mirred (8) : mirred 조치를 통해 패킷 미러링 (복사) 또는 패킷을 재전송 (스틸 링) 할 수 있습니다. 미러링은 SPAN (Switch Port Analyzer)이라고도하며 일반적으로 흐름을 분석 및 / 또는 디버그하는 데 사용됩니다.
man tc-fw (8) 참조 : fw-fwmark 트래픽 제어 필터 fw 필터를 사용하면 iptables에 의해 이전에 설정된 fwmark를 기반으로 패킷을 분류 할 수 있습니다. 필터의 '핸들'과 동일하면 필터가 일치합니다. iptables를 사용하면 MARK 대상으로 단일 패킷을 표시하거나 CONNMARK를 사용하여 전체 연결을 표시 할 수 있습니다.
MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address
IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
tc 필터 추가 dev eth0 상위 15 : 0 프로토콜 ip prio 1 핸들 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} 파이프 \ action mirgress egress 리디렉션 dev eth1
위에 설정된 규칙 표시 : tc qdisc show dev eth0 tc filter show dev eth0
위의 설정된 규칙 삭제 / 설정 해제 : tc qdisc del dev eth0 root