VPN (Virtual Private Network) — виртуальная частная сеть. 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-ca
Generating 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 server
Generating 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 user
Generating 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-dh
Generating 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