Я знаю, есть много вопросов об открытии портов и перенаправлении портов. И я перепробовал почти все ответы, но не могу заставить его работать у меня.
Я запускаю новую установку 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
Благодаря Ipor Sircer , который указал, что ядро будет отбрасывать пакеты с 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 и - to-destination AND eth0 во второй последней и последней команде вашего интерфейса.
Также убедитесь, что каждый компьютер может действительно разговаривать друг с другом - обычно для виртуальной машины вам нужно выполнить дополнительную настройку.