[리눅스 기반 브릿지] 2. 이더넷 프레임이 ebtables 체인을 통과하는 방법
참조 : http://ebtables.netfilter.org/br_fw_ia/br_fw_ia.html#section2
ebtables는 TCP/IP 네트워크 모델에 의한 OSI 계층 2(데이터 링크 계층) 또는 계층 1(링크 계층, 네트워크 액세스 계층)에 에서 동작합니다.
이더넷 계층에서 작동하는 브리지에 따라 로컬 컴퓨터로 향하는 패킷이 반드시 IP 레이어에 따라 로컬 컴퓨터로 향하는 것은 아닙니다. 이것은 라우팅이 작동하는 방식입니다(MAC 대상은 라우터이고 IP 대상은 통신하려는 실제 대상자입니다).
Linux 브리징 코드에는 6개의 관문이 정의되어 있으며, 그 중 ebtables용으로 BROUTING 관문이 추가되었습니다.
관문은 소프트웨어가 해당 위치를 통과하는 패킷/프레임을 처리하기 위해 자체적으로 연결할 수 있는 네트워크 코드의 특정 위치를 말합니다. 예를 들어, ebtables FORWARD 체인을 담당하는 커널 모듈은 브리지 FORWARD 관문에 연결됩니다. 이것은 모듈이 커널에 로드되거나 부팅될 때 수행됩니다.
ebtables BROUTING 및 PREROUTING 체인은 브리징 결정 전에 통과하므로 이러한 체인은 브리지에서 무시할 프레임도 볼 수 있습니다. 이 체인을 사용할 때 이를 고려해야 합니다. 또한 체인은 전달되지 않는 브리지 포트로 들어오는 프레임을 볼 수 없습니다.
프레임에 대한 브리지의 결정(그림 2b 참조)은 다음 중 하나일 수 있습니다.
1) 대상 MAC 주소가 브리지의 다른 쪽에 있는 경우 브리지합니다.
2) 대상 MAC이 있는 상자의 위치가 브리지에 알려지지 않은 경우 모든 포워딩 브리지 포트에 플러딩합니다.
3) 목적지 MAC 주소가 브리지 또는 포트 중 하나의 주소인 경우 상위 프로토콜 코드(IP 코드)로 전달합니다.
4) 대상 MAC 주소가 브리지의 같은 쪽에 있으면 무시합니다.
Ebtables에는 그림 2c와 같이 filter, nat 및 broute의 세 가지 테이블이 있습니다.
broute 테이블에는 BROUTING 체인이 있습니다.
filter 테이블에는 FORWARD, INPUT 및 OUTPUT 체인이 있습니다.
nat 테이블에는 PREROUTING, OUTPUT 및 POSTROUTING 체인이 있습니다.
filter OUTPUT과 nat OUTPUT 체인은 분리되어 사용됩니다.
그림 2b와 2c는 ebtables 체인이 브리지 관문에 부착된 위치를 명확하게 보여줍니다.
브리지에 종속된 NIC가 프레임을 수신하면 프레임은 먼저 BROUTING 체인을 거칩니다. 이 체인에서는 프레임을 Routing할지 브리지할지 여부를 선택할 수 있어 brouter를 만들 수 있습니다.
BROUTING은 라우터가 일부 프레임/패킷을 연결하고(즉, 링크 계층 정보를 기반으로 전달) 다른 프레임/패킷을 라우팅(즉, 네트워크 계층 정보를 기반으로 전달)하는 장치입니다. 브리지/Route 결정은 구성 정보를 기반으로 합니다.
예를 들어, Router는 두 네트워크 사이의 특정 트래픽(NetBEUI, ARP 등)을 브리징하는 동안 2개의 네트워크 사이의 IP 트래픽에 대한 일반 Router 역할을 하는 데 사용할 수 있습니다. IP 라우팅 테이블은 브리지 논리 장치를 사용하지 않으며 대신 상자에는 브리지 포트(브리지 종속 NIC)이기도 한 물리적 네트워크 장치에 할당된 IP 주소가 있습니다.
BROUTING 체인의 기본 결정은 브리징입니다.
다음으로 프레임은 PREROUTING 체인을 통과합니다. 이 체인에서 프레임의 대상 MAC 주소(DNAT)를 변경할 수 있습니다. 프레임이 이 체인을 통과하면 브리징 코드가 프레임을 보낼 위치를 결정합니다. 브리지는 대상 MAC 주소를 보고 이를 수행하며 네트워크 계층 주소(예: IP 주소)는 신경 쓰지 않습니다.
브리지가 프레임이 로컬 컴퓨터를 대상으로 한다고 결정하면 프레임은 INPUT 체인을 통과합니다. 이 체인에서 브리지 상자로 향하는 프레임을 필터링할 수 있습니다. INPUT 체인을 통과한 후 프레임은 네트워크 계층 코드(예: IP 코드)로 전달됩니다. 따라서 라우팅된 IP 패킷은 ebtables FORWARD 체인이 아니라 ebtables INPUT 체인을 통과합니다. 이것은 논리적입니다.
그렇지 않으면 프레임이 브리지의 다른 쪽으로 보내질 수 있습니다. 그렇다면 프레임은 FORWARD 체인과 POSTROUTING 체인을 통과합니다. 브리지된 프레임은 FORWARD 체인에서 필터링할 수 있습니다. POSTROUTING 체인에서 MAC 소스 주소(SNAT)를 변경할 수 있습니다.
로컬에서 생성된 프레임은 브리징 결정 후 nat OUTPUT, filter OUTPUT 및 nat POSTROUTING 체인을 통과합니다. NAT OUTPUT 체인은 대상 MAC 주소를 변경할 수 있도록 하고 filter OUTPUT 체인은 브리지 박스에서 발생하는 프레임을 필터링할 수 있습니다. nat OUTPUT 체인은 브리징 결정 후에 탐색되므로 실제로는 너무 늦습니다. 속도를 빠르게 하려면, 이 부분을 변경해야 합니다. nat POSTROUTING 체인은 위에서 설명한 것과 동일합니다.
대상 장치가 논리적 브리지 장치인 경우 라우팅된 프레임이 이 세 가지 체인을 통과할 수도 있습니다.
'네트워크 Study' 카테고리의 다른 글
[리눅스 기반 브릿지] 3. 브리지 및 라우터로 사용되는 machine (0) | 2022.04.20 |
---|---|
[리눅스 기반 브릿지에서의 ebtables/iptables 상호 작용] 1. 소개 (0) | 2022.04.19 |