Как заставить работать туннель от сервера к клиенту?
Здравствуйте. Нужен совет по настройке туннеля OpenVPN. Имеется два шлюза, и две сети - 192.168.1.0 (клиент) и 192.168.0.0(сервер). Между собой сети связаны через туннель OpenVPN. При этом из сети клиента в сеть сервера есть свободный доступ, можно ходить по сетевым шарам, и т.д., но в обратную сторону такого доступа нет. В какую сторону нужно копать, чтобы сети были видны в обе стороны?
Надеюсь понятно объяснил.
P.S. В итоге туннели подняты в обе стороны, маршруты есть, но туннель всё равно работает в одну сторону. Мистика.
Уже не знаю даже в чём дело, в Iptables или в OpenVPN. В комментариях прикладываю настройки и выводы
первая строчка заставляет клиента при подключении добавить маршрут в сеть сервера, вторая добавляет маршрут в сеть клиента.
На тоннельном интерфейсе клиента NAT не нужен
MaxxDamage, после изменения конфигурационного файла, перегружали сервер? Проверьте таблицы маршрутизации после установки соединения на обоих концах тоннеля. Если нужные маршруты присутствуеют, возможно, неправильно настроен firewall
Dmitry, перезагружал конечно. По таблицам маршрутизации...
На сервере
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
На клиенте
-A POSTROUTING -o tun0 -j MASQUERADE
MaxxDamage, это не таблица маршрутизации, это настройки iptables. Кстати, вторая строчка необязательна и даже немного лишняя. Текущие маршруты можно посмотреть по командам
ip route
route print
netstat -r
MaxxDamage, нужные маршруты поднялись с обоих концов тоннеля, это хорошо. Попробуйте traceroute с хоста серверной сети до хоста в клиентской сети. Windows эта команда выглядит как tracert
MaxxDamage, предполагаю, что на сервере запрещён forward между 192.168.0.0 и 192.168.1.0, так как на клиенте у вас настроен nat на туннельном интерфейсе - доступ из клиентской сети в серверную есть, а наоборот нет. Смотрите настройки iptables. Возможно, требуется добавить разрешающее правило.
Iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
Iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
Выполните эти две команды в терминале на сервере, если трафик пойдёт, то дело в этом. Настраивайте firewall, убирайте маскарад на туннельном интерфейсе клиента и трафик будет ходить между сетями без каких-либо nat
MaxxDamage, у вас на сервере трафик блокируется, если вы добавили разрешающее правило, но трафик так и не пошёл, значит запрещающие правила находится выше разрешающего.
iptables-save с сервера покажите вывод
Dmitry, Попробовал добавить костылём, как делали здесь. Привязал алиасом к туннелю один нужный мне адрес в сети клиента. Пинги пошли, но сетевые шары не видны всё равно. Это может как-то подсказать причину почему туннель нормально не работает?
MaxxDamage, вы назначили на тоннельной интерфейс IP адрес из другой подсети? Так он у вас на пинги и отвечает, пакеты дальше не уходят. Поэтому и шары не открываются, так как на сервере никаких шар нет.
Dmitry, я уже просто не знаю какие варианты пробовать. Разрешил все возможные варианты форварда, от туннеля к адресам и наоборот, проверил шары, разрешил форвард на шлюзе клиента... Ничего не помогает. От клиента к серверу пакеты бодренько летают, шары доступны, всё красиво. Обратно никак.
Решение нашли на другом ресурсе.
В конфиг клиента прописывается client-config-dir /путь к каталогу с конфигом
в этот каталог помещается файл с названием клиента, в файл прописываем iroute 192.168.1.0 255.255.255.0. Рестартуем клиент и сервер, всё работает
MaxxDamage, Нужно!
Тут 2 момента:
1. Сам сервер должен знать, что за каким-то клиентом (их может быть много) находится какая-то сеть. Для этого есть соответствующие директивы для настройки клиента и сервера OpenVPN (смотри ссылку выше).
2.Компы в сети за сервером должны знать, что сеть за клиентом доступна через вот этот сервер. Это уже отношения к OpenVPN не имеет. Если сервер OpenVPN является и шлюзом по умолчанию для компов внутри сети за сервером, то ничего дополнительно предпринимать не нужно. Если же нет - нужно любым доступным способом прописать маршрут до сети за клиентом через сервер OpenVPN.
res2001,
Ну примерно я понимаю, что где-то надо это настроить, вопрос где и как. Прописывать маршрут типа
-A PREROUTING -d 192.168.1.0/32 -p udp -m udp -j DNAT --to-destination 10.8.0.0/24? Или я нифига не понимаю?
res2001,
Я что-то подобное, как по ссылке и прописывал - push "route 192.168.1.0 255.255.255.0" в конфиг сервера, но не помогло. Мне нужно чтобы из сети сервера по туннелю шли только пакеты для сети 192.168.1.x.
MaxxDamage, push route - прописывает указанный маршрут на стороне клиента.
Вам же нужно прописать маршрут на сервере, это директива route
И не забывайте про п.2.
MaxxDamage, т.е. у вас играют обе директивы:
push route - добавляете маршрут на клиенте в сеть за сервером
route - добавляете маршрут на сервере в сеть за клиентом
res2001, прописал в конфиг сервера route 192.168.1.0 255.255.255.0, прописал в конфиг клиента push "route 192.168.1.0 255.255.255.0", всё равно сеть доступна только в одну сторону, от клиента к серверу, обратно доступа нет
ЧЯДНТ?
MaxxDamage, Почему в обеих командах одинаковые подсети? Команды для разных сетей, я же описал ситуации, когда та и другая используются. Вы статью прочитали по ссылке? Обе команды пишутся в конфиге сервера.