테스트 목적으로 이 포트 전달 솔루션이 있습니다. 라는 이름의 원격 서버가 있습니다.상자그리고 이름이 붙은 기계탑, 두 개의 별도 네트워크에 있습니다.상자인터넷을 통해 접속할 수 있습니다.
존재하다탑, 다음 명령을 실행합니다.
ssh -R 80:localhost:80 box.sleblanc
이는 다음과 연결됩니다.상자웹 서비스에 액세스할 포트 80에 소켓을 설정합니다.탑, 포트 80. 언제상자 수: 80, 로그에 있는 웹 서비스가 다음에서 나온 것 같습니다.127.0.0.1. 나는 이것이 합법적으로 localhost에서 오는 연결과 프록시에서 오는 연결을 확실하게 구별할 수 없기 때문에 이것이 짜증스럽다고 생각합니다.
BindAddress
옵션을 다른 것으로 설정(예:192.168.0.100) 프록시에 대한 연결이 실제로 해당 주소에 표시되어 문제가 해결되지만 서비스가 localhost가 아닌 다른 네트워크 주소에서 실행되도록 강제합니다.
curl --interface 127.0.0.2 localhost:80
IP 주소에서 생성된 요청을 실행하면 127.0.0.2
합법적인 로컬 요청과 프록시 요청을 구별할 수 있다는 요구 사항을 충족하는 것으로 나타났습니다 BindAddress
.127.0.0.2, SSH에 더 이상 연결할 수 없습니다.상자, 처럼127.0.0.0/8네트워크를 라우팅할 수 없습니다.
궁극적으로 내 질문은 다음과 같습니다. 클라이언트가 인터넷 호스트에 연결할 수 있고 원격 포트 리디렉션이 제거될 수 있도록 SSH 클라이언트를 여러 다른 주소에 어떻게 바인딩합니까?127.0.0.1? 즉, 원격 전달 포트의 연결을 로컬 주소에 엄격하게 바인딩합니다.127.0.0.2?
놀다소캇, 나는 이 해결책을 찾았습니다:
% socat TCP4-Listen:1234,fork TCP:127.0.0.1:80,bind=127.0.0.2 &
% ssh -R 80:127.0.0.1:1234 box.sleblanc
이는 들어오는 연결을 포트 1234에서 수신 대기하는 소켓을 설정하고 로컬 주소에 바인딩하여 이를 127.0.0.1:80으로 전달합니다.127.0.0.2. 예상한 대로 정확하게 작동하지만 이를 SSH 명령으로 단순화할 수 있는 방법이 있는지 궁금합니다.