패킷의 대상 IP를 localhost로 변경하고 다른 포트로 리디렉션합니다.

패킷의 대상 IP를 localhost로 변경하고 다른 포트로 리디렉션합니다.

다음은 요구 사항입니다

  1. 먼저 로컬에서 생성된 요청/패킷 대상 IP를 로 변경합니다 localhost. 예를 들어172.17.0.1:7199 -> 127.0.0.1:7199 

  2. 그런 다음 이 요청/패킷을 로컬 프록시 포트(예: socks-proxy포트/ redsocks 12345포트)  로 리디렉션합니다.

iptables또는 다른 도구를 사용하여 이 작업을 어떻게 수행할 수 있습니까 ?


다음은 좀 더 자세한 설명입니다.

두 대의 서버 가 있습니다 server1 - 172.17.0.1. 에서 포트 ( )에 server2 - 172.17.0.2액세스해야 합니다 . 에서 원격 JMX를 비활성화했기 때문에 SSH 로컬 전달을 통해 액세스할 수 없습니다 ( 에서 포트에 액세스해야 함 ). 그래서 SSH 양말 프록시를 생성하고 다음과 같이 구성했습니다.JMX7199server1server2server1server27199localhostserver2레드삭스도구. 잘 작동합니다.

# run socks proxy from service2
ssh -v -N -D 9999 [email protected]

# configure socks proxy with Redsocks in service2
redsocks {
    // redsocks listening port
    local_ip = 127.0.0.1;
    local_port = 12345;

    // socks proxy 
    ip = 127.0.0.1;
    port = 9999;

    type = socks5;
}

# configure iptable rules to route the packets to Redsocks in service2
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -p tcp --dport 7199 -j REDSOCKS
sudo iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner <user id> -j REDSOCKS

127.0.0.1:7199이제 from service2(예: ) 에 연결하면 의 JMX 포트( ) telnet localhost 7199에 연결됩니다 . Redsocks는 패킷을 양말 프록시를 통해 올바르게 라우팅합니다 . 7199server1server1

또 다른 요구 사항이 있습니다. IP 주소가 service1(예 : ) 인 패킷이 오면 172.17.0.1:7199이를 localhost( )로 리디렉션해야 합니다 127.0.0.1:7199. 예를 들어 172.17.0.1:7199from 에 연결하는 경우 양말 프록시를 통해 JMX 포트에 액세스하려면 service2로 리디렉션해야 합니다 . 일반적으로 IP 주소 리디렉션은 다음  규칙 중 하나를 사용하여 수행할 수 있습니다. Redsocks와 관련된 다른 규칙이 존재하기 때문에 작동하지 않습니다.127.0.0.1:7199service1iptablesiptables

# redirect with host
iptables -t nat -A OUTPUT -p tcp -d 172.17.0.1 -j DNAT --to-destination 127.0.0.1

# redirect with host and port
iptables -t nat -A OUTPUT -p tcp -d 172.17.0.1 --dport 7199 -j DNAT --to-destination 127.0.0.1:7199

localhost이 시나리오에서는 IP 주소 리디렉션을 어떻게 수행할 수 있습니까 ?

관련 정보