Iptables: проброс портов

Рейтинг: 1Ответов: 2Опубликовано: 28.02.2015

Пытаюсь пробросить порт на Ubuntu. Постановка задачи: есть шлюз с внешним адресом EXTERNAL_IP и внутренним 192.168.0.1. В локальной сети есть сервер 192.168.0.2, на котором крутится Apache. Внешний интерфейс шлюза p2p1, внутренний p2p2. Надо, чтобы при заходе на EXTERNAL_IP браузером снаружи (работает) и изнутри сети (НЕ РАБОТАЕТ) отдавался сайт, который крутится на внутреннем сервере. Написал следующие правила. Где я неправ?

iptables -t nat -A PREROUTING —dst EXTERNAL_IP -p tcp —dport 80 -j DNAT —to-destination 192.168.0.2  
iptables -t nat -A POSTROUTING —dst 192.168.0.2 -p tcp —dport 80 -j SNAT —to-source 192.168.0.1  
iptables -t nat -A OUTPUT —dst EXTERNAL_IP -p tcp —dport 80 -j DNAT —to-destination 192.168.0.2  
iptables -I FORWARD 1 -i p2p1 -o p2p2 -d 192.168.0.2 -p tcp -m tcp —dport 80 -j ACCEPT

Ответы

▲ 1

Ваша ситуация выглядит примерно так?

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

Диаграма сети

▲ 1

Можно решить задачу на уровне DNS, то есть чтобы для локальных пользователей хост резолвился в 192.168.0.2, а для запросов извне в EXTERNAL_IP.

Данное решение возможно, если вы можете контролировать локальный DNS.