iptables를 사용하여 한 컴퓨터에서 다른 컴퓨터로 네트워크 트래픽 전달


0

같은 LAN에 두 대의 컴퓨터가 있습니다

Comp A: 192.1681.151.15
Comp B: 192.1681.151.19

설정은 다음과 같습니다

Internet <---->  Computer B
      ^-------->  Computer A 

두 컴퓨터에는 하나의 네트워크 카드가 있습니다.

Wireshark를 열면 comp A에서 검색된 모든 트래픽에 대해 Wireshark가 comp A 및 대상 주소의 트래픽을 연결중인 서버의 트래픽으로 캡처하고 싶습니다.

iptables 및 기타 관련 질문을 이해하려고 시도했지만 어떻게 든 여전히 잘못 구성했습니다.

comp B에서 다음 iptable 규칙을 사용합니다.

   iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.151.19:443 
   iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.151.19:80 
   iptables -t nat -A POSTROUTING -j MASQUERADE

그러나 comp B에서 트래픽을 탐색 할 때 wireshark (comp A에서 실행)에서 트래픽이 표시되지 않습니다. 누군가 이것을 올바르게 구성하는 방법을 안내해 줄 수 있습니까?


당신이하려는 일을 조금 더 잘 설명 할 수 있습니까? 컴퓨터 B에서 모든 컴퓨터 A의 트래픽을 캡처 하시겠습니까? 아니면 컴퓨터 B에서 네트워크의 모든 트래픽을 캡처하려고합니까?
prateek61

컴퓨터 B에서 모든 컴퓨터 A의 트래픽을 캡처하고 싶습니다. Comp B는 comp A에 대한 프록시 / 게이트웨이라고 생각할 수 있습니다.

iptables변경 했을 때 컴퓨터 B의 경로를 업데이트 했습니까 ?
prateek61

답변:


0

이들은 실제로 두 가지 질문이며 관련이 있는지 확실하지 않습니다.

1) 컴퓨터가 WLAN이 아닌 스위치를 통해 이더넷 LAN으로 연결된 경우 LAN의 모든 트래픽은 원칙적으로 연결된 모든 장치에서 볼 수 있습니다. 가장하거나 전달하거나 iptable 규칙을 사용할 필요가 없습니다. 따라서 컴퓨터 B와 같은 컴퓨터에서 Wireshark를 실행하면 컴퓨터 A에서 라우터로의 트래픽이 표시됩니다.

그래도 문제가 해결되지 않으면 컴퓨터 A에서 컴퓨터 B를 핑 (Ping)하십시오. 그런 다음 컴퓨터 A에서 라우터를 핑 (Ping)하십시오. 첫 번째 핑에서 패킷이 보이지 않으면 Wireshark 설정이있는 것이 제대로 작동하지 않는 것입니다. 첫 번째 핑의 패킷 만보고 두 번째 핑의 패킷이 아닌 경우 인터페이스는 어떤 이유로 해당 컴퓨터에 적합하지 않은 패킷을 삭제하거나 패킷을 필터링하는 경우 컴퓨터 B의 iptables 등을 확인합니다.

편집 : 발생할 수있는 일은 라우터가 스위치로 작동하지 않는 것입니다. 비트를 테스트 한 결과 실제로 4 개의 LAN 포트가 모두 고유 한 장치로 표시되고 Linux 커널 브리지를 사용하여 브리지 (WLAN 포함)되는 하나의 라우터가있는 것으로 나타났습니다. 이러한 종류의 브리지는 본 MAC 주소를 추적하고 대상 MAC 주소를 본 포트로만 전달합니다. 이 경우 두 컴퓨터의 패킷을 다른 컴퓨터에서 볼 수 없습니다.

해결책 : (a) 다른 이더넷 스위치를 찾아서 모든 것을 연결하거나 (b) 게이트웨이 방법을 사용하십시오.

2) 컴퓨터 B를 컴퓨터 A의 게이트웨이로 사용하려면 (이더넷 LAN의 트래픽을 감시 할 필요는 없지만 WLAN과 같이 필요할 수 있음) 컴퓨터 B를 게이트웨이로 사용하도록 컴퓨터 A를 구성해야합니다. . 설정의 "인터넷"은 DHCP 서버 역할을하고 컴퓨터 A와 컴퓨터 B에 IP 주소를 할당하고 라우터를 게이트웨이로 사용하도록 지시하는 홈 라우터 일 가능성이 큽니다. 따라서 컴퓨터 A에서 route또는 ip route을 사용하여 올바른 경로를 설정하십시오. 다른 경로가 없는지 확인하십시오.

다음 스크립트는 전달을 설정하는 데 효과적입니다 (아마 최적은 아니지만).

#!/bin/bash

# forward traffic on the same $IF for one particular $ADDR, acting as gateway

modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat  

IF="eth0"
ADDR="192.168.178.25"

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $IF -o $IF -d $ADDR -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF -o $IF -s $ADDR -j ACCEPT
iptables -t nat -A POSTROUTING -s $ADDR -j MASQUERADE

고마워 나는 ip route 규칙을 사용했다. iptables의 모든 현재 규칙을 플러시 한 후 다음을 추가했습니다. ip route add default via <IP addr of comp B> . 이제 wireshark (comp B에 설치됨)에서 comp A를 탐색하는 트래픽을 볼 수 있습니다. 그러나 comp B에 규칙 iptables -P INPUT DROP (및 OUTPUT 및 FORWARD 테이블에 대해 동일한 규칙)을 추가하여 모든 패킷을 차단하면 여전히 comp A에서 트래픽을 찾아 볼 수 있습니다. comp A에서도 패킷을 차단하지 않아야합니다.

1) B의 모든 iptable 규칙은 B가 해당 패킷으로 수행하는 작업에만 영향을 미칩니다. 어떤 규칙을 선택하든 A가 B로 패킷을 보내면 이러한 패킷이 인터페이스에 표시되고 wireshark에 표시됩니다. 또한, 난 정말 이해가 안 돼요 당신이 그들을 차단하려는 것 ... 2) 수행 ip route하고 ip -6 route, (A)에와 있는지 확인 , 캔 여전히 예를 다른 경로가 존재가있는 경우 경로 B로 기본 경로입니다 찾아 보려면 라우터에 직접 문의하십시오. 이렇게하면 A에서 올바르게 전달을 설정하지 않으면 B는 인터넷에 전혀 연결할 수 없습니다.
dirkt

ip route del 명령을 사용하여 A의 모든 라우팅 테이블을 삭제했습니다. 컴퓨터 B의 라우팅 테이블은 pastebin.com/7jmwuWx8 과 같고 Comp A의 라우팅 테이블은 pastebin.com/rTXzy58R입니다. comp B에서이 명령을 실행했습니다 echo "1"> / proc / sys / net / ipv4 / ip_forward . 모든 iptables가 비워 지지만 여전히 인터넷에 연결되어 있지 않습니다. 왜 이것이 작동하지 않는지 이해가되지 않습니다

컴퓨터 A에서 인터넷에 연결되어 있지 않습니다. B의 전달 규칙을 처리하기 위해 comp B의 게시물에 추가 된 스크립트를 실행했습니다. 컴퓨터 B는 인터넷에 연결되어 있습니다.

당신이 변경되었습니다 ADDR컴퓨터 A의 실제 주소와 IF컴퓨터 B의 실제 LAN 인터페이스에?
dirkt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.