localhost:port를 외부 IP:새 포트로 전달

localhost:port를 외부 IP:새 포트로 전달

Linux 서버에서 실행되는 애플리케이션이 있습니다. 애플리케이션에서 localhost(127.0.0.1):localport에 액세스하려고 하면 외부 IP로 전달되어야 합니다. 사용자는 특정 포트의 localhost에만 액세스를 시도하며 이는 자동으로 전달됩니다. iptables nat 테이블을 읽었지만 정확하다면 네트워크 인터페이스를 전혀 건드리지 않는 localhost 자체에서 localhost의 포트에 액세스하기 때문에 PREROUTING 및 POSTROUTING이 적용되지 않습니다. 출력 테이블이 작동하는지 궁금하지만 일부 조합을 시도하면 작동하지 않습니다. 내가 올바른 것을 사용하고 있는 걸까요, 아니면 이것이 단순히 불가능한 걸까요?

누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

답변1

나는 이것을 직접하고 싶다.

이를 달성하려면 2개의 규칙과 플래그를 설정해야 합니다.

여기에 사용된 예는 telnet localhost XXXX패킷이 로 전달되어야 한다는 것 입니다 Ext.er.nal.IP:YYYY.

sysctl -w net.ipv4.conf.all.route_localnet=1

불행하게도 이 플래그는 최신 Linux 커널에만 존재하며 이전 커널에서는 사용할 수 없습니다(이전 커널에는 대체 플래그도 없습니다). 사용 가능한 플래그가 정확히 어느 코어인지 잘 모르겠습니다. 커널 버전 3.XX에서 작동한다고 생각합니다.

이 플래그는 루프백 주소를 올바른 소스 또는 대상 주소로 처리합니다.

원천ip sysctl 명령의 경우.

iptables -t nat -A OUTPUT -p tcp --dport XXXX -j DNAT --to-destination Ext.er.nal.IP:YYYY

위 명령은 localhost:XXXX대상 IP의 패킷을 다음으로 변경 합니다.Ext.er.nal.IP:YYYY

iptables -t nat -A POSTROUTING -j MASQUERADE

이 명령은 원본 IP를 컴퓨터의 공용 IP로 변경합니다.

-s및 를 사용하여 -d적절한 소스 및 대상 IP와 인터페이스를 추가 하면 -i규칙을 더욱 엄격하게 만들 수 있습니다 -o. 바라보다 man iptables.

John WH Smith와 Votel에게 감사드립니다. 조언이 매우 도움이 됩니다.

답변2

이를 수행하는 가장 쉬운 방법은 netcat및를 설치하는 것입니다 inetd(데비안의 리소스에 이 내용이 있습니다 openbsd-inetd).

줄 추가 /etc/inetd.conf:

127.0.0.1:1234 stream tcp nowait root /bin/nc nc ex.ter.nal.ip 1234

1234실제 포트 번호와 ex.ter.nal.ip실제 외부 IP 주소 로 바꿉니다 . 분당 128개 이상의 연결이 필요한 경우 .1000옵션에 더 높은 숫자를 추가 해야 할 수 있습니다 . nowait이는 런어웨이 연결이 시스템을 불필요하게 로드하는 것을 방지하기 위한 것입니다.

-q 4 -w 10내 상황에 도움이 되는 몇 가지 옵션 도 있지만 nc여러분에게는 필요하지 않을 수도 있습니다.

inetd파일을 수정하고 다시 로드하십시오 inetd.conf.

이것은 릴레이 프로세스 nc로 시작된 것을 사용하며 inetd효과는 매우 좋습니다.

관련 정보