Наконец появилось время, написать небольшой FAQ по использованю OpenVPN-сервера совместно с Траффпро. Итак, какие преимущества даёт VPN канал при использовании совместно с Траффпро? Первое и самое главное, если на Вашем сервере не проедусмотрены Сервисы для доступа из Интернета например FTP или WWW, Вы можете включить защиту Сервера, и запретить соединения из вне по всем портам. Для доступа к внутренним ресурсам сети будет использоваться защищенный VPN-канал. Не придётся писать длинные цепочки правил IP-TABLES, и потом проверять не нарушают ли они работу системы.
Для администрирования самого сервера из Интернета, думаю целесообразно оставить доступ к нему только по SSH.
Итак имеем свеженький Сервер Ubuntu8.10 с установленным ТРАФФПРО.
Сеть: внешняя - eth0 333.222.111.123, внутренняя - eth1 192.168.124.1
Очень рекомендую поднять на нём-же кэширующий DNC. Это избавит от необходимости открывать клиентам внутренней сети порт 53. Так-же у меня поднят SSH-сервер SQUID и сервер DHCP3 (лениво ходить и прописывать юзерам ip-ишники, шлюзы и днс-ы).
Ставим OpenVPN, для сервера и клиента Linux пакет один и то-же. Для Ubuntu команда:
apt-get install openvpn
Для других Линуксов соответствующая команда......
Файлы конфигурации будем укладывать в директорию /etc/openvpn/ , после установки openvpn она пустая, а если там что и есть, лучше енто не трогать. Для того что-бы её не загромождать файлами создадим папку для ключей и сертификатов сервера:
mkdir /etc/openvpn/vpnkeys
Далее создадим файл конфигурации сервера:
touch /etc/openvpn/server.conf
Создадим файл, где будут отображаться выданные клиентам ip адреса.
touch /etc/openvpn/ipp.txt
Создадим папку куда сервер будет писать логи:
mkdir /var/log/openvpn
Далее наполняем файл server.conf
# Порт на котором сервер работает, протокол и тип интерфейса
port 1194
proto udp
dev tun
#Место храннения ключей и сертификатов
ca /etc/openvpn/vpnkeys/ca.crt
cert /etc/openvpn/vpnkeys/server.crt
key /etc/openvpn/vpnkeys/server.key # Данный фаил хранить в боольшом секрете!!!!
dh /etc/openvpn/vpnkeys/dh1024.pem
# включаем TLS аутификацию
tls-server
# указываем tls-ключ, и указываем 0 для сервера(1 ставиться для клиента).
tls-auth "/etc/openvpn/vpnkeys/ta.key" 0
# время до переподключения
tls-timeout 120
auth MD5
#Пул выдаваемых клиентам адресов
server 10.10.10.0 255.255.255.0
#Сюда будем писать какее адреса сервер выдал клиенту
ifconfig-pool-persist "/etc/openvpn/ipp.txt"
#Задаем МАРШРУТ, который передаём клиенту и маску подсети для того чтобы он #"видел" сеть за OpenVPN сервером (сеть 192.168.124.0/24)
push "route 192.168.124.0 255.255.255.0"
# DNS-сервер внутренней сети. Если поднят «настоящий» локальный DNS, тогда
# при установленном vpn-соединении, если подключаться например по Microsoft RDP
# достаточно набрать имя компьютера а не вбивать его ip-шник
push "dhcp-option DNS 192.168.124.1"
# Удерживать установленное соединение(если есть nat или прокся)
keepalive 10 120
# Включаем шифрацию пакетов
cipher BF-CBC
# Включить сжатие
comp-lzo
# Максимум число клиентов
max-clients 6
#Прописываем пользователя и группу, от имени которых будет запускаться VPN:
user nobody
group nogroup
# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
# Даём возможность клиентам "видеть" друг друга(не пробовал работает ли это)
client-to-client
# Логи сервера
status "/var/log/openvpn/openvpn-status.log"
log "/var/log/openvpn/openvpn.log"
log-append "/var/log/openvpn/openvpn.log"
# Уровень детализации в логах
verb 3
Ну вот, кажись конфигурацию серверв написали, теперь приступим к созданию ключей для клиентов и сервера
Переходим в директорию со скриптами для генерации ключей
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Далее выполняем:
bash
. ./vars
# Очищаем старые ключи, если они есть
./clean-all
# Создаём ca.key (авторитетный сертификат).
./build-ca
# Отвечаем на вопросы где, когда, что......
# Создадём сертификат и приватный ключ для сервера:
./build-key-server server
И отвечаем на вопросы.............
Создаём файл параметров Диффи-Хелмана(О КАК!), предназначенного для обеспечения более надежной защиты данных при установке соединения клиента с сервером, выполняем:
./build-dh
Создаём сертификаты для удаленных клиентов(vova и masha), запускаем:
./build-key vova
И отвечаем на вопросы.............
Далее создаём следующего клиента:
./build-key masha
Сколько хотим клиентов столько и создаём....,но не более того что указали в конфиге.
Под завязку создадим общий для клиента и сервера TLS-ключ:
openvpn --genkey --secret ta.key
Итак, после всех операций в директориии
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys мы имеем набор ключей для нашего сервера и клиентов vova и masha
А в директории /usr/share/doc/openvpn/examples/easy-rsa/2.0 лежит ключик ta.key
который нужен и клиентам и серверу
Для сервера нужны файлы:
server.crt
server.key
ca.crt
ta.key
dh1024.pem
Поместим эти файлы в директорию /etc/openvpn/vpnkeys/
Для клиента vova:
vova.crt
vova.key
ca.crt
ta.key
Для клиента masha:
masha.crt
masha.key
ca.crt
ta.key
Эти ключики передадим нашим клиентам.
Перезапускаем OpenVPN сервер:
/etc/init.d/openvpn restart
Если не ругаеться, то всё нормально, если не стартовал, смотрим логи:
/var/log/openvpn/ и ищем ошибки....
Дальше правим файл traffpro_rule.cfg
Добавим две строчки, давая возможность удалённому клиенту подключаться к ресурсам внутренней сети:
iptables -I FORWARD 1 -i eth1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -o eth1 -i tun0 -j ACCEPT
tun0 – “внешний” интефейс нашего OpenVPN сервера.
Набор правил в traffpro_rule.cfg, можно оставить минимальный, ну к примеру только для SSH, Squid и FTP-клиентов во внетренней сети.
Теперь перейдём к клиентам OpenVPN.
Файл конфигурации клиента Windows выглядит так:
client
dev tun
proto udp
#Адрес и порт нашего сервера
remote 333.222.111.123 1194
resolv-retry infinite # Говорят, нужен если пользуешся службой DynDNS
nobind
persist-key
persist-tun
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\vova.crt"
key "C:\\Program Files\\OpenVPN\\config\\vova.key"
tls-client
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1
auth MD5
ns-cert-type server
comp-lzo
verb 3
Файл конфигурации клиента Linux, создаёться на клиенском компьютере в директории /etc/openvpn/ и называеться client.conf, так-же необходило создать директорию для хранения ключиков клиента, например /etc/openvpn/client/.
Файл конфигурации клиента Linux выглядит так:
remote 333.222.111.123 1194
client
dev tun
proto udp
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client/masha.crt
key /etc/openvpn/client/masha.key
tls-client
tls-auth /etc/openvpn/client/ta.key 1
auth MD5
comp-lzo
verb 4
mute 20
Ну а дальше всё зависит от тех прав которые Вы предоставите своим удалённым клиентам при доступе в Вашу локальную сеть.
Теперь о подсчёте трафика. При включенной защите сервера, Весь трафик по OpenVPN будет отображаться в отчете по серверу, но порт, по которому набежал трафик VPN-сервера, определяться не будет, так-как соединений идёт по протоколу UDP. Трафик компьютера внутренней сети, к которому Вы подключились через VPN-соединение, Траффпро считать не будет, так-как для него это соединение внути Вашей сетки. И поэтому количество трафика по VPN-соединениям можно оценить только коственно в отчёте по серверу. Теперь о неприятном моменте с которым я столкнулся при работе со SQIUD-ом! При включенном прозрачном СКВИД-е и защите сервера, Траффпро начинает приплюсовывать по СЕРВЕРУ ВЕСЬ ТРАФИК прошедший через Проксю. То есть в отчете «ПО ПОЛЬЗОВАТЕЛЯМ» где фигурируют все клиенты, в том числе и Ваш сервер в графе «ВСЕГО», получиться УДВОЕННЫЙ трафик Ваших клиентов, плюс то что набежало за счёт служб запущенных на сервере. Я думаю разработчики Траффпро знают про эту проблему и найдут пути её решения, так-как от Squid-а отказываться не хочеться....
Вот полезные ссылки по вопровам настройки OpenVPN Сервера:
http://openvpn.net/
И ещё очень хорошая статья по настройке на русском языке:
http://bozza.ru/?c=341&p=content
Примечание:
Если требуется объеденить 2 подсети то необходимо в конфиг добавить параметр:
client-config-dir /etc/openvpn/ccd
создать каталог с таким путём
/etc/openvpn/ccd
и положить в него файлик с названием как назвали клиента при генерации ключа с таким примерно содержанием:
iroute 192.168.2.0 255.255.255.0