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

Настройка прослушивания и пересылки портов

Я знаю, есть много вопросов по открытию портов и перенаправлению портов. И я перепробовал почти все ответы, но не могу заставить их работать у меня.

Я запускаю новую установку 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 во второй последней и последней команде вашего интерфейса.

Также убедитесь, что каждая машина действительно может разговаривать друг с другом - обычно для виртуальной машины вам нужно выполнить дополнительную настройку.