Я хочу запустить простой веб-сервер 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, что и делает приведенное выше правило.