- •Установка центра сертификатов
- •Серверные сертификаты
- •Настройка простого клиента
- •Первичное решение проблем
- •Расширенная настройка vpn на сервере в режиме сетевого моста
- •Подготовка настроек интерфейса для сетевого моста на сервере
- •Подготовка настроек сервера для сетевого моста
- •OpenVpn с графическим интерфейсом под Mac os X: Tunnelblick
- •OpenVpn с графическим интерфейсом под Windows 7
Настройка простого клиента
Существует несколько реализаций клиента OpenVPN как с графическим интерфейсом так и без него. Вы можете сможете прочитать больше о клиентах в следующем разделе. На данный момент мы используем OpenVPN клиент для Ubuntu который использует ту же программу, что и сервер. Поэтому вам снова придется поставить пакет openvpn но уже на клиентской машине:
sudo apt-get install openvpn
Тем временем скопируем файл примера client.conf в каталог /etc/openvpn/:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Скопируйте ключи клиента и сертификат центра сертификатов, созданные в предыдущем разделе, например, в /etc/openvpn/ и отредактируйте /etc/openvpn/client.conf, чтобы убедиться, что следующие строки указывают на эти файлы. Если вы положили файлы в /etc/openvpn/, то путь к ним можете опустить.
ca ca.crt
cert client1.crt
key client1.key
И вам осталось указать адрес или имя OpenVPN сервера. Убедитесь в наличии ключевого слова client в файле настроек. Оно включает режим клиента:
client
remote vpnserver.example.com 1194
Далее запустим OpenVPN клиента:
root@client:/etc/openvpn# /etc/init.d/openvpn start
* Starting virtual private network daemon(s)...
* Autostarting VPN 'client' [ OK ]
Убедитесь, что интерфейс tun0 создан:
root@client:/etc/openvpn# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
Проверьте, что вам доступен OpenVPN сервер:
root@client:/etc/openvpn# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=0.920 ms
Сервер OpenVPN всегда использует первый доступный адрес в сети клиента и только этот IP адрес будет откликаться на ping. Например, если вы настроили маску /24 клиентской сети, то будет использован адрес, оканчивающийся на .1. Адрес P-t-P, который вы видите в выводе ifconfig выше обычно не отвечает на запросы ping.
Проверьте вашу маршрутизацию:
root@client:/etc/openvpn# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
192.168.42.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.42.1 0.0.0.0 UG 0 0 0 eth0
Первичное решение проблем
Если что-то из того, что рассмотрено выше, у вас не работает, проверьте следующее:
Проверьте ваш syslog, например, так:
grep -i vpn /var/log/syslog
Может ли клиент соединиться с сервером? Возможно доступ блокирует firewall? Проверьте syslog на сервере.
Клиент и сервер должны использовать одни и те же протокол и порт, например, UDP порт 1194. Смотрите опции настройки port и proto.
Клиент и сервер должны использовать одно и то же сжатие. Смотрите опцию настройки comp-lzo.
Клиент и сервер должны использовать один и тот же режим: маршрутизации (routed) или моста (bridged). Смотрите опцию настройки server или server-bridge.
Расширенные настройки
Расширенная настройка VPN на сервере в режиме маршрутизации
Выше рассмотрена очень простая работающая VPN. Клиент имеет доступ к сервисам на машине VPN сервера через зашифрованный канал. Если вы хотите получить доступ к большему количеству серверов или к чему-то в других сетях, добавьте несколько маршрутов на клиенте. Например, если сеть вашей компании в целом может быть описана как 192.168.0.0/16, вы можете добавить этот маршрут на клиенте. Но вам придется также изменить маршрут для обратного направления - ваши сервера должны знать как проложить маршрут до сети VPN клиента.
Или вы можете указать шлюз по умолчанию для всех клиентов чтобы посылать весь их трафик сначала на VPN сервер, а от него через защитный сервер (firewall) компании в интернет. В этом разделе вы увидите некоторые возможные варианты настроек.
Передать маршрут клиенту чтобы разрешить ему доступ к другим частным подсетям за сервером. Помните, что эти частные сети также должны знать как построить маршрут до диапазона адресов клиента OpenVPN, находящегося за OpenVPN сервером:
push "route 10.0.0.0 255.0.0.0"
Если указана, то такая директива настроит всех клиентов на перенаправление их сетевых шлюзов по умолчанию через VPN, что заставит весь трафик, такой как просмотр страниц интернет-сайтов или DNS запросы, проходить через VPN (машине OpenVPN сервера или вашему центральному firewall может потребоваться маскировать с помощью NAT интерфейсы TUN/TAP в сторону интернета, чтобы они работали правильно):
push "redirect-gateway def1 bypass-dhcp"
Настройка режима сервера и предоставление VPN подсети для OpenVPN откуда брать клиентские адреса. Сервер заберет себе адрес 10.8.0.1, а остальные могут использоваться для предоставления клиентам. Каждый клиент будет иметь возможность подключиться к серверу по адресу 10.8.0.1. Поставьте комментарий на этой строке, если используете режим сетевого моста:
server 10.8.0.0 255.255.255.0
Сохранять записи соответствий клиента с их виртуальными IP адресами в указанном файле. Если OpenVPN выключается или перегружается, повторно подключившиеся клиенты получат те же виртуальные IP адреса, что и в прошлый раз:
ifconfig-pool-persist ipp.txt
Передать настройки на DNS сервера клиенту:
push "dhcp-option DNS 10.0.0.2"
push "dhcp-option DNS 10.1.0.2"
Разрешить соединения между клиентами:
client-to-client
Разрешить сжатие на VPN соединении:
comp-lzo
Директива keepalive обеспечивает отправку сообщений типа ping вперед и назад через соединение для того, чтобы каждая сторона знала, когда другая сторона становится недоступна. Проверка раз в секунду и решение, что удаленная точка не отвечает, если ответ не принят в течение 3 секунд:
keepalive 1 3
Хорошей идеей является снижение привилегий для сервиса OpenVPN после установки:
user nobody
group nogroup
OpenVPN 2.0 включает возможность для сервера OpenVPN безопасно получать имя пользователя и пароль от подключающегося клиента и использовать эту информацию как основу аутентификации клиента. Для использования этого метода аутентификации сперва добавьте директиву auth-user-pass в настройку клиента. Это укажет клиенту OpenVPN запрашивать у пользователя имя и пароль и передавать их на сервер через безопасный канал TLS.
# client config!
auth-user-pass
Это скажет серверу OpenVPN проверять имя и пароль, введенные клиентом, с помощью модуля PAM. Это применимо если у вас централизованная аутентификация, например, с помощью Kerberos.
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
Пожалуйста, прочтите руководство по укреплению безопасности OpenVPN для дальнейших консультаций по безопасности.
