Ubuntu‎ > ‎

OpenVPN: сервер vpn для клиентов ubuntu и android



Конфигурация сети


192.168.10.0/24 - OpenVPN-server - Ubuntu 13.04;
192.168.0.0/24 - клиенты - Ubuntu 13.04 и Android (HTC Incredible S).
10.8.0.0/29 - Сеть vpn

Настройка сервера VPN

Устанавливаем пакеты
aptitude update
aptitude upgrade 
aptitude install openvpn

Создаем директорию и копируем комплект скриптов из примеров
mkdir /etc/openvpn/{easy-rsa,clients}
cp -r /usr/share/doc/openvpn1/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Редактируем vars (последние строки файла)
mcedit /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="RU"
export KEY_PROVINCE="SPb"
export KEY_CITY="SPb"
export KEY_ORG="Capriccio 24"
export KEY_EMAIL="pag@ni.ni"

Создаём сертификаты сервера
cd /etc/openvpn/easy-rsa/
ln -s openssl-1.0.0.cnf openssl.cnf
source vars                            # задаём переменые
./clean-all                            # очистка директории /etc/openvpn/easy-rsa/keys
./build-dh                             генерируем файла с ключем Диффи-Хелмана (dh1024.pem)
./pkitool --initca                     # генерируем сертификат и ключ центра сертификации (CA) (ca.crt, ca.key)
./pkitool --server server              # генерируем сертификат и ключ сервера (server.crt, server.key)
openvpn --genkey --secret ta.key       # генерация ключа для tls-аутификации (ta.key)

Генерируем сертификаты для клиентов android и ubuntu,
обязательно задать пароль на экспорт (Enter export password) для защиты сертификата от импорта недоброжелателями
./build-key-pkcs12 vpn.android
./build-key-pkcs12 vpn.ubuntu

Раскидываем готовые файлы по директориям
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt,dh1024.pem} /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/vpn.*.p12 /etc/openvpn/clients/
cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/

Создаем server.conf
mcedit /etc/openvpn/server.conf

mode server
port 1199
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

server 10.8.0.0 255.255.248.0 # ip и маска виртуальной сети
route 192.168.0.0 255.255.254.0 # сети, в которые нужно идти через туннель (сеть клиента)
client-to-client  # клиенты будут видеть друг друга
client-config-dir ccd  # где лежат настройки для клиентов
ifconfig-pool-persist ipp.txt
tls-auth ta.key 0
keepalive 10 120
comp-lzo                       # сжатие трафика
user nobody                  # понижаем пользовательские привелегии vpn-сервера
group nogroup             # понижаем пользовательские привелегии vpn-сервера
max-clients 10             # максимум клиентов
persist-key
persist-tun
status /var/log/openvpn-status.log    # статус-файл
log-append /var/log/openvpn.log       # лог-файл
verb 3                  # детальность логирования
mute 10                     # количество однотипных строк в openvpn.log

Создадим файлы с индивидуальными настройками клиентов (на самом деле это задел на будущее, т.к. сейчас настройки для клиентов идентичны)
mkdir /etc/openvpn/ccd
touch /etc/openvpn/ccd/vpn.android
touch /etc/openvpn/ccd/vpn.ubuntu

Содержание vpn.android:
ifconfig-push 10.8.0.2 10.8.0.1 # назначаем IP-адрес клиенту
iroute 192.168.0.0 255.255.254.0          # маршрутизацию от сервера OpenVPN к удаленным клиентам
push "route 192.168.10.0 255.255.255.0"# маршрут клиенту в сеть OpenVPN-сервера
push "redirect-gateway def1" # клиенту будет установлен новый default-gateway от vpn-сервера
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Содержание vpn.ubuntu:
ifconfig-push 10.8.0.3 10.8.0.1 # назначаем IP-адрес клиенту
iroute 192.168.0.0 255.255.254.0 # маршрутизацию от сервера OpenVPN к удаленным клиентам
push "route 192.168.10.0 255.255.255.0"# маршрут клиенту в сеть OpenVPN-сервера
push "redirect-gateway def1" # клиенту будет установлен новый default-gateway от vpn-сервера
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Разрешаем форвардинг между сетями:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

и добавляем правила в файрвол
echo "iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE" > /etc/iptables.rules
ln -s /etc/iptables.rules /etc/network/if-up.d/iptables
chmod +x /etc/iptables.rules
/etc/iptables.rules

Перезапускаем openvpn-server
service openvpn restart


Настройка клиента android

Копируем файлы ta.key, vpn.android.p12 на карту памяти смартфона в папку /sdcard/openvpn/
Устанавливаем из Google Play приложение OpenVPN for Android
Запускаем приложение. Во вкладке ПРОФИЛИ создаём новый профиль VPN.android со следующими настройками:
  • Вкладка Основные -> Тип: Файл PKCS12 -> /sdcard/openvpn/vpn.android.pk12 -> Пароль для PKCS12: [пароль для импорта сертификата];
  • Вкладка Авторизация/шифрование -> TLS-АУТЕНТИФИКАЦИЯ: [включить] -> Файл аутентификации TLS -> /sdcard/openvpn/ta.key -> TLS Direction: [1].
Запускаем профиль VPN.android.

Настройка клиента ubuntu

Настраивать будем через Network Manager.
Устанавливаем пакеты
aptitude update
aptitude upgrade
aptitude install openvpn network-manager-openvpn

Клиенту ubuntu с сервера OpenVPN необходимо передать следующие файлы
/etc/openvpn/clients/vpn.ubuntu.p12
/etc/openvpn/ta.key

Создаем vpn.ubuntu.conf
mcedit vpn.ubuntu.conf

client
remote remote.vpn.com # указываем сервер vpn
port 1199 # порт такой же, как в server.conf
dev tun
proto udp
redirect-gateway def1
resolv-retry infinite
nobind
pull
user nobody
group nogroup
persist-key
persist-tun
tls-client
remote-cert-tls server
pkcs12 vpn.android.p12
tls-auth ta.key 1
comp-lzo
log openvpn.log
verb 3

Идем в настройки Network Manager:
  • VPN Connections -> Configure VPN ->  Add -> Import a saved VPN configuration... -> выбираем файл vpn.ubuntu.conf (рядом с ним должен лежать vpn.ubuntu.p12 и ta.key);
  • Вкладка VPN  -> Private Key Password: [пароль для импорта сертификата] -> Сохраняем конфигурацию.
Проверяем соединение, зайдя, например, на 2ip.ru.




Comments