1.Установка OpenVPN-сервера
1 |
# yum install openvpn easy-rsa |
2. Создание сертификатов/ключей
Создаём директорию для сертификатов
1 |
# mkdir -p /etc/openvpn/easy-rsa/keys |
Копируем необходимые файлы:
1 |
# cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ |
Редактируем файл с переменными
1 |
# nano /etc/openvpn/easy-rsa/vars |
1 2 3 4 5 6 7 |
export KEY_COUNTRY="UA" export KEY_PROVINCE="Kharkov" export KEY_CITY="Kharkov" export KEY_ORG="MyOrganization" export KEY_EMAIL="root@server.mydomain.com" export KEY_OU="IT-Department" export KEY_CN="server.mydomain.com" |
Создание сертфикатов и ключей
Перечитываем файл vars(выполняем инициализацию переменных)
1 |
# cd /etc/openvpn/easy-rsa/ |
1 |
# . ./vars |
Удаляем старые ключи
1 |
# ./clean-all |
Создаём корневой сертификат и ключ:
1 |
# ./build-ca |
Проверяем наличие CA(CentralAuthority) сертификатов
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep ca\. |
1 2 |
-rw-r--r-- 1 root root 1854 Dec 25 19:20 ca.crt -rw------- 1 root root 1704 Dec 25 19:20 ca.key |
Если будет сообщение о том, что OpenVPN не может определить версию OpenSSL, то необходимо скопировать файл конфигурации OpenSSL.
1 |
# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf |
создаём сертификат и ключ для сервера:
1 |
./build-key-server server |
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep server |
1 2 3 |
-rw-r--r-- 1 root root 5711 Dec 25 19:27 server.crt -rw-r--r-- 1 root root 1123 Dec 25 19:27 server.csr -rw------- 1 root root 1708 Dec 25 19:27 server.key |
Cоздаем ключ Диффи-Хелмана (Diffie Hellman)
1 |
# ./build-dh |
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep dh2048 |
1 |
-rw-r--r-- 1 root root 424 Dec 25 19:33 dh2048.pem |
Создаем общий для клиентов и сервера TLS-ключ:
1 |
# openvpn --genkey --secret keys/ta.key |
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep ta.key |
1 |
-rw------- 1 root root 636 Dec 25 19:51 ta.key |
Создаем ключ и сертификат для клиента
Например, для двух клиентов
1 |
# ./build-key client1 |
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep client1 |
1 2 3 |
-rw-r--r-- 1 root root 5559 Dec 25 20:00 client1.crt -rw-r--r-- 1 root root 1106 Dec 25 20:00 client1.csr -rw------- 1 root root 1704 Dec 25 20:00 client1.key |
1 |
# ./build-key client2 |
1 |
# ls -al /etc/openvpn/easy-rsa/keys/ | grep client2 |
1 2 3 |
-rw-r--r-- 1 root root 5559 Dec 25 20:01 client2.crt -rw-r--r-- 1 root root 1106 Dec 25 20:01 client2.csr -rw------- 1 root root 1704 Dec 25 20:01 client2.key |
Команды для проверки созданных сертификатов
1 |
# openssl verify -CAfile /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/server.crt |
1 |
/etc/openvpn/easy-rsa/keys/server.crt: OK |
1 |
# openssl verify -CAfile /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client1.crt |
1 |
/etc/openvpn/easy-rsa/keys/client1.crt: OK |
1 |
# openssl verify -CAfile /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client2.crt |
1 |
/etc/openvpn/easy-rsa/keys/client2.crt: OK |
Ключи/сертификаты, которые использует сервер
1 2 3 4 5 |
ca.crt server.crt server.key dh2048.pem ta.key |
Ключи/сертификаты, которые использует клиент(например, client1)
1 2 3 4 |
client1.crt client1.key ca.crt ta.key |
3.Настройка OpenVPN-сервера
Создаем отдельный каталог для хранения ключей/сертификатов необходимых серверу
1 |
# mkdir /etc/openvpn/keys |
Копируем все необходимые серверу ключи/сертификаты в этот каталог
1 |
cp /etc/openvpn/easy-rsa/keys/{ca.crt,server.crt,server.key,dh2048.pem,ta.key} /etc/openvpn/keys |
Создаем необходимый каталог/файлы
1 |
# mkdir /var/log/openvpn |
1 |
# touch /var/log/openvpn/{openvpn.log,openvpn-status.log} |
Настройка конфигурационного файла OpenVPN-сервера
За основу можно взять файл из документации
1 |
# rpm -ql openvpn | less |
1 |
/usr/share/doc/openvpn-2.3.12/sample/sample-config-files/server.conf |
1 |
# nano /etc/openvpn/openvpn.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# Протокол и порт для подключений port 1194 proto tcp # Устройство dev tun # Явное указание, что данный хост является TLS сервером tls-server # На стороне сервера 0, на стороне клиента 1 tls-auth /etc/openvpn/keys/ta.key 0 tls-timeout 120 # Расположение сертификатов и ключей ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh2048.pem # Виртуальная сеть, которая будет установлена между клиентом и сервером server 10.10.10.0 255.255.255.0 # Файл, в который будет записываться соответствие имени клиента и IP-адреса, который ему выделил VPN-сервер ifconfig-pool-persist ipp.txt # Назначить клиенту шлюз по умолчанию на VPN-сервер push "redirect-gateway def1 bypass-dhcp" # Разрешаем клиентам обмениваться пакетами(по умолчанию клиент видит только сервер) client-to-client # Назначить для клиента DNS сервер, в данном случае публичный DNS от гугла push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # Проверяем соединение каждые 10 секунд, если его нет то через 120 секунд переподключаем keepalive 10 120 # Назначаем пользователя и группу для работы с OpenVPN user nobody group nobody # Не перечитывать ключи после получения SIGUSR1 или ping-restart persist-key # Не закрывать или переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart persist-tun # Используем сжатие comp-lzo # Записывать статус сервера OpenVPN status /var/log/openvpn/openvpn-status.log # Логи log /var/log/openvpn/openvpn.log # Уровень отладки verb 4 # Расскомментировать,если используется один ключ/сертификат или одно имя клиента(common name) на несколько клиентов #duplicate-cn # Максимальное количество клиентов #max-clients 100 |
Добавление OpenVPN в автозагрузку
Centos6
1 |
# chkconfig --level 2345 openvpn on |
Centos7
1 |
# systemctl enable openvpn@server |
Логи смотрим в
1 |
# tail -f /var/log/openvpn/openvpn.log |
Запуск OpenVPN-сервера
Centos6
1 |
# /etc/init.d/openvpn start |
Centos7
1 |
# systemctl start openvpn@server |
Проверка наличия интерфейса tun0
1 2 3 4 5 6 7 |
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.10.10.1 P-t-P:10.10.10.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) |
Проверка прослушивания порта 1194 протокола tcp
1 |
# netstat -nlpt | grep openvpn |
1 |
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 2629/openvpn |
Настройка iptables
1 |
# yum install iptables iptables-services |
1 |
# iptables -A INPUT -p tcp --dport 1194 -j ACCEPT |
1 |
# iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE |
10.10.10.0/24 – это OpenVPN-сеть, запросы которой будут натиться.
eth0 – внешний интерфейс OpenVPN-сервера.
Centos6
1 |
# service save iptables && service restart iptables |
Centos7
1 |
# service save iptables && systemctl restart iptables |
Если необходимо(фильтруется цепочка Forward или политика по умолчанию для нее стоит DROP),то добавляем правила
1 |
# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT |
1 |
# iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT |
Включаем маршрутизацияю пакетов
1 |
# nano /etc/sysctl.conf |
1 |
net.ipv4.ip_forward = 1 |
1 |
# sysctl -p |
4.Настройка OpenVPN-клиента
Windows — клиент
1 |
C:\Program Files (x86)\OpenVPN\config\client.ovpn |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
client dev tun proto tcp remote EXTERNAL_SERVER_IP_ADDRESS 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key tls-auth ta.key 1 keepalive 10 120 comp-lzo verb 4 mute 10 |
1 |
# tail -f /var/log/openvpn/openvpn-status.log |
1 2 3 4 5 |
Address,Last Ref 10.10.10.6,client1,159.224.38.182:55134,Fri Dec 25 21:26:22 2015 GLOBAL STATS Max bcast/mcast queue length,0 END |
Теперь Windows клиент будет выходить в интернет через OpenVPN-сервер, а не через своего провайдера
(проверяем через route print, tracert google.com, myip в браузере)
Если необходимо выделить определенному клиенту конкретный IP-адрес
Добавляем в файл настройки OpenVPN-сервера
1 |
# nano /etc/openvpn/openvpn.conf |
1 |
client-config-dir /etc/openvpn/ccd |
После чего создаем файл с именем клиента в каталоге /etc/openvpn/ccd
Напрмер, common name при создании сертификата/ключа для клиенты было client1
1 |
# nano /etc/openvpn/ccd/client1 |
1 |
ifconfig-push 10.10.10.13 10.10.10.14 |
т.е клиент client1 всегда будет получать IP-адрес 10.10.10.13
Перезапускаем OpenVPN-сервер
После подключения клиента client1 в логе сервера
1 |
# tail -f /var/log/openvpn/openvpn.log |
1 |
Fri Dec 25 23:14:55 2015 us=469065 client1/159.224.38.182:40818 SENT CONTROL [client1]: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,route 10.10.10.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.10.10.13 10.10.10.14' (status=1) |
1 |
# tail -f /var/log/openvpn/openvpn-status.log |
1 2 |
Virtual Address,Common Name,Real Address,Last Ref 10.10.10.13,client1,159.224.38.182:40848,Fri Dec 25 23:25:00 2015 |
При назначении IP-адреса нужно иметь ввиду
А) все IP-адреса должны входить в сеть VPN-сервера 10.10.10.0/24
Б) должны иметь префикс /30
Список совместимых пар
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254] |
Linux-клиент
Centos
1 |
# yum install openvpn |
Debian/Ubuntu
1 |
# apt-get install openvpn |
Конфигурационный файл
1 |
# nano /etc/openvpn/openvpn.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
client dev tun proto tcp remote EXTERNAL_SERVER_IP_ADDRESS 1194 resolv-retry infinite nobind user nobody # для Centos group nobody # для Ubuntu # group nogroup persist-key persist-tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/client1.crt key /etc/openvpn/keys/client1.key tls-auth /etc/openvpn/keys/ta.key 1 comp-lzo verb 3 mute 10 |
1 |
# service openvpn start |
Источник:
http://rtfm.co.ua/centos-ustanovka-openvpn-servera/
http://rtfm.co.ua/openvpn-naznachenie-staticheskogo-ip-dlya-klienta/
http://www.8host.com/blog/ustanovka-i-nastrojka-servera-openvpn-na-centos-6/
http://bezha.od.ua/centos-openvpn/
http://www.unixmen.com/setup-openvpn-server-client-centos-6-5/