Я знаю, есть много вопросов по открытию портов и перенаправлению портов. И я перепробовал почти все ответы, но не могу заставить их работать у меня.
Я запускаю новую установку Kubuntu на виртуальной машине.
Я просто хочу перенаправить весь трафик [myip]: 80 на localhost: 8080. В целях тестирования я использую netcat для прослушивания своих портов.
Итак, вот моя полная настройка (перед этими командами я удалил все правила iptable, включая PRE / POSTROUTING):
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
sudo iptables -A INPUT -j ACCEPT
sudo iptables -A FORWARD -j ACCEPT
Насколько я понимаю, теперь все соединения будут приниматься и пересылка разрешена (для всех соединений). Кроме того, предварительная маршрутизация направит весь трафик через порт 80 на localhost: 8080.
Теперь слушаю:
sudo nc -l 10.0.2.15 80
sudo nc -l localhost 8080
Я использую следующие команды на том же компьютере:
curl -XPUT http://10.0.2.15:80/
curl -XPUT http://127.0.0.1:8080/
Теоретически мой второй слушатель должен видеть обе команды. Фактически, первый слушатель получит первую команду, а второй слушатель получит вторую. Если я попробую с другого компьютера, команда curl -XPUT http://10.0.2.15:80/ приведет к ошибке отказа в соединении. Но я принимаю любой соединения с конфигурациями iptables, не так ли?
Я также провел несколько экспериментов с POSTROUTING, но безуспешно. Что мне не хватает? Я пробовал примерно 3 часа ... Спасибо за любую помощь.
// РЕДАКТИРОВАТЬ: я могу успешно пропинговать виртуальную машину с другой машины. И наоборот.
Хорошо, я нашел решение. Оказалось, что я не ошибся, но чего-то не хватало:
sysctl -w net.ipv4.conf.eth0.route_localnet=1
Благодаря Ипор Сирсер который указал, что ядро будет отбрасывать пакеты с 127.0.0.1 и благодаря эта почта, в котором указано, как обойти это ограничение.
Итак, здесь снова полная настройка, которую я использую, если кому-то нужно сделать что-то подобное (например, настроить переадресацию портов на виртуальной машине на localhost):
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1
Конечно, измените порты и интерфейс в соответствии с вашими настройками. Т.е. изменение --dport и - по назначению И eth0 во второй последней и последней команде вашего интерфейса.
Также убедитесь, что каждая машина действительно может разговаривать друг с другом - обычно для виртуальной машины вам нужно выполнить дополнительную настройку.