 Появилась потребность сделать VPN для аутсорсинговой компании — организовать связь с сетями компаний клиентов таким образом, чтобы админы заказчика и собственной сети видели каждый хост клиента за NATом и не было возможно обратное. Аппаратные решения в принципе не рассматривались ввиду стоимости, да и все проприетарные программные решения отсеялись по этой же причине. Остался только свободный софт. Благо свободных решений более чем достаточно Поскольку начинал я знакомство со свободными системами с FreeBSD — выбор пал на нее. Сразу прошу хабралюдей не разводить холивар на тему BSD vs Linux – основной причиной выбора были более глубокие знания этой системы (до сих пор не могу осилить Linux настолько, чтобы быть уверенным в результатах своей работе с ним). Собственно, ВПН решено было организовать на основе OpenVPN — опять же, раньше приходилось иметь с ней дело, и недостатков я не обнаружил. И снова попрошу без холивара на тему PPTP – если есть приверженцы такого решения – лучше напишите свою статью. Так же заказчиком было озвучено требование простоты управления. Чтобы в случае чего работники заказчика смогли подправить конфиги по бумажке под конкретные нужды. Ну и требовался полный мониторинг трафика, проходящий между сетями и доступ через авторизацию в AD (у заказчика на основном шлюзе стоит Kerio Winroute Firewall) Итак, подведя черту под требованиями, получили следующее: — Минимальная стоимость оборудования — Легкость в управлении — Скорость развертывания — Управление доступом Подробности решения – под катом Задача легкого управления, естественно, свелась к выбору дистрибутива с удобным веб-интерфейсом. Выбор пал на pfSense: 1. Минимальные требования к железу — работает на PII/128RAM; 2. Стабильная, безглючная веб-мордочка — разберется даже эникейщик, поверхностно знакомый с сетевыми технологиями; 3. Установка за 10 минут — сохранение всех настроек в одном XML-файле; 4. Кроме того в качестве бонусов большое количество софта, которое управляется так же из веб интерфейса и весь набор ПО для FreeBSD, если уж что-то специфичное понадобится. Что нами собственно было сделано по шагам: 1. Поставлена в виртуалку (на XEN) чистая FreeBSD 8.2, которой отдали одно ядро и 256 памяти 2. Установлена OpenVPN (просто #pkg_add -r openvpn20) 3. Сочинен конфиг OpenVPN следующего содержания: port 1194 #на какой порт стучаться клиентам proto udp #наш выбор UDP dev tap # выбрано было из соображений адресации — не хотелось видеть кучу туннелей #keys ca /usr/local/etc/openvpn/keys/ca.crt cert /usr/local/etc/openvpn/keys/server.crt key /usr/local/etc/openvpn/keys/server.key dh /usr/local/etc/openvpn/keys/dh1024.pem #server`s IP server 10.17.0.0 255.255.0.0 #собственно, IP сервера push «route 10.17.0.0 255.255.0.0» # маршрут клиентам для нашего VPN push «route-gateway 10.17.0.1» Почему-то без него не работало, хотя должно client-config-dir ccd #директория в которой лежат конфиги клиентов client-to-client #разрешаем клиентов видеть друг друга route 10.17.0.0 255.255.0.0 #маршрут для нашего VPN #authentification tls-server #заставим TLS tls-auth keys/ta.key 0 tls-timeout 120 auth MD5 #заставим MD5 cipher BF-CBC #заставим шифровать keepalive 10 120 comp-lzo #сжимаем трафик max-clients 4000 #взято с потолка user nobody #в целях паранойи и философии системы group nobody persist-key #logging status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 3 Расписывать полностью конфигурирование, я думаю, не стоит — специфичных статей достаточно. 4. Собственно, добавил все это в автозагрузку: server# more /etc/rc.conf defaultrouter=«192.168.0.247» gateway_enable=«YES» hostname=«server.nerv.local» ifconfig_re0=«inet 192.168.0.244 netmask 255.255.255.0» keymap=«ru.koi8-r» sshd_enable=«YES» openvpn_enable=«YES» openvpn_if=«tap» openvpn_configfile="/usr/local/etc/openvpn/server" openvpn_dir="/usr/local/etc/openvpn" startroute_enable=«YES» Раздача IP клиентам ведется из файлов директории ccd — это видно из конфига на этом вся настройка сервера закончена — опять же не буду описывать генерацию ключей — все это очень правильно и подробно расписано, например, здесь: www.lissyara.su/articles/freebsd/security/openvpn/ В файле клиента в директории ccd пишется только одна строка: ifconfig-push 10.17.0.131 255.255.0.0 # отдаем клиенту конкретный адрес с маской Все операции по поднятию боевого сервера на железе заказчика уложились в 20 минут, не считая создания ключиков. Для настройки клиентов потребовалось некоторое шаманство — зато не пришлось заставлять эникейщиков касаться консоли. В статье я просто приведу инструкцию к действию, которая была выдана заказчику: ==========настройка OpenVPN клиента на pfSense====== 1. меню System > Cert Manager > вкладка CA добавляем новый CA 1. в поле Descriptive name вписываем произвольный идентификатор; 2. в списке Method выбираем «Import an existing Certificate Autority» 3. в поле Certificate data вписываем содержимое сертефиката ca.crt сохраняем 2. меню System > Cert Manager > вкладка Certificates добавляем новый сертификат клиента 1. в списке Method выбираем «Import an existing Certificate» 2. в поле Descriptive name вписываем произвольный идентификатор; 3. в поле Certificate data вписываем содержимое сертефиката name_client.crt 4. в поле Private key data вписываем содержимое файла name_client.key сохраняем 3. меню VPN > OpenVPN > вкладка Client добавляем новое подключение 1. в списке Server Mode выбираем Peer to Peer (SSL/TLS) 2. протокол UDP 3. Device mode — TAP 4. Interface — WAN 5. local port — оставляем пустым 6. server host or address вписываем ip-адрес сервера 7. server port 1194 8. proxy не заполняем 9. в разделе TLS Authentication снимаем галочку (Automatically generate a shared TLS authentication key) 10.в открывшемся поле вписываем содержимое ta.key 11.Peer Certificate Authority выбираем то, что ввели в п. 1.1 12.в списке Client Certificate выбираем тот, что ввели в п. 2.2 13.в списке Encryption algorithm выбираем BF-CBC(128 bit) 14.в поле Compression ставим галочку (Compress tunnel packets using the LZO algorithm) 15 в поле Advanced вписываем auth MD5 ns-cert-type server persist-key verb 3 сохраняем. Если все сделали правильно, то через 15-45 секунд подключение станет активным 4. Выбираем пункт меню Interfaces -> (assign) 1. Добавляем новый интерфейс кнопкой "+" 2. Выбираем в выпадающем списке интерфейс ovpnc1, нажимаем кнопку «Save» 3. Выбираем пункт меню Interfaces -> OPT1, ставим галочку «Enable interface», нажимаем «Save», нажимаем кнопку «apply change» 4. В Строке description вводим VPN, в списке Type выбираем «Static», в появившемся поле «Static IP configuration» вводим адрес ВПН-клиента и выбираем маску 16 (шлюз вводить не надо!!!) 5. Если есть галочки в разделе Private networks — снимаем их и нажимаем кнопку «Save» 5. Выбираем пункт меню Firewall -> NAT 1. выбираем вкладку Outbound 2. Ставим переключатель mode в режим manual (правое положение) и нажимаем save 3. В списке NAT добавляем новую опцию нажатием кнопки "+" 4. В поле Interface выбираем OpenVPN (не VPN!!!) 5. в поле Source вводим адрес локальной сети (это, как правило, 192.168.x.0/24) и выбираем маску 6. В поле Destination вводим сеть 10.17.0.0 и маску 16 7. В поле Translation ставим галочку Static port 8. нажимаем кнопку SAVE ====================================== Естественно, pfSense должен быть настроен как основной шлюз на стороне клиента заказчика. И, наконец, последний шаг — настройка доступа из сети заказчика в сети клиентов: на шлюзе заказчика был поднят клиент OpenVPN (использовали OpenVPN-GUI) и прописаны статические маршруты до сетей через IP-адреса сети 10.17.0.0/16 Вот собственно и все, что понадобилось. Единственно требование для простоты настройки этой схемы — сети всех клиентов должны быть разные. Для заказчика это условие оказалось несложным – там, где сети совпадали, все было перенастроено без проблем и полностью удаленно через эту же сеть VPN.
источник: http://habrahabr.ru
ссылка на материал: http://thin.kiev.ua/router-os/50-pfsense/611-openvpn-pfsense-2-0.html
доп. материал:
http://forum.pfsense.org/index.php/topic,7840.0.html
http://forum.pfsense.org/index.php/topic,32662.msg168997.html#msg168997
http://doc.pfsense.org/index.php/VPN_Capability_OpenVPN
http://forum.pfsense.org/index.php/topic,35815.0.html
{jcomments on} |