포트 80을 같은 컴퓨터의 다른 포트로 전달하는 방법은 무엇입니까?


39

포트 80에서 들어오는 요청을 동일한 Linux 시스템의 다른 포트로 어떻게 전달할 수 있습니까?

이전에을 변경하여이 작업을 수행 nat.conf했지만 사용중인이 컴퓨터에는 NAT가 없습니다. 대안은 무엇입니까?


NAT가 없거나 nat.conf가 없습니까? NAT를 사용하여 iptables 규칙을 사용해 보셨습니까?
Ben Swinburne

답변:


47

iptables를 사용하여 리디렉션을 수행 할 수 있습니다.

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

+1. 웰빙 년 동안이 일을
알렉산더 포그 레브 냑

1
Windows Server는 어떻습니까?
Luc

아 이건 내가 찾던 것, kudos입니다!
neurosnap

처음에는 저에게는 효과가 없었지만 제가 사용할 때는 괜찮 sudo
았습니다

1
eth0 인터페이스가 없으면 어떻게해야합니까? 왜 루프백 인터페이스를 사용하지 않습니까?
harschware

14

이 질문에서 자신을 쉽게 찾을 수 없었습니다. 이 간단한 포트 포워딩을 수행하기 위해 내 컴퓨터에 Nginx를 설치하고 싶지 않습니다.

Rinetd나를 위해 작동하지 않았고, 배포판을 위해 작동하는 패키지가 없습니다. 나는 socat대신에 갔다 . 매우 간단합니다.

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

su포트에서 청취 할 수 있도록 실행되어야합니다 80.


Rinetd 설정이 더 쉽다고 생각합니다.
johnshen64

socat은 완벽하게 작동합니다!
viv

10

Nginx 와 같은 리버스 프록시 사용을 살펴 봐야 합니다. 예를 들어, 파일 에 다음과 같은 것을 넣을 수 있습니다.nginx.conf

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}

2
왜? 필자는 동의하지 않지만 네트워킹 스택에서 이런 일이 일어나지 않기를 원하는 이유가 있습니까?
Oli

@Oli이 리버스 프록시 방법은 서버의 다른 많은 가상 호스트에 영향을 미치지 않습니다. iptables는 가상 호스트를 전혀 모르기 때문에 iptables가이를 수행 할 경우에 발생합니다.
ash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.