Аналогичный пост на эту тему – CentOS: установка OpenVPN сервера. Особой разницы нет, только тут OpenVPN сервер будет устанавливаться на Debian 8.
Ниже описывается достаточно базовая настройка, с единственной целью проксировать трафик с нескольких домашних машин в Украине на запрещённые ныне ресурсы.
Интересно – что получится по трафику, т.к. сервер (t2.nano
) расположен в Ирландии, AWS.
Впрочем, сам RTFM кушает трафика более чем прилично, например Апрель:
Но по деньгам пока нормально – попробую VPN в Амазоне.
Установка выполняется на:
[simterm]
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.7 (jessie) Release: 8.7 Codename: jessie
[/simterm]
Содержание
Установка OpenVPN
Обновляем установленные пакеты:
[simterm]
# apt-get update && apt-get upgrade
[/simterm]
Устанавливаем OpenVPN:
[simterm]
# apt install openvpn
[/simterm]
Копируем конфиг из готовых примеров:
[simterm]# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf[/simterm]
Редактируем созданный /etc/openvpn/server.conf
, и меняем параметры:
... # keys files location ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/openvpn.crt key /etc/openvpn/easy-rsa/keys/openvpn.key ... # 2048 instaead of 1024 dh dh2048.pem ... # redirct all trafic from client push "redirect-gateway def1 bypass-dhcp" ... # google and opendns push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 208.67.220.220" ... # root otherwise user nobody group nogroup ...
Настройка роутинга
Включаем поддержку пересылки пакетов ядром:
[simterm]# echo 1 > /proc/sys/net/ipv4/ip_forward[/simterm]
Правим /etc/sysctl.conf
и снимаем комментарий со строки:
... # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1 ...
Настраиваем netfilter
. Всегда пользовался IPTABLES для этого, в этот раз попробовал UFW.
Казуальщина пришла не только в мир Lineage 🙂
Разрешаем SSH (доступ по IP сделан в security group для EC2):
[simterm]
# ufw allow ssh Rules updated Rules updated (v6)
[/simterm]
OpenVPN у нас будет работать по UDP, разрешаем порт 1194 ( доступ к нему тоже ограничен в security group):
[simterm]
# ufw allow 1194/udp Rules updated Rules updated (v6)
[/simterm]
Включаем роутинг в файле /etc/default/ufw
, устанавливаем ACCEPT
вместо DROP
:
... # Set the default forward policy to ACCEPT, DROP or REJECT. Please note that # if you change this you will most likely want to adjust your rules DEFAULT_FORWARD_POLICY="ACCEPT" ...
Редактируем /etc/ufw/before.rules
, добавляем правила для нашего VPN:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES
Активируем ufw
:
[simterm]
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
[/simterm]
Проверяем правила:
[simterm]
# ufw status Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 1194/udp ALLOW Anywhere 22 ALLOW Anywhere (v6) 1194/udp ALLOW Anywhere (v6)
[/simterm]
SSL
Переходим к созданию ключей.
Копируем скрипты:
[simterm]# cp -r /usr/share/easy-rsa/ /etc/openvpn[/simterm]
Создаём каталог для ключей сервера:
[simterm]# mkdir /etc/openvpn/easy-rsa/keys[/simterm]
Правим /etc/openvpn/easy-rsa/vars
. При желании – можно указать тут параметры по умолчанию для создаваемых ключей – страницу, организацию и т.д.
Указываем имя ключа:
... # X509 Subject Field export KEY_NAME="openvpn" ...
Генерируем ключ Diffie-Hellman с размером 2048 байт:
[simterm]
# openssl dhparam -out /etc/openvpn/dh2048.pem 2048 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time
[/simterm]
Готовим ключи.
Переходим в каталог openvpn
, применяем переменные из vars
, который редактировали выше:
[simterm]
# . ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
[/simterm]
Создаём свой CA сертификат:
[simterm]
# ./build-key-server --initca Generating a 2048 bit RSA private key ... Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [MyOrganizationalUnit]: Common Name (eg, your name or your server's hostname) [Fort-Funston CA]: Name [EasyRSA]: Email Address [[email protected]]:
[/simterm]
Проверяем:
[simterm]
# ls -l keys/ total 12 -rw-r--r-- 1 root root 1818 May 21 12:30 ca.crt -rw------- 1 root root 1704 May 21 12:30 ca.key -rw-r--r-- 1 root root 0 May 21 12:30 index.txt -rw-r--r-- 1 root root 3 May 21 12:30 serial
[/simterm]
Создаём ключ нашего OpenVPN сервера:
[simterm]
# ./build-key-server openvpn Generating a 2048 bit RSA private key ... ... countryName :PRINTABLE:'US' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'SanFrancisco' organizationName :PRINTABLE:'Fort-Funston' organizationalUnitName:PRINTABLE:'MyOrganizationalUnit' commonName :PRINTABLE:'openvpn' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'[email protected]' Certificate is to be certified until May 19 12:31:50 2027 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
[/simterm]
Проверяем:
[simterm]
# ls -l keys/ total 48 -rw-r--r-- 1 root root 5730 May 21 12:31 01.pem -rw-r--r-- 1 root root 1818 May 21 12:30 ca.crt -rw------- 1 root root 1704 May 21 12:30 ca.key -rw-r--r-- 1 root root 150 May 21 12:31 index.txt -rw-r--r-- 1 root root 21 May 21 12:31 index.txt.attr -rw-r--r-- 1 root root 0 May 21 12:30 index.txt.old -rw-r--r-- 1 root root 5730 May 21 12:31 openvpn.crt -rw-r--r-- 1 root root 1102 May 21 12:31 openvpn.csr -rw------- 1 root root 1708 May 21 12:31 openvpn.key -rw-r--r-- 1 root root 3 May 21 12:31 serial -rw-r--r-- 1 root root 3 May 21 12:30 serial.old
[/simterm]
Копируем ключи сервера в его каталог настроек:
[simterm]
# cp -v keys/openvpn.* /etc/openvpn/ ‘keys/openvpn.crt’ -> ‘/etc/openvpn/openvpn.crt’ ‘keys/openvpn.csr’ -> ‘/etc/openvpn/openvpn.csr’ ‘keys/openvpn.key’ -> ‘/etc/openvpn/openvpn.key’
[/simterm]
Проверяем:
[simterm]
# ls -l /etc/openvpn/ total 40 -rw-r--r-- 1 root root 424 May 21 12:24 dh2048.pem drwxr-xr-x 3 root root 4096 May 21 12:30 easy-rsa -rw-r--r-- 1 root root 5730 May 21 12:33 openvpn.crt -rw-r--r-- 1 root root 1102 May 21 12:33 openvpn.csr -rw------- 1 root root 1708 May 21 12:33 openvpn.key -rw-r--r-- 1 root root 10325 May 21 11:55 server.conf -rwxr-xr-x 1 root root 1301 Nov 12 2015 update-resolv-conf
[/simterm]
Запускаем сервис:
[simterm]# systemctl start openvpn.service[/simterm]
Добавляем в автозапуск:
[simterm]# systemctl enable openvpn.service
Synchronizing state for openvpn.service with sysvinit using update-rc.d…
Executing /usr/sbin/update-rc.d openvpn defaults
Executing /usr/sbin/update-rc.d openvpn enable[/simterm]
Проверяем сервис:
[simterm]
# systemctl status openvpn.service ● openvpn.service - OpenVPN service Loaded: loaded (/lib/systemd/system/openvpn.service; enabled) Active: active (exited) since Sun 2017-05-21 12:34:28 UTC; 1min 9s ago Process: 2343 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2343 (code=exited, status=0/SUCCESS) May 21 12:34:28 ip-172-31-42-36 systemd[1]: Starting OpenVPN service... May 21 12:34:28 ip-172-31-42-36 systemd[1]: Started OpenVPN service.
[/simterm]
Сервер:
[simterm]
# systemctl status [email protected] ● [email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled) Active: active (running) since Sun 2017-05-21 12:34:28 UTC; 1min 45s ago Process: 2342 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf (code=exited, status=0/SUCCESS) Main PID: 2356 (openvpn) CGroup: /system.slice/system-openvpn.slice/[email protected] └─2356 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf May 21 12:34:28 ip-172-31-42-36 ovpn-server[2342]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2 May 21 12:34:28 ip-172-31-42-36 systemd[1]: Started OpenVPN connection to server. May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: GID set to nogroup May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: UID set to nobody May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: UDPv4 link local (bound): [undef] May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: UDPv4 link remote: [undef] May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: MULTI: multi_init called, r=256 v=256 May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0 May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: IFCONFIG POOL LIST May 21 12:34:28 ip-172-31-42-36 ovpn-server[2356]: Initialization Sequence Completed
[/simterm]
Собственно – на этом установка и настройка OpenVPN сервера завершена.
Клиент на Arch Linux опишу отдельно, подключаемся:
[simterm]
# openvpn /etc/openvpn/client/setevoy_home.conf Sun May 21 15:52:44 2017 OpenVPN 2.4.2 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 11 2017 Sun May 21 15:52:44 2017 library versions: OpenSSL 1.1.0e 16 Feb 2017, LZO 2.10 Sun May 21 15:52:44 2017 WARNING: --ns-cert-type is DEPRECATED. Use --remote-cert-tls instead. Sun May 21 15:52:44 2017 TCP/UDP: Preserving recently used remote address: [AF_INET]34.***.***.137:1194 ... Sun May 21 15:52:45 2017 /usr/bin/ip route add 0.0.0.0/1 via 10.8.0.5 Sun May 21 15:52:45 2017 /usr/bin/ip route add 128.0.0.0/1 via 10.8.0.5 Sun May 21 15:52:45 2017 /usr/bin/ip route add 10.8.0.1/32 via 10.8.0.5 Sun May 21 15:52:45 2017 GID set to nogroup Sun May 21 15:52:45 2017 UID set to nobody Sun May 21 15:52:45 2017 Initialization Sequence Completed
[/simterm]
Проверяем:
[simterm]
$ mtr -r -c 1 ya.ru Start: Sun May 21 16:05:24 2017 HOST: setevoy-arch-home Loss% Snt Last Avg Best Wrst StDev 1.|-- 10.8.0.1 0.0% 1 55.5 55.5 55.5 55.5 0.0 2.|-- ??? 100.0 1 0.0 0.0 0.0 0.0 0.0 ... 12.|-- slou-b1-link.telia.net 0.0% 1 63.5 63.5 63.5 63.5 0.0 13.|-- ldn-bb3-link.telia.net 0.0% 1 65.4 65.4 65.4 65.4 0.0 14.|-- adm-bb3-link.telia.net 0.0% 1 75.0 75.0 75.0 75.0 0.0 15.|-- adm-b2-link.telia.net 0.0% 1 73.8 73.8 73.8 73.8 0.0 16.|-- yandex-ic-318530-adm-b2.c 0.0% 1 71.7 71.7 71.7 71.7 0.0 17.|-- jansson-et-4-1-0.yndx.net 0.0% 1 100.7 100.7 100.7 100.7 0.0 18.|-- std-p2-hu0-1-0-1.yndx.net 0.0% 1 130.2 130.2 130.2 130.2 0.0 19.|-- sas1-c1-ae13.yndx.net 0.0% 1 128.3 128.3 128.3 128.3 0.0 20.|-- ya.ru 0.0% 1 144.5 144.5 144.5 144.5 0.0
[/simterm]
Готово.
UPD
Быстрая напоминалка по генерации клиентских ключей:
[simterm]
# cd /etc/openvpn/easy-rsa/ # . ./vars # ./build-key client_name
[/simterm]
Обновляем client_name.ovpn
(для Windows, Linux – client_name.conf
), меняем:
... cert client_name.crt key client_name.key ...
Отправляем клиенту:
[simterm]
$ ls -l keys/client_name.* -rw-r--r-- 1 setevoy root 5626 Sep 3 17:49 client_name.crt -rw-r--r-- 1 setevoy root 1106 Sep 3 17:49 client_name.csr -rw------- 1 setevoy root 1704 Sep 3 17:49 client_name.key -rw-r--r-- 1 setevoy root 3442 Sep 3 17:49 client_name.ovpn
[/simterm]
Ссылки по теме
https://www.linode.com/docs/networking/vpn/set-up-a-hardened-openvpn-server
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-8