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

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

Я запускаю новую установку 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 часа ... Спасибо за любую помощь.

// РЕДАКТИРОВАТЬ: Я могу успешно пропинговать виртуальную машину с другой машины. И наоборот.

0
задан 8 September 2016 в 18:19
1 ответ

Хорошо, я нашел решение. Оказалось, что я не настолько ошибался, но кое-чего не хватало:

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

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

2
ответ дан 4 December 2019 в 13:38

Теги

Похожие вопросы