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

Проблема с пробосом портов в впне

 ,


0

1

На меня пошел хороший ддос, пришлось прятаться через защищенную виртуалку, нашел на openvz, но без GRE, пришлось костылями, выбор пал на peervpn, туннель настроился легко, пинги работают, с виртуалки для теста файлы качаются с моего сервера через веб.
Сделал:
iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination впн_ип_моего_серва:80
iptables -t nat -A POSTROUTING -s впн_ип_моего_серва -j SNAT --to внешний_ип_виртуалки
И, разумеется, ничего не сработало, не подключается ничего на 8888 порт виртуалки.
На моем сервере через tcpdump вижу что пакеты приходят, но не вижу чтоб уходили.

net.ipv4.ip_forward = 1 на виртуалке стоит

Может еще что зарезано провайдером виртуалки или что это может быть?
Саппорт виртуалки укатился, поэтому пнуть за отсутствие обещанного GRE и на эту тему не выходит.

Виртуалка под центосью, если что. Опенвпн городить не хотелось, слишком громоздко.

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



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

Если тебе просто надо редиректить запросы к другому серверу («с виртуалки для теста файлы качаются с моего сервера через веб»- он же торчит в интернеты, так?!) то не проще его апстримом балансера прописать? Я что-то не совсем понимаю зачем vpn в этой реализации.

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

Потому, что веб это для теста, а по факту - там софт, который не может в апстримы и должен видеть реальные ип пользователей.

zlofenix
() автор топика

Если нужен только проброс портов, то в POSTROUTING ничего писать не надо. Также надо, чтобы в -t filter -A FORWARD было разрешение на форвардинг в обе стороны.

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

Все цепи ACCEPT, без построутинга пробовал - та же фигня.

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

А, там есть туннель. Ну тогда либо на конечном сервере делать default маршрут через внутритуннельный адрес vpn-пира, либо на точке входа делать

-t nat -A POSTROUTING -d $ip -p tcp --dport 8888 -j MASQUERADE
, где $ip - внутритуннельный адрес конечного сервера.

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

Менять шлюз - нельзя, 2е - не прокатило тоже. На прероуте пакеты есть, на пост - нету.

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

Никакие комбинации не работают.
-A PREROUTING -p tcp -m tcp --dport 8888 -j DNAT --to-destination реальный серв:80
-A POSTROUTING -d реальный серв -p tcp -m tcp --dport 80 -j MASQUERADE

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

Возможно, режется iptables на конечном сервере. Попробуй еще на всякий ip route flush cache там же.

А вообще, если нужно видеть реальные адреса клиентов, то надо либо дефолтный маршрут через впн, либо policy routing настраивать, чтобы ответ мог уходить туда, откуда пришел запрос.

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

Вкратце: $device - впн-интерфейс, например tap0. $peer-ip - внутритуннельный адрес пира (точки входа). $vpn-ip - внутритуннельный адрес конечного сервера

ip route add $peer-ip dev $device table 100
ip route add default via $peer-ip table 100
ip rule add to $vpn-ip table 100
ip rule add from $vpn-ip table 100
До кучи можно сделать sysctl -w net.ipv4.conf.$device.rp_filter=2. Номер таблицы можно выбирать от 1 до 252.

Вроде ничего не забыл.

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

Спасибо, правильно понимаю что это надо только на конечном сервере сделать, а на виртуалке - пре и пост роутинг как и было?

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

Да, это только на конечном делать. POSTROUTING на виртуалке в этом случае не нужен, т.к. пропадут адреса клиентов.

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