Перенаправить порт 80 на 8080 и заставить его работать на локальной машине


61

Я перенаправил трафик для порта 80 на 8080 на моей машине с

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Он отлично работает для всего мира, кроме моей собственной машины. Я разработчик, и мне нужно перенаправить порт 80 на 8080 для себя.

Мой IP 192.168.0.111

Мой веб-сервер работает на порту 8080

Я хочу открыть сайт, http://192.168.0.111/а не http://192.168.0.111:8080/с той же машины, на которой работает сервер.


Извините за аббревиатуру, но какова цель переадресации порта 80 на 8080?
ma11hew28

2
@mattdipasquale, обычные пользователи не могут получить доступ к порту 80, поэтому вы не можете запустить такой веб-сервис, как python flask, как обычный пользователь.
Кристиан

Почему бы вам просто не привязать веб-сервер к порту 80?
Дэвид Фёрстер

5
Я думаю, это потому, что пользователь без полномочий root не может связываться с портами 80/443, и он не хочет запускать свой веб-сервис от имени пользователя root.
Павел К.

Ответы:


80

Вы должны использовать OUTPUTцепочку, поскольку пакеты, предназначенные для петлевого интерфейса, не проходят через PREROUTINGцепочку. Следующее должно работать; запустить как root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

1
Требуется ли порт 80 быть глобально доступным? Я попробовал ваше решение, мой порт номер 8080 доступен, но 80 нет, следовательно, он не работал. @heemayl
Alper

2
Это не сработало, не уверен, почему за это проголосовали
diyoda_

@Diyoda_ Пожалуйста, определите , не работает .
Heemayl

3
Я могу подтвердить, что это не работает в Ubuntu 18.04
Ахмед Хамди

2
У меня не работало в Ubuntu 18.10
Кристофер Брэдшоу

6

Просто используйте iptables, позволяющий использовать порты 80 и 8080, а затем перенаправить 80 на 8080, чтобы убедиться, что вы назначаете правильный номер. В примере я использую eth0

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

Спасибо! Он работает над Ubuntu 19
Владимир Ищенко

1
После было бы неплохо сохранить внушительные измененияsudo apt-get install iptables-persistent
Владимир Ищенко

6

Это сработало для меня.

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

+1 у меня работает на Ubuntu 18.04 (хотя бы для TCP), сделал порт 7000-> 7001 и серверы, прослушивающие порт 7001, получили входящие соединения от порта 7000 :)
hanshenrik

1
убедитесь , что используется правильный сетевой интерфейс Тхо, он не вызывается eth0на всех системах
hanshenrik

4

Вместо этого iptablesвы можете попробовать: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
Это вариант, но это не совсем то, что я хочу, потому что у меня уже есть веб-сервер на порту 80. Я предпочитаю делать это с помощью iptables и поддерживать работу веб-сервера на порту 80. Я думаю, что я просто должен применить правило к другому шагу вместоPREROUTING
Макс

Да - это вызовет конфликт портов, если вы прослушиваете что-то, на что вы переадресовываете порт, как предложил Макс. Приведенный выше ответ является более общим случаем.
cgseller

Я получаю «Соединение отказано» при попытке этого решения.
Митч
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.