LINUX.ORG.RU
решено ФорумAdmin

openvpn+iptables


0

1

Здравия всем) Есть сервер и есть клиент. Между ними openvpn туннель. На сервере eth0 с белым статическим ip. Как настроить iptables (nat) на сервере, чтобы прокинуть, скажем, 80-й порт с клиента на тот самый белый внешний ip сервера?


Что значит «прокинуть порт»? И почему nat нужно настраивать на сервере? Заодно можно уточнить как поднят тунель, указан ли этот белый статический ip в local/remote в конфиге openvpn.

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

Спасибо за ответ!) «клиент» это машина с «серым» ip. На ней крутится апач, поэтому нужен доступ из вне на 80 порт «клиента». Для этого на другой машине «сервер», которая находиться в другом городе и у которой белый внешний ip, был поднят openvpn сервер и организован туннель «клиент»-«сервер». За клиентом и сервером есть свои локальные сети. Пинги ходят туда-обратно отовсюду.

server.conf

server 10.0.11.0 255.255.255.0 
push "route 172.16.0.0 255.255.255.0" #сеть за сервером
route 192.168.135.0 255.255.255.0 # eth0 клиента
route 10.0.10.0 255.255.255.0 # eth1 
route 10.0.1.0 255.255.255.0 # eth2

ccd файл client на «сервер»

ifconfig-push 10.0.11.9 10.0.11.10
iroute 10.0.1.0 255.255.255.0
iroute 10.0.10.0 255.255.255.0

Нужно, стучась извне на внешний адрес:порт «сервера», попадать на «клиент»:порт.

вот такой проброс к успеху не приводит...

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.1.1:80
а если то же самое, но в destination указать машину из внутренней подсети сервера, например 172.16.0.2, и прокинуть другой порт (vnc например 5900) то можно извне попадать на эту машину.

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

Запустите на клиенте tcpdump на интерфейсе с openvpn и смотрите, приходят ли пакеты из интернета при попытке установить соединение, как-то наподобие такого:

tcpdump -i tun0 -n -nn host 10.0.1.1 and port 80

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

Если запросы (SYN-пакеты) приходят, а ответные пакетов нет, значит ответные пакеты уходят в другой интерфейс (по маршруту по умолчанию). В этом случае нужно, либо на сервере сделать SNAT уходящих в тунель пакетов (но тогда для клиента все http-соединения будут выглядеть как идущие с одного ip-адреса), либо настраивать на клиенте маршрут по умолчанию в тунель, скорее всего с помощью policy routing ( с использованием команды «ip rule» ).

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

Да, похоже что ответные улетают в неизвестном направлении.«В этом случае нужно, либо на сервере сделать SNAT уходящих в тунель пакетов (но тогда для клиента все http-соединения будут выглядеть как идущие с одного ip-адреса)»

Подскажите как в этом случае грамотно их направить обратно(прописать SNAT на сервере). я правильно понял, что в этом случае все соединения (на любые проброшенные порты-сервисы) с точки зрения клиента будут инициироваться сервером?

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

Да, если на сервере, где делается DNAT, сделать ещё и SNAT, то клиент (сервер с апачем) будет считать что все соединения идут с одого ip-адреса. В результате в логах нет ip-адресов, нет возможности ограничивать число клиентов с одно ip-адреса и прочие, что может быть полезно, если на апаче крутится какой-то публичный сайт. Если это всё не нужно (сайт только для своих), то как-то так:

iptables -t nat -I POSTROUTING -o tun0 -d 10.0.1.1 -p tcp --dport 80 -j SNAT --to-source 10.0.11.1

mky ★★★★★
()
Ответ на: комментарий от mky
iptables -t nat -I POSTROUTING -o tun0 -d 10.0.1.1 -p tcp --dport 80 -j SNAT --to-source 10.0.11.1

Да, так всё заработало, спасибо =)

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