LINUX.ORG.RU

Как сделать проброс портов KVM из сети internal в сеть основную

 ,


0

2

У меня виртуалки по дефолтку подключены через мост. Все работает, но из-за малого колличества свободных IP подумал о том что бы заняться пробросом портов

Сделал internal сеть Хост и гостевые системы друг друга прекрасно видят

Пробую сделать что то подобного

iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22
iptables -I FORWARD -m state -d 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

Или

$ sudo iptables -t nat -A PREROUTING -p tcp -i ens33 --dport 22 -j DNAT --to-destination 192.168.1.2:54045
$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE

еще пробовал прописывать SNAT в POSTROUTING

Счетчик пакетов увеличивается но конекта нет. Даже telnet пишет что нет связи, (хотя не моментально отваливается а висит некоторое время)

Что может быть? Как грамтоно сделать порт форвардин для виртуальных машин?



Последнее исправление: glorsh66 (всего исправлений: 1)
Ответ на: комментарий от Dimez

sysctl net.ipv4.ip_forward - 1 конечно Я так еще разные параметры пробовал.

Может кто поделится рабочим конфигом.

Или это не так просто учитывая что у меня бридж по дефолту используется. И проще будет какой нибудь ssh port forwarding использовать?

glorsh66
() автор топика
Последнее исправление: glorsh66 (всего исправлений: 2)

iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22

А на хосте sshd не запущен?

MASQUERADE или SNAT нужен обязательно в любом случае.

Должно получиться что-то типа:

# Проброс порта. Обрати внимание на dport - именно по нему надо стучаться снаружи.
iptables -t nat -A PREROUTING -p tcp --dport 1022 -j DNAT --to-destination 10.0.0.1:22
# разрешаем проход
iptables -t filter -A FORWARD -d 10.0.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -s 10.0.0.0/24 -j ACCEPT
# Или открыть форвард политикой на время отладки
itpables -t filter -P FORWARD ACCEPT
# Обязательный построутинг, чтобы пакеты могли уйти
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
в общем случае этого должно хватить, уточняющие правила уже по желанию.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Причем счетчик пакетов на iptables -t nat -A PREROUTING -p tcp –dport 1022 -j DNAT –to-destination 10.0.0.1:22

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

увеличивается..

(но по одному-два за телнет запрос)

glorsh66
() автор топика
Ответ на: комментарий от glorsh66

Скрипт. Но выполняет немного грамотнее (при старте виртуалки поднимает правила, при остановке - удаляет)

Dimez ★★★★★
()
Ответ на: комментарий от glorsh66

Тогда показывай настройки.

На хосте и на целевой виртуалке

ip a l
ip r l
iptables -nvL
netstat -ntpl

shell-script ★★★★★
()

Тебе нужно делать ещё и обратные преобразования.

Ответные сообщения сейчас идут с внутренними адресами квм виртуальных машин.

Можно пойти ещё вообще другим путём делать полностью netmap то есть у тебя есть какая-то внутренняя сеть для КВм машин. Допустим 192.168.20.0/24 и ты делаешь netmap в сети допустим 192.168.100.0/24 всего адресного пространства во внутреннюю сеть.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

В общем победил

Оказалось что - не был прописал defaut gateway на гостевой машине

добавил при помощи ip route add default via 192.168.100.1

И второе нужно было добавлять в таблицу nat в цепочку OUTPUT, по какой то приче именно через OUT put работало

sudo iptables -t nat -A PREROUTING -p tcp  --dport 2222 -j DNAT --to-destination 192.168.100.217:22
sudo iptables -t nat -A OUTPUT -p tcp  --dport 2222 -j DNAT --to-destination 192.168.100.217:22
glorsh66
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.