브리징 및 iptables SNAT 충돌

브리징 및 iptables SNAT 충돌

저는 여기에서 설정을 작업 중이며 한 가지 사소한 예외를 제외하고 작동하도록 합니다.

내 브리지 한쪽에 있는 장치가 인터넷에 SNAT되지 않습니다.


다이어그램/개요:

                Primary_Network (Site_A)
                        |
                        |
Internet ------- Linux_Bridge_GW (GW)
                        |
                        |
                 Secondary/CoLo Site (Site_B)

설정은 다음과 같습니다.

  1. Site_A에는 모든 프로덕션 서버와 워크스테이션이 있습니다.
  2. Site_B에는 장애 조치를 수행하고 인터넷 연결 서비스를 제공하려는 서버 세트가 있습니다.
  3. GW에는 트렁킹되고 적절한 VLAN 트래픽을 전달하는 두 개의 인터페이스가 있습니다(사이트 간 트래픽의 레이어 2 전파 허용). //이 모든 것이 완벽하게 작동합니다.
  4. 발생하는 문제는 Site_B의 호스트가 Site_A(동일한 서브넷)에 기본 GW를 가지고 있고 GW가 전달되는 VLAN에 IP를 가지고 있지 않다는 것입니다.
  5. Site_A의 모든 호스트는 문제 없이 인터넷에 접속할 수 있습니다.
  6. GW에는 인터넷으로 향하는 트래픽에만 사용되는 서브넷의 주소가 있습니다. (이는 Websense가 불필요한 트래픽을 구문 분석할 필요가 없도록 하기 위해 수행되었습니다. 우리는 이 VLAN을 Websense가 있는 스위치의 모니터 포트 소스로 사용합니다.)

내 생각에 무슨 일이 일어나고 있는지:

  1. 패킷/프레임은 인터넷으로 향하는 Site_B의 physdev에 들어옵니다.
  2. 커널은 패킷을 보고 이를 브리지의 반대편에서 해당 호스트의 기본 GW로 전달합니다.
  3. Site_A(코어 네트워크의 Default-GW 포함)는 패킷이 자신이 모르는 호스트로 향한다는 것을 확인하고 이를 기본 GW(인터넷에 연결되어 있으므로 Linux 브리지)로 보냅니다.
  4. 커널은 "야, 전에 본 적 있어"라고 말하므로 패킷에 대해 SNAT'를 수행하지 않고 블랙홀이 있는 인터넷으로 보냅니다.

내가 생각하는 이유:

  1. NIC에 연결된 인터넷의 tcpdump는 개인 주소가 소스인 인터페이스를 떠나는 패킷을 보여줍니다.

내가 원하는 것:

  1. 패킷을 SNAT로 만듭니다.
  2. 아래와 같은 것이 멋질 것입니다.
    • Site_B에서 패킷이 들어옵니다.
    • 커널은 패킷이 자신이나 개인 주소로 향하지 않는다는 것을 확인합니다.
    • 커널은 "좋아요, 당신은 인터넷을 사용할 예정이므로 저기 WAAAY인 일반 기본 GW로 전달하는 대신 이 인터페이스를 보내겠습니다."라고 말합니다.
    • 패킷은 인터넷에서 들어오고 목적지 호스트가 어느 사이트에 있는지에 따라 적절한 브리지 physdev로 전송됩니다.

답변1

패킷이 브리지되는 경우 물론 iptable은 패킷을 볼 수 없습니다.

해결책? ebtables를 사용하여 인터넷 바인딩 패킷을 머신으로 리디렉션하여 SNAT 처리를 받도록 합니다(MAC 맹글링에는 -j REDIRECT를 사용합니다).

관련 정보