Как перенаправить порт 80 на другой порт на той же машине?

39

Как переслать запросы, поступающие через порт 80, на другой порт на той же машине с Linux?

Раньше я делал это, меняясь nat.conf, но у этой машины, которую я использую, нет NAT. Какая альтернатива?

Nohsib
источник
Нет NAT или нет nat.conf? Вы пробовали какие-либо правила iptables, используя NAT?
Бен Суинберн

Ответы:

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?
Люк
О, чувак, это именно то, что я искал, слава!
нейроснап
sudo
Поначалу у
1
что делать если нет интерфейса eth0? почему бы не использовать петлевой интерфейс?
Инвентарь
15

Просто оказался в этом вопросе и не смог найти легкий путь. Не хочу устанавливать Nginx на мою машину, чтобы сделать эту простую переадресацию портов.

Rinetdне работал для меня, нет рабочего пакета для моего дистрибутива. Я пошел socatвместо этого. Супер просто:

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

Должен быть запущен, suчтобы иметь возможность прослушивать порт 80.

alfetopito
источник
Настройка Rinetd проще, я думаю.
johnshen64
Сокат работает отлично!
Львы
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 Этот метод обратного прокси не повлияет на множество других виртуальных хостов на сервере, что произойдет, если iptables сделает это, поскольку iptables ничего не знает о виртуальных хостах.
ясень