OpenVPN и раздача прав пользователям.



  • Всем доброго.
    В организации стоит pfsense, который роутит интернет от двух провайдеров в три внутренние сети.
    Нужно:
    1. связать сеть удалённого офиса (192.168.3.0/24) с одной из сетей (тут всё вроде ясно pfsense - OpenVPN - push "route 192.168.1.0 255.255.255.0"; route 192.168.3.0 255.255.255.0 - уже настроено)
    2. Некоторым пользователям предоставить доступ к оборудованию в сети 192.168.2.0/24
    3. Ещё более некоторым пользователям предоставить доступ к почтовому серверу 192.168.1.2, но запретить доступ в сети 192.168.1.0/24 и 192.168.3.0/24
    4. Обеспечить доступ к оборудованию в сети 192.168.4.0/24
    5. никто не в курсе, OpenVPN  на айфонах поднимается? (это свеженькое, если честно - ещё на эту тему не гуглил)

    После некоторых раздумий решено следующее…

    • для пользователей пунктов 2 и 3 завести пользователей и прописать в "Client Specific Overrides" "ifconfig 10.10.40.XXX; route........" кому куда нужно.
    • настроить правила трафика, разрешающие трафик с адресов розданных в предыдущем пункте.

    Гложут сомнения, на счёт совместимости с п.1 требований.

    Я правильно понимаю, что если будет обнаружен пользователь с именем, совпадающем с именем в сертификате клиента то будет запрошен пароль этого пользователя, а если будет узнан только сертификат, то запрос пароля производиться не будет?

    Ну и как кто видит правила, например, разрешающее роутинг трафика из сети 192.168.3.0/24 в сеть 192.168.1/24 через VPN клиента с адресом 10.10.40.6/32
    и правило, запрещающее клиенту с адресом 10.10.40.10 ходить в сеть 192.168.1.0/24

    Уточняющие вопросы приветствуются - мож сам лучше пойму чего хочу. И смогу объяснить заказчику чего он хочет :)



  • Ага.
    Ну, уточнения… нужно таки поднимать два севера на разных портах - для организации канала между офисами Peer-to-Peer (SSL/TLS) или Remote access (SSL/TLS) (кстати, где можно прочесть в чём разница?), а для доступа прочих - Remote Access (SSL/TLS+User auth).

    С чем пока не разобрался - если в настройках клиента указать push ifconfig и два адреса то один будет назначен клиенту, а второй будет алиасом для виртуального интерфейса ovpncX. Но если нарисовать правило, куда можно, куда нельзя ходить с этих адресов ничего не получится. Я пытался сделать assign интерфейса - тоже ничего хорошего не получается. Что я делаю не так?



  • openvpn[57795]: ERROR: FreeBSD route add command failed: external program exited with error status: 1

    С какого-то момента на сервере завелась такая вот бяда и как с ней бороться я не знаю :(
    push "route 192.168.1.0 255.255.255.0"; route 192.168.4.0 255.255.255.0; в advanced configuration сервера.



  • @Ave:

    openvpn[57795]: ERROR: FreeBSD route add command failed: external program exited with error status: 1

    С какого-то момента на сервере завелась такая вот бяда и как с ней бороться я не знаю :(
    push "route 192.168.1.0 255.255.255.0"; route 192.168.4.0 255.255.255.0; в advanced configuration сервера.

    http://forum.pfsense.org/index.php/topic,35815.0.html



  • Я добился устойчивой установки VPN соединений. Со шлюзов (то бишь машин с pfSense) можно просматривать удалённые сети. Броадкасты и мультикасты вполне слышны в разных частях сети (побочный эффект правил "разрешить весь траффик из сети …." на локльном интерфейсе). А вот "правильные" пакеты подхватываются правилом NAT  и роутятся уже с внешнего интерфейса.

    В процессе чтения документации к pf возник вопрос: pf обрабатывает правила не в порядке следования, а по правилу максимального соответствия. Как заставить его не маскарадить пакеты между сетками?

    Кстати, после применения правил итоговый конфиг pf попадает в файл /tmp/config.debug (там, конечно есть немного лишних переменных - их php скрипт вытрясает, но вполне понятно что к чему)
    Но от попыток разобраться какое ж всё-таки правило сработает становится малость грустно.



  • Всем доброго.
    Щастье почти наступило - на стороне VPN клиента сделал assign интерфейса openvpn и добавил правило outbond NAT:
    Do not NAT - не выбрано (хотя, по идее оно как раз мне и надо!!!)
    Interface - OpenVPN
    Protocol - any
    Source - 192.168.X.0/24 - подсеть клиента
    Destination - 192.168.1.0/24 - подсеть сервера
    Translation - interface address

    Из клиентской сети стало можно свободно ходить в сеть головной организации. Но в логах отображается адрес виртуального шлюза (в данном случае 10.10.40.X - адрес виртуального интерфейса OpenVPN), а хотелось бы видеть клиента. Помогите сформулировать правило для NAT…



  • Вопрос - вы хотите видеть всю подсеть клиента?
    Тогда NAT здесь не подойдет. Необходимо делать все роутингом.
    При этом местный роутер должен быть шлюзом для всех компьютеров офиса.



  • Угу… все маршруты прописались правильно...
    И со шлюза всё правильно отправляется.
    А вот из подсети - первым срабатывает NAT. Отправляет пакет на внешний интерфейс и усё, роуты даже не задействуются.
    Попробовал в правиле NAT LAN-to-WAN исправить назначение с any на "не подсеть 192.168.1.0/24" - не работает.



  • NAT должен прописываться на WAN интерфейсе, а правила роутинга на LAN.



  • Можно на яблоках… уже просто ничего не могу придумать и сижу перебираю варианты.
    две сети: 192.168.1.0/24 (со стороны сервера) и 192.168.4.0/24 (со стороны клиента)
    Между WAN интерфейсами проброшен туннель 10.10.40.1<-->10.10.40.2 cо стороны сервера и 10.10.40.10<-->10.10.40.9 со стороны клиента.
    Маршруты:
    на сервере -
    10.10.40.0/24 10.10.40.2 UGS 0 233482 1500 ovpns2
    10.10.40.1 link#11 UHS 0 0 16384 lo0
    10.10.40.2 link#11 UH 0 0 1500 ovpns2
    192.168.1.0/24 link#4 U 0 228190654 1500 fxp0
    192.168.4.0/24 10.10.40.2 UGS 0 19 1500 ovpns2

    На клиенте
    10.10.40.1/32 10.10.40.5 UGS 0 0 1500 ovpnc1
    10.10.40.9 link#9 UH 0 0 1500 ovpnc1
    10.10.40.10 link#9 UHS 0 0 16384 lo0
    127.0.0.1 link#4 UH 0 67 16384 lo0
    192.168.1.0/24 10.10.40.9 UGS 0 6 1500 ovpnc1
    192.168.4.0/24 link#1 U 0 241004 1500 sis0
    192.168.4.1 link#1 UHS 0 0 16384 lo0

    На сервере уже есть один VPN клиент, используется для удалённых сотрудников, поэтому интерфейс ovpns2.

    После установления соединения с клиентского шлюза можно бродить по сети 192.168.1.0/24
    Что нужно прописать в правилах клиента, чтоб народ оттуда мог выбраться только в сеть головного офиса?



  • Вот не роутит он и всё тут.
    Как определить, какой из шлюзов гасит пакеты - они без NAT не отправляются, или не принимаются? Стоят галки скиывать в лог на всех правилах с обеих сторон, стоит галка кадать в лог пакеты отброшенные дефолтовым правилом. И в логах ничего с обеих сторон.



  • Я, к сожалению, не могу понять Вашу схему по описанию.



  • (192.168.4.0/24 удалённая)<–>192.168.4.1 LAN (pfSense) 10.10.40.X ovpnc1

    (192.168.1.0/24 сеть офиса)<-->192.168.1.43 LAN (psSense) 10.10.40.1 ovpns2

    Я попробовал запустить на клиенте и сервере tcpdump -i ovpnXX -vv

    Без преобразования адресов на сервере не ловится ничего. На клиенте пакеты вида localhost.(случайный порт) > localhost.(порт на сервере)... Может, сервер удаляет пакеты по приходу? хотя, вроде правила "пропускать все пакеты" на закладке OpenVPN выставлены.



  • Ситуация немного проясняется.
    Если сгребать пакеты со внешнего интерфейса сервера, то он получает положенное количество пакетов (проверено пингом - сколько пакетов отправлено, столько сервер и получил).
    Далее, как я понимаю, из-за того, что это уже второй VPN-сервер на шлюзе на него не распространяются правила, определённые на закладке OpenVPN.
    Я попытался сделать assign интерфейса на сервере - у меня тут же отвалился клиент, который подключен к другому VPN-серверу.
    Немного смущает, что в логах эти пакеты не отображаются как отброшенные.
    Как побороть такое?


Locked