게이트웨이가 ISP 라우터가 아닌 경우 IP 패킷 캡처

게이트웨이가 ISP 라우터가 아닌 경우 IP 패킷 캡처

내 홈 네트워크에는 다음 토폴로지가 있습니다.

          Internet
              |
     wifi     |
C ----------- A ---------- B

어디

  • A(고정 IP 192.168.0.254)는 ISP에서 제공하는 라우터/AP입니다.
  • B(고정 IP 192.168.0.1)는 로컬 DNS 및 DHCP 서버 역할을 하는 Linux 시스템입니다(dnsmasq 실행).
  • C는 AP에 연결되고 DHCP에 의해 구성된 클라이언트입니다.

현재 B가 DHCP 서버로 제공하는 기본 게이트웨이는 A뿐입니다.

그런 다음 B에 있는 클라이언트 C의 모든 트래픽을 캡처한다고 가정해 보겠습니다. B에서 내가 한 일은 다음과 같습니다.

  1. IP 전달 활성화

    # sysctl net.ipv4.ip_forward=1"
    
  2. 프로비전 B는 게이트웨이 역할을 합니다. 물론 B 자체는 A를 자체 게이트웨이로 사용합니다.

  3. B에서 tcpdump를 실행하여 무슨 일이 일어나는지 확인하세요.

클라이언트 C에서 다음과 같은 요청을 시작합니다.

$ traceroute www.google.com

이제 C의 트래픽은 B, A, 마지막으로 인터넷으로 라우팅될 것으로 예상됩니다.

작동하는 것.C는 인터넷에 접속할 수 있습니다

작동하지 않는 것.첫 번째 요청을 제외하면 B는 완전히 우회된 것으로 보입니다. tcpdump는 B의 주소를 Traceroute 출력에 표시하지 않습니다. 하지만 B에서 IP 전달을 비활성화하면 C의 인터넷 연결이 끊어지기 때문에 재라우팅이 발생할 것이라고 확신합니다.

어떤 종류의 단락이 발생하는 경우 이를 방지하려면 어떻게 해야 합니까?

부인 성명: 네트워크 토폴로지를 변경하면 "모든 트래픽 캡처" 문제(예: 포트 미러링 등을 통해)를 해결할 수 있다는 것을 알고 있지만 설정에 무슨 일이 일어나고 있는지, 토폴로지를 변경하지 않고 문제를 해결하는 방법을 정말로 알고 싶습니다. .

답변1

호스트 A가 동일한 패킷을 다시 볼 수 없도록 NAT에 호스트 B가 필요합니다. 대신 B는 패킷이 B에서 시작된 것처럼 A를 통해 패킷을 보내야 합니다. 이를 달성하려면 iptables다음과 같은 규칙을 추가할 수 있습니다.

# iptables -t nat -A POSTROUTING -s ip-of-C -j MASQUERADE

이 규칙에 따르면 B에서 보낸 모든 패킷은 B에서 시작된 것처럼 다시 작성되지만 관련 응답을 역변환하여 C로 보낼 수 있도록 역변환 테이블은 유지됩니다.

-s ...예를 들어 응답 패킷에는 적용되지 않고 C에서 발생하는 패킷에만 규칙이 적용되도록 제한하는 부분(또는 로컬 LAN에 설정할 수 있음)에 유의하세요 .

편집(@theuncle의 의견 고려): NAT 없이 작동하지 않는 이유에 대한 설명은 호스트 B가 동일한 인터페이스에서 패킷이 변경 없이 들어오고 나가는 것을 인식하여 C가 네트워크를 개선하고 직접적으로 알 수 있다는 것입니다. A와 교통 관련 문제를 협상합니다.

관련 정보