Windows netsh TCP 포트 프록시가 루프백을 통해 패킷을 전달하지 못합니다. 해결 방법은 무엇입니까?

Windows netsh TCP 포트 프록시가 루프백을 통해 패킷을 전달하지 못합니다. 해결 방법은 무엇입니까?

상황은 다음과 같습니다. Win 7 Pro SP1(버전 6.1.7601)을 실행하고 Windows 방화벽이 완전히 비활성화되어 있으며(어쨌든 여전히 진행 중인 경우를 대비해 모든 것을 허용하는 규칙도 추가됨), 백그라운드에서 실행되는 프로그램이 없습니다(모든 불필요한 서비스가 종료됨). /exe), ipv6이 설치되어 제대로 작동하고 netsh isatap 및 6to4가 활성화되었습니다. Teredo는 기본 상태로 설정됩니다.

먼저, 192/8 인터페이스에 netsh v4tov4 포트 프록시를 설정할 수 있으며 이 상황에서는 포트 프록시가 제대로 작동합니다. 두 개의 관리자 권한 명령 셸에서 다음을 실행합니다.

REM Admin Shell 1
ncat.exe -l 192.168.2.173 13337

REM Admin Shell 2
netsh interface portproxy add v4tov4 listenport=18080 connectport=13337 connectaddress=192.168.2.173
netsh interface portproxy show all

    Listen on ipv4:             Connect to ipv4:

    Address         Port        Address         Port
    --------------- ----------  --------------- ----------
    *               18080       192.168.2.173   13337

ncat 192.168.2.173 18080
[type a message and it will popup in shell 1]

C:\temp>netstat -a -b | grep -E -A1 13337
  TCP    192.168.2.173:13337     Windows7_x64:0         LISTENING
 [ncat.exe]

포트 프록시가 전달되고 netcat이 예상대로 작동합니다.

다음으로 단순히 localhost로 변경하거나([::1]로 확인됨) v4tov4 규칙과 함께 127.0.0.1을 명시적으로 사용(v6tov4도 시도)할 때마다 실패합니다.

예를 들어 127.0.0.1로 시작합니다.

REM Admin Shell 1
ncat.exe -l 127.0.0.1 13337

REM Admin Shell 2
netsh interface portproxy add v4tov4 listenport=18080 connectport=13337 connectaddress=127.0.0.1
netsh interface portproxy show all

    Listen on ipv4:             Connect to ipv4:

    Address         Port        Address         Port
    --------------- ----------  --------------- ----------
    *               18080       127.0.0.1       13337

ncat 127.0.0.1 18080
Ncat: No connection could be made because the target machine actively refused it. .

C:\temp>netstat -a -b | grep -E -A1 13337
  TCP    127.0.0.1:13337         Windows7_x64:0         LISTENING
  [ncat.exe]

마지막으로 이전 netsh 규칙을 모두 삭제하고 v6tov6으로 시도하는 것도 완전한 폭탄입니다.

REM Admin Shell 1
ncat.exe -6 -l [::1] 13337

REM Admin Shell 2
netsh interface portproxy add v6tov6 listenport=18080 connectport=13337 connectaddress=[::1]
netsh interface portproxy show all

    Listen on ipv6:             Connect to ipv6:

    Address         Port        Address         Port
    --------------- ----------  --------------- ----------
    *               18080       [::1]           13337

ncat -6 [::1] 18080
Ncat: No connection could be made because the target machine actively refused it.

C:\temp>netstat -a -b | grep -E -A1 13337
  TCP    [::1]:13337             Windows7_x64:0         LISTENING
  [ncat.exe]

참고 Windows7_x64는 localhost이며 인터페이스가 제대로 작동하는 것 같습니다.

C:\>ping localhost
Pinging Windows7_x64 [::1] with 32 bytes of data:
Reply from ::1: time<1ms

또한 수신 대기 netcat 엔드포인트에 직접 연결하여 문제 없이 데이터를 보낼 수 있습니다.

ncat -6 [::1] 13337

문제는 확실히 netsh portproxy 규칙에 있습니다.

그러면 여기서 무엇을 제공합니까? 방화벽이 완전히 꺼져있습니다. 높은 껍질. 방해가 되는 다른 것은 없습니다(AV/IDS 없음).

v6tov4 및 v4tov6 규칙의 다양한 조합을 추가하려고 시도했지만 아무 것도 수행되지 않았습니다. MS 메시지 분석기는 연결이 설정되더라도 localhost 인터페이스를 선택하지 않기 때문에 도움이 되지 않습니다.

어떤 아이디어가 있나요?

2016/10/15 23:58EST 편집: 다음 6개 서비스를 중지하면 전반적으로 포트 프록시가 비활성화됩니다. 이는 이러한 서비스 중 하나가 현재 일어나고 있는 일과 관련되어 있음을 시사합니다.

sc stop homegrouplistener
sc stop Browser
sc stop lanmanserver
sc stop smb
sc stop iphlpsvc

답변1

이것은 의도적으로 설계된 것입니다. 루프백 인터페이스(Windows에는 실제로 존재하지 않음)에 도착하는 패킷은 127.0.0.0/8. 마찬가지로 127.0.0.0/8다른 위치로 가는 경로가 없기 때문에 패킷을 보낼 수 없습니다 . 이는 트래픽이 도착하더라도 청취 프로그램이 응답할 수 없음을 의미합니다.

프록시 프로그램을 사용하면 외부 네트워크에서 트래픽을 가져와서새로운루프백 인터페이스의 트래픽(또는 그 반대). 이것은 작동합니다.

다음(OS X) nmap 예제를 고려하십시오.

sudo nmap -Pn -p 80 -S 192.168.2.1 -e lo0 127.0.0.1

루트를 통해 루프백 인터페이스에 패킷을 강제로 주입합니다. 이는 tcpdump -i lo0다른 터미널에서 실행하여 확인할 수 있습니다 . 그러나 nc청취 중에도 열린 포트를 찾지 못했습니다. 그러나 다음은 예상대로 수신기를 찾습니다.

nmap -p 80 -e lo0 127.0.0.1

관련 정보