Команды OpenVPN
Команды OpenVPN
Отозвать сертификат клиента client-name:
./revoke-full client-name
Просмотреть список отозванных сертификатов:
./list-crl
Создать запрос на получение сертификата:
./build-req cert-name
Подписать запрос на получение сертификата:
./sign-req cert-name
Удаление всех ключей с сервера:
./clean-all
ВНИМАНИЕ! Данная команда выполняется только при ликвидации сервера.
Генерация и выдача ключей клиенту
Перейти в директорию easy-rsa OpenVPN сервера. Убедиться, что файлы ca.crt и ca.key присутствуют в директории сертификационного центра (СЦ) сервера.Перейти в командную оболочку sh:
sh
Установить переменные окружения:
. vars
Создать сертификат клиента client-name:
./build-key client-name
Создать базовый файл конфигурации клиента openvpn.conf со следующим содержанием:
client
dev tun0
proto tcp
remote SERVER_IP PORT_NUMBER
resolv-retry infinite
nobind
script-security 3 system
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/client-name.crt
key /usr/local/etc/openvpn/keys/client-name.key
tls-auth /usr/local/etc/openvpn/keys/ta.key 1
comp-lzo
verb 3
dev tun0
proto tcp
remote SERVER_IP PORT_NUMBER
resolv-retry infinite
nobind
script-security 3 system
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/client-name.crt
key /usr/local/etc/openvpn/keys/client-name.key
tls-auth /usr/local/etc/openvpn/keys/ta.key 1
comp-lzo
verb 3
Выдать клиенту client-name следующие файлы:
ca.crt
client-name.crt
client-name.key
ta.key
openvpn.conf
Установка и настройка OpenVPN-сервера в Debian
Список разделов
- Проверка
- Установка OpenVPN-сервера
- Генерация ключей
- Настройка OpenVPN-сервера
- Настройка OpenVPN-клиента
- Добавляем tls-шифрование
- Заворачиваем весь трафик на VPN-сервер
- Дополнительные параметры
Для чего может понадобится VPN-сервер? В профессиональном варианте - для безопасного доступа к серверу или к сети с множеством серверов или рабочих компьютеров. Можно организовать доступ пользователей из любой точки мира с помощью интернета и ноутбука к их рабочим машинам в офисе или доступ системных администраторов к серверам находящимся в локальной сети организации с удалённых рабочих мест.
В куда менее профессиональном варианте - для доступа к закрытым сайтам из офиса. Если злой админ закрыл доступ к нужным вам сайтам и при этом чисто случайно у вас дома работает сервер под Debian 6, то вы можете настроить VPN-тоннель со своей рабочей машины до VPN-сервера у вас дома и наслаждаться интернетом без ограничений.
В данном руководстве мы будем настраивать VPN на основе OpenVPN под управлением Linux Debian 6. Кроме того в тексте приведены длинные выдержки из логов, так как когда настраиваешь первый раз не известно как должно выглядеть нормальное содержимое лога. Также будем рассчитывать, что вы уже настроили сеть.
Проверка
ls -l /dev/net/tun
lsmod | grep tunВторая команда не дала никакого вывода на моем сервере, но работе VPN это не помешало.
Установка OpenVPN-сервера
Предполагаем, что на сервере все действия производятся из-под рута.aptitude install openvpn opensslВ итоге на сервере использовались следующие версии ПО: Debian 6.0.7, OpenVPN 2.1.3-2, OpenSSL 0.9.8o
Генерация ключей
Создаём директорию под ключи:mkdir /etc/openvpn/easy-rsa/В нее копируем утилиты и конфиги для работы с ключами:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/UPD. Если у вас более новая версия OpenVPN и easy-rsa в поставке нет, то вы можете увидеть следующее сообщение об ошибке:
cp: cannot stat '/usr/share/doc/openvpn/examples/easy-rsa/2.0/*': No such file or directory
Не стоит пугаться. Достаточно установить его из репозитория:
aptitude install easy-rsaи скопировать файлы из другой директории:
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/Делается это для того, чтобы после обновления OpenVPN-сервера сделанные нами изменения не перезаписались.
Переходим в эту директорию:
cd /etc/openvpn/easy-rsa/В файле vars настраиваем параметры ключа:
nano varsНас интересует только следующий блок:
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain"Меняем на что-нибудь вроде:
export KEY_COUNTRY="RU" export KEY_PROVINCE="Leningradskaya" export KEY_CITY="SaintPetersburg" export KEY_ORG="Firm" export KEY_EMAIL="me@domain.ru"Инициируем переменные:
# source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keysОчищаем от старых сертификатов и ключей папку keys/server:
# ./clean-allСоздаем сертификат:
# ./build-caGenerating a 1024 bit RSA private key
............................................................++++++
......................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Leningradskaya]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [Firm CA]:debgate
Name []:vasya
Email Address [me@domain.ru]:
В квадратных скобках указываются значения по умолчанию, те которые были заданы в файле vars. В таких строках можно просто нажимать клавишу “Ввод”.
Генерируем ключ сервера:
# ./build-key-server serverGenerating a 1024 bit RSA private key
......++++++
.................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Leningradskaya]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [me@domain.ru]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Leningradskaya'
localityName :PRINTABLE:'SaintPetersburg'
organizationName :PRINTABLE:'Firm'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'me@domain.ru'
Certificate is to be certified until Mar 24 14:50:43 2023 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
По ходу дела можно задать пароль для сертификата для большей безопасности.
Генерируем сертификат клиента:
# ./build-key userGenerating a 1024 bit RSA private key
..............................++++++
..++++++
writing new private key to 'user.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [LO]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [user]:
Name []:
Email Address [me@domain.ru]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'LO'
localityName :PRINTABLE:'SaintPetersburg'
organizationName :PRINTABLE:'Firm'
commonName :PRINTABLE:'user'
emailAddress :IA5STRING:'me@domain.ru'
Certificate is to be certified until Mar 28 13:30:46 2023 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Если вы создаёте VPN для корпоративной сети не пренебрегайте паролями. Также для каждого клиента нужно сгенерировать отдельные ключи. Однако можно использовать и один ключ для множества клиентов, однако у данного варианта есть недостатки.
Обратите внимание, что значения полей Common Name для сервера и клиента должны быть различными.
Генерируем ключ Диффи — Хеллмана:
./build-dhGenerating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
Наконец, последний ключ для tls-аутификации:
openvpn --genkey --secret keys/ta.keyПосле этого в директории /etc/openvpn/easy-rsa/keys/ образовалось достаточно некоторое количество файлов часть из которых нужна серверу, а часть - клиенту.
Копируем серверные ключи в директорию /etc/openvpn:
cd keys cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/Клиенту же понадобятся следующие ключи:
user.crt
user.key
ca.crt
ta.key
Ключ ta.key понадобится для tls-аутентификации, которую мы будем настраивать на втором этапе.
Настройка OpenVPN-сервера
Базовый конфигурационный файл можно получить следующим образом:cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ gzip -d /etc/openvpn/server.conf.gzПравим конфигурационный файл VPN-сервера в Debian:
nano /etc/openvpn/server.confЗадаем следующие параметры:
port 1194 proto tcp dev tun ca ca.crt cert server.crt key server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log log /var/log/openvpn.log verb 3За счёт указанных параметров мы выбираем порт, протокол, тип соединения, указываем сертификаты, задаём параметры VPN-сети, указываем файл в котором хранить параметры соединений (чтобы можно было их восстановить после переподключения клиента), задаём параметры поддержания соединения, просим использовать сжатие передаваемых данных, указываем серверу при перезагрузке не подключаться к ресурсам которые могут быть недоступны из-за понижения привилегий, задаём файл статуса (содержит информацию о подключенных клиентах), лог-файл и уровень подробности отладочной информации.
Если нужно больше отладочной информации, то для параметра verb можно установить значение вплоть до 9. В большинстве случаев вам должно хватить значения 5 или максимум 6.
После этого для проверки запустите сервер из командной строки:
openvpn /etc/openvpn/server.confХотя скорее всего после установки openvpn в Debian, демон будет уже запущен и чтобы он нам не мешался, его стоит остановить:
/etc/init.d/openvpn stopЕсли все хорошо, после запуска сервера в логе должно оказаться примерно следующее:
Sat Mar 30 19:04:57 2013 OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Feb 21 2012
Sat Mar 30 19:04:57 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Sat Mar 30 19:04:57 2013 Diffie-Hellman initialized with 1024 bit key
Sat Mar 30 19:04:57 2013 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Sat Mar 30 19:04:58 2013 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Sat Mar 30 19:04:58 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
Sat Mar 30 19:04:58 2013 ROUTE default_gateway=10.78.88.1
Sat Mar 30 19:04:58 2013 TUN/TAP device tun0 opened
Sat Mar 30 19:04:58 2013 TUN/TAP TX queue length set to 100
Sat Mar 30 19:04:58 2013 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Sat Mar 30 19:04:58 2013 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Sat Mar 30 19:04:58 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Mar 30 19:04:58 2013 Listening for incoming TCP connection on [undef]
Sat Mar 30 19:04:58 2013 TCPv4_SERVER link local (bound): [undef]
Sat Mar 30 19:04:58 2013 TCPv4_SERVER link remote: [undef]
Sat Mar 30 19:04:58 2013 MULTI: multi_init called, r=256 v=256
Sat Mar 30 19:04:58 2013 IFCONFIG POOL: base=10.8.0.4 size=62
Sat Mar 30 19:04:58 2013 IFCONFIG POOL LIST
Sat Mar 30 19:04:58 2013 user,10.8.0.4
Sat Mar 30 19:04:58 2013 MULTI: TCP INIT maxclients=1024 maxevents=1028
Sat Mar 30 19:04:58 2013 Initialization Sequence Completed
Настройка OpenVPN-клиента
Я использовал дистрибутив Linux Mint 14 основанный на Ubuntu, который в свою очередь основан на Debian. На клиенте действия выполнялись под непривилегированным пользователем с применением команды sudo.Устанавливаем программы:
sudo aptitude install openvpn opensslНапомню, клиенту нужно передать следующие ключи:
user.crt user.key ca.crt ta.keyЗатем на клиентской машине расположить их в директории /etc/openvpn/.
Копируем файл с примерной конфигурацией клиента в нужную директорию:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/Правим:
sudo nano /etc/openvpn/client.confДалее приведён список базовых директив позволяющих подключиться к настроенному ранее серверу:
client dev tun proto tcp remote 10.172.120.217 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert user.crt key user.key ns-cert-type server comp-lzo log /var/log/openvpn.log verb 3В конфигурационном файле пишем, что это клиент, задаём тот же тип подключения и протокол, что и для сервера, адрес и порт сервера, предлагаем не ограничивать количество попыток подключиться, задаём отсутствие привязки к конкретному порту на клиенте, отключаем доступ после перезагрузки к к потенциально не безопасным хостам, указываем файлы сертификатов, включаем проверку того, что сертификат сервера сгенерирован как сертификат сервера, задаём использование сжатия, а также путь до журнала и степень подробности отладочной информации.
Проверяем:
cd /etc/openvpn sudo openvpn client.confПосле этого, если все нормально то в консоли ничего не должно появляться и не должно отображаться приглашения командной строки. В логе клиента /var/log/openvpn.log долно появиться примерно следующее:
Mon Apr 1 19:25:08 2013 OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Oct 8 2012
Mon Apr 1 19:25:08 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Mon Apr 1 19:25:08 2013 LZO compression initialized
Mon Apr 1 19:25:08 2013 Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Mon Apr 1 19:25:08 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
Mon Apr 1 19:25:08 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Mon Apr 1 19:25:08 2013 Local Options hash (VER=V4): '69109d17'
Mon Apr 1 19:25:08 2013 Expected Remote Options hash (VER=V4): 'c0103fa8'
Mon Apr 1 19:25:08 2013 Attempting to establish TCP connection with [AF_INET]109.172.12.237:1194 [nonblock]
Mon Apr 1 19:25:09 2013 TCP connection established with [AF_INET]109.172.12.237:1194
Mon Apr 1 19:25:09 2013 TCPv4_CLIENT link local: [undef]
Mon Apr 1 19:25:09 2013 TCPv4_CLIENT link remote: [AF_INET]109.172.12.237:1194
Mon Apr 1 19:25:09 2013 TLS: Initial packet from [AF_INET]109.172.12.237:1194, sid=63c7901c 31cf5b65
Mon Apr 1 19:25:10 2013 VERIFY OK: depth=1, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=debgate/emailAddress=me@debain-help.ru
Mon Apr 1 19:25:10 2013 VERIFY OK: nsCertType=SERVER
Mon Apr 1 19:25:10 2013 VERIFY OK: depth=0, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=server/emailAddress=me@debain-help.ru
Mon Apr 1 19:25:10 2013 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Mon Apr 1 19:25:10 2013 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:25:10 2013 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Mon Apr 1 19:25:10 2013 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:25:10 2013 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Mon Apr 1 19:25:10 2013 [server] Peer Connection Initiated with [AF_INET]109.172.12.237:1194
Mon Apr 1 19:25:13 2013 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Mon Apr 1 19:25:13 2013 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5'
Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: timers and/or timeouts modified
Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: --ifconfig/up options modified
Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: route options modified
Mon Apr 1 19:25:13 2013 ROUTE default_gateway=172.16.100.1
Mon Apr 1 19:25:13 2013 TUN/TAP device tun0 opened
Mon Apr 1 19:25:13 2013 TUN/TAP TX queue length set to 100
Mon Apr 1 19:25:13 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Mon Apr 1 19:25:13 2013 /sbin/ifconfig tun0 10.8.0.6 pointopoint 10.8.0.5 mtu 1500
Mon Apr 1 19:25:13 2013 /sbin/route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.0.5
Mon Apr 1 19:25:13 2013 Initialization Sequence Completed
В логе сервера добавится следующее:
Mon Apr 1 19:33:20 2013 MULTI: multi_create_instance called
Mon Apr 1 19:33:20 2013 Re-using SSL/TLS context
Mon Apr 1 19:33:20 2013 LZO compression initialized
Mon Apr 1 19:33:20 2013 Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Mon Apr 1 19:33:20 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Mon Apr 1 19:33:20 2013 Local Options hash (VER=V4): 'c0103fa8'
Mon Apr 1 19:33:20 2013 Expected Remote Options hash (VER=V4): '69109d17'
Mon Apr 1 19:33:20 2013 TCP connection established with [AF_INET]81.95.28.26:47278
Mon Apr 1 19:33:20 2013 TCPv4_SERVER link local: [undef]
Mon Apr 1 19:33:20 2013 TCPv4_SERVER link remote: [AF_INET]81.95.28.26:47278
Mon Apr 1 19:33:21 2013 81.95.28.26:47278 TLS: Initial packet from [AF_INET]81.95.28.26:47278, sid=1fc06478 887428ff
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 VERIFY OK: depth=1, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=debgate/emailAddress=me@debain-help.ru
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 VERIFY OK: depth=0, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=user/emailAddress=me@debain-help.ru
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Mon Apr 1 19:33:22 2013 81.95.28.26:47278 [user] Peer Connection Initiated with [AF_INET]81.95.28.26:47278
Mon Apr 1 19:33:22 2013 user/81.95.28.26:47278 MULTI: Learn: 10.8.0.6 -> user/81.95.28.26:47278
Mon Apr 1 19:33:22 2013 user/81.95.28.26:47278 MULTI: primary virtual IP for user/81.95.28.26:47278: 10.8.0.6
Mon Apr 1 19:33:24 2013 user/81.95.28.26:47278 PUSH: Received control message: 'PUSH_REQUEST'
Mon Apr 1 19:33:24 2013 user/81.95.28.26:47278 SENT CONTROL [user]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)
При этом с клиента должен пинговаться адрес 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=18.7 msМы настроили OpenVPN-сервер в Debian по минимуму, проверили его работоспособность. Осталось добавить tls-шифрование и завернуть на VPN-сервер весь трафик клиента.
Добавляем tls-шифрование
На сервере пишем в /etc/openvpn/server.conf:tls-auth ta.key 0 cipher DES-EDE3-CBCНа клиенте в /etc/openvpn/client.conf:
tls-auth ta.key 1 cipher DES-EDE3-CBCФактически разница только в первой строке. На сервере в конце строки ставим ноль, на клиенте - единицу.
Снова соединяемся, пингуем 10.8.0.1. Если пинг проходит, значит все хорошо.
Если VPN-сервер перезапустить, то после соединения с клиентом в логе будет примерно следующее:
Mon Apr 1 19:51:31 2013 OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Feb 21 2012
Mon Apr 1 19:51:31 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Mon Apr 1 19:51:31 2013 Diffie-Hellman initialized with 1024 bit key
Mon Apr 1 19:51:31 2013 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Mon Apr 1 19:51:31 2013 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file
Mon Apr 1 19:51:31 2013 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:51:31 2013 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:51:31 2013 TLS-Auth MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
Mon Apr 1 19:51:31 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
Mon Apr 1 19:51:31 2013 ROUTE default_gateway=10.78.88.1
Mon Apr 1 19:51:31 2013 TUN/TAP device tun0 opened
Mon Apr 1 19:51:31 2013 TUN/TAP TX queue length set to 100
Mon Apr 1 19:51:31 2013 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Mon Apr 1 19:51:31 2013 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Mon Apr 1 19:51:31 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Mon Apr 1 19:51:31 2013 Listening for incoming TCP connection on [undef]
Mon Apr 1 19:51:31 2013 TCPv4_SERVER link local (bound): [undef]
Mon Apr 1 19:51:31 2013 TCPv4_SERVER link remote: [undef]
Mon Apr 1 19:51:31 2013 MULTI: multi_init called, r=256 v=256
Mon Apr 1 19:51:31 2013 IFCONFIG POOL: base=10.8.0.4 size=62
Mon Apr 1 19:51:31 2013 IFCONFIG POOL LIST
Mon Apr 1 19:51:31 2013 user,10.8.0.4
Mon Apr 1 19:51:31 2013 MULTI: TCP INIT maxclients=1024 maxevents=1028
Mon Apr 1 19:51:31 2013 Initialization Sequence Completed
Mon Apr 1 19:51:41 2013 MULTI: multi_create_instance called
Mon Apr 1 19:51:41 2013 Re-using SSL/TLS context
Mon Apr 1 19:51:41 2013 LZO compression initialized
Mon Apr 1 19:51:41 2013 Control Channel MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
Mon Apr 1 19:51:41 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Mon Apr 1 19:51:41 2013 Local Options hash (VER=V4): '7c7a0a5e'
Mon Apr 1 19:51:41 2013 Expected Remote Options hash (VER=V4): '2dcdad92'
Mon Apr 1 19:51:41 2013 TCP connection established with [AF_INET]81.95.28.26:47413
Mon Apr 1 19:51:41 2013 TCPv4_SERVER link local: [undef]
Mon Apr 1 19:51:41 2013 TCPv4_SERVER link remote: [AF_INET]81.95.28.26:47413
Mon Apr 1 19:51:42 2013 81.95.28.26:47413 TLS: Initial packet from [AF_INET]81.95.28.26:47413, sid=340c8886 5f2db145
Mon Apr 1 19:51:42 2013 81.95.28.26:47413 VERIFY OK: depth=1, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=debgate/emailAddress=me@debain-help.ru
Mon Apr 1 19:51:42 2013 81.95.28.26:47413 VERIFY OK: depth=0, /C=RU/ST=LO/L=SaintPetersburg/O=Firm/CN=user/emailAddress=me@debain-help.ru
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Mon Apr 1 19:51:43 2013 81.95.28.26:47413 [user] Peer Connection Initiated with [AF_INET]81.95.28.26:47413
Mon Apr 1 19:51:43 2013 user/81.95.28.26:47413 MULTI: Learn: 10.8.0.6 -> user/81.95.28.26:47413
Mon Apr 1 19:51:43 2013 user/81.95.28.26:47413 MULTI: primary virtual IP for user/81.95.28.26:47413: 10.8.0.6
Mon Apr 1 19:51:45 2013 user/81.95.28.26:47413 PUSH: Received control message: 'PUSH_REQUEST'
Mon Apr 1 19:51:45 2013 user/81.95.28.26:47413 SENT CONTROL [user]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)
Как видно, появились строки про ключ ta.key, также изменились строки про cipher.
Заворачиваем весь трафик на VPN-сервер
Тут требуется заменить конфигурационный файл только на сервере. Добавляем строки:push "redirect-gateway def1" push "dhcp-option DNS 8.8.8.8"Первая строка меняет шлюз по умолчанию на заданный на VPN-сервере. После отключения будет возвращён шлюз, который был задан на клиенте ранее.
Вторая строка задает DNS-сервер, который будет использоваться после подключения к VPN-серверу.
Также нам необходимо на сервере задать правило для маршрутизации трафика из сети VPN-сервера в локальную сеть или сеть интернет-провайдера. В debian это можно сделать правилом для iptables:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADEПодробности ищите в статье про настройку NAT и DHCP-сервера под Debian.
Теперь можно по нормальному запустить openvpn-сервер и клиент:
/etc/init.d/openvpn startЕдинственное неудобство, при запуске демона на клиенте будет постоянно поддерживаться VPN-соединение. О том, как отключить автозагрузку демона можно прочитать в статье про управление автозагрузкой в debian.
Если вы используете Linux на вашем рабочем компьютере, то для удобного подключения к VPN можно использовать модуль к Network-Manager.
Дополнительные параметры
client-to-client - позволяет клиентам VPN-сервера связываться друг с другом.duplicate-cn - параметр нужно добавить если вы для всех клиентов создали одинаковые ключи, но клиенты при этом представляются различными common name.
max-clients 100 - ограничение максимального числа одновременно подключенных клиентов
Для повышения безопасности на linux-системах можно понизить права VPN-сервера:
user nobody group nogroupОчень подробная и понятная статья может быть найдена по ссылке http://lithium.opennet.ru/articles/openvpn/openvpn-howto.html
UPD. Если после всего у вас проблемы с NAT и устройством TUN, то включите поддержку форвардинга. Для этого в файле /etc/sysctl.conf установите следующий параметр:
net.ipv4.ip_forward=1и затем примените его командой:
sysctl -p
Комментарии
Отправить комментарий