Перенаправити порт 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, тому ви не змогли запустити веб-сервіс, як флеш-пітон, як звичайний користувач.
Крістіан

Чому ви просто не прив’яжіть веб-сервер до порту 80?
Девід Фоерстер

5
Я б здогадався, тому що некористувач не може прив'язуватися до портів 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, переконайтеся, що ви присвоюєте правильний nic .. У прикладі я використовую 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
Після було б добре зберегти зміни iptablesudo 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

Під час спроби цього рішення я отримую "З'єднання відмовлено".
mitchus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.