С одним физическим сетевым интерфейсом eth0 и eth0: 0 связаны два IP-адреса.
Следующее работает нормально для первого интерфейса:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Howerver то же самое не работает для второго интерфейса:
iptables -A PREROUTING -t nat -i eth0:0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Также пробовал:
iptables -A PREROUTING -t nat -p tcp --dport 80 -d $THE_IP -j REDIRECT --to-port 8080
Итак, вопрос в том, как сделать перенаправление на виртуальном интерфейсе.
Вы этого не сделаете. Интерфейсы псевдонимов - это условное обозначение, которое фактически не существует на глубоких уровнях ядра, где перемещается iptables. Используйте IP-адрес (ваш третий пример команды не работает и выдает сообщение об ошибке, которое должно было вас указать), и все будет хорошо.
В вашей третьей команде чего-то не хватает: включение многопортового добавления -m multiport
в начале, так что все будет хорошо. + предполагается, что --dports
и --to-ports
(множественное число), даже если вы укажете только один порт
Обратите внимание, что у меня была аналогичная проблема + у меня уже было приложение, использующее порт 80 (apache2), которое мне пришлось убить, прежде чем я смог использовать перенаправление
Для этой работы вы должны использовать интерфейс TUN / TAP. Обратитесь к этому руководство для получения дополнительной информации.