LINUX.ORG.RU
ФорумAdmin

[iptables] доступ к проброшенным внутрь NAT сервисам изнутри NAT по внешнему адресу

 


1

2

Есть сервер на котором крутится несколько виртуалок. Каждая имеет доступ во внешний мир, отдельный внешний IP-адрес на хост-системе и набор портов, которые пробрасываются внутрь.
Сейчас встала проблема, что изнутри (ни с хост-системы, ни из гостей) по внешнему IP-адресу нет доступа к внутренним сервисам гостей. Хотелось бы обращаться к сервисам не трогая общеупотребительный DNS.
Пытался добавить ко всему уже существующему DNAT, однако этого, похоже, недостаточно:
iptables -t nat -A PREROUTING -i интерфейс_локалки -d внешний_адрес -j DNAT --to-destination внутренний_адрес_гостя
Без DNAT получаем «Connection refused», с DNAT просто ничего.

★★

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

Ответ на: комментарий от zgen

попробовал

/sbin/iptables -t nat -A PREROUTING -p tcp -d MY.REAL.IP.ADDR --dport 8081 -s ! 192.168.0.0/24 -j DNAT --to 192.168.0.14:80
и
$IPTABLES -t nat -A PREROUTING -p TCP -d 139.142.1.100 --dport 80 -j
DNAT --to 192.168.0.2:80
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.2 -j
SNAT --to 192.168.0.1

нет эффекта :(

вцелом сейчас схема такая
for i in ${!host_ip[*]}
do
# keep following ports to host
iptables -t nat -A PREROUTING -i $host_interface -d ${host_ip[$i]} -p tcp -m multiport ! --dports «${guest_ports[$i]}» -j ACCEPT
# the rest, route to the guest
iptables -t nat -A PREROUTING -i $host_interface -d ${host_ip[$i]} -j DNAT -p tcp -m multiport --dports «${guest_ports[$i]}» --to-destination ${guest_ip[$i]}
done

# forward all packets from already established connections
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

for i in ${!guest_ip[*]}
do
# allow forwarding new connections from host to guest
iptables -A FORWARD -i $host_interface -o $vnet_interface -d ${guest_ip[$i]} -m state --state NEW -j ACCEPT

# allow forwarding new connections from guest to host
iptables -A FORWARD -i $vnet_interface -o $host_interface -s ${guest_ip[$i]} -m state --state NEW -j ACCEPT

iptables -t nat -A POSTROUTING -o $host_interface -s ${guest_ip[$i]} -j SNAT --to-source ${host_ip[$i]}
done

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

При описанной схеме есть возможность пинговать соседей-гостей и хост систему по их внешним адресам. Из гостей проходят подключения к хосту по его внешнему адресу. К соседям-гостям имеем «connection refused».
Вероятно, где-то не хватает ещё одного FORWARD --state NEW. :-/

frozen_twilight ★★
() автор топика

Казалось бы, чтобы хосту в локалке доступиться к самому себе или соседям по внешнему адресу должно быть достаточно

iptables -t nat -A PREROUTING -d ${host_ip[$i]} -j DNAT --to-destination ${guest_ip[$i]}
Что я забыл?

frozen_twilight ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.