Назад | Перейти на главную страницу

Перенаправление порта 80 не работает для localhost

Я хочу запустить простой веб-сервер python на моем линоде ubuntu с помощью следующей команды (она просто помещает текущий каталог на указанный порт)

python -m SimpleHTTPServer 8080

Я использую порт 8080, чтобы не использовать sudo для работы на порту 80

Чтобы сделать его доступным, я перенаправляю порт 80 на порт 8080 с помощью следующей команды:

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

Теперь любой компьютер может получить доступ к моему сайту giuliopizzini.com, ЗА ИСКЛЮЧЕНИЕМ localhost, который получает ошибку сокета, в соединении отказано. Если я указываю localhost на giuliopizzini.com:8080, он работает нормально, но перенаправление не выполняется.

У меня включен брандмауэр, но если я сброшу его с помощью

sudo iptables -F

поведение точно такое же, так что, похоже, здесь это не играет роли.

Как я могу заставить перенаправление работать и на localhost?

Вам нужно добавить еще одно правило для работы перенаправления localhost:

sudo iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-port 8080

Вам необходимо указать IP-адрес назначения, который вы используете для подключения, например localhost или IP-адрес любого интерфейса.

Локально генерируемый трафик не попадает в PREROUTING цепь. Он попадает в OUTPUT цепочка в таблице nat, что и делает приведенное выше правило.