대상 Mac 주소로 iptables로 패킷 표시

대상 Mac 주소로 iptables로 패킷 표시

지정된 Mac 주소로 이동하는 패킷을 표시해야 합니다.

와 함께 셰이퍼에 사용하려면 이것이 필요합니다 tc.

--mac-destination에는 존재하지 않습니다 iptables.

또한 나는 다음을 사용하려고했습니다 ebtables.

ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT

하지만 아무것도 표시하지 않습니다(적어도 ebtables -t nat -L --Lc0개의 카운터를 보여줍니다).

도와주세요! 매우 감사합니다!

답변1

비결은 iptables를 다음 --mac-source과 결합하는 것입니다 CONNMARK.

  • 먼저 --mac-source관심 있는 Mac 주소에서 오는 패킷을 일치시키는 데 사용합니다. 이 Mac 주소로 가는 패킷에 관심이 있으므로 잘못된 방향이지만 이제는 할 수 있습니다.
  • 전체 연결을 표시하는 데 사용합니다 CONNMARK. 즉 양방향(!)과
  • 연결 표시에서 표시를 설정하십시오.--restore-mark


# lan interface
if_lan=eth0

# create 'mark_mac' table for marking connections:
iptables -t mangle -N mark_mac
iptables -t mangle -A mark_mac -j MARK --set-mark 1234
iptables -t mangle -A mark_mac -j CONNMARK --save-mark

# mark connections involving mac address:
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 9c:4e:36:aa:bb:cc -j mark_mac

# mark packets going to mac:
iptables -t mangle -A POSTROUTING -o $if_lan -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark


처음에는 이것이 LAN에서 시작되는 TCP 연결에만 작동할 것이라고 생각했지만, 정의에 따르면 --state NEWTCP와 UDP 모두에 대해 양방향으로 작동해야 합니다(!)

또한보십시오보낸 사람 MAC 주소를 기반으로 하는 Linux의 정책 라우팅이것이 이 답변의 영감이었습니다.

답변2

iptablesOSI 계층 3에서 작동하므로 MAC 주소에 대해 전혀 모릅니다.

사실, 그것은맥 모듈그러나 여기에는 추가 필터만 포함되어 있습니다 --mac-source. 이는 들어오는 이더넷 패킷이 소스의 MAC 주소를 전달하기 때문입니다. 그러나 Wi-Fi를 통해 들어오는 패킷에는 이러한 MAC 주소가 존재하지 않으며 나가는 패킷과 관련이 없습니다. 위의 참조 내용은 다음과 같습니다.

이는 이더넷 장치에서 나오고 PREROUTING, FORWARD 또는 INPUT 체인으로 들어가는 패킷에만 의미가 있습니다.

의 경우 ebtables, Wi-Fi 프레임에는 하나의 MAC 주소가 없기 때문에 우선 이더넷 프레임에서만 사용할 수 있습니다. 둘째, 위에서 말했듯이 MAC 소스 주소는 IP 패킷에 존재하지 않습니다.

ARP 패킷을 제어하고 싶다면 명령이 있다는 것을 빨리 알 수 있습니다.

arp-mac-dst [!] 주소[/mask]

(R)ARP MAC 대상 주소 사양

하지만 다시 한 번 말씀드리지만 이는 ARP 프로토콜이하다IP 프로토콜과 달리 MAC 주소를 사용합니다.

관련 정보