OpenVPN — Выборочный траффик (mail.ru, yandex.ru, vk.com, ok.ru, kaspersky.ru)

Цель:

Пустить через VPN только сети, которые попадают под запрет, остальные должны идти "напрямую". Так же важно удобство подключения устройств, кроссплатформенность, скорость и безопасность.

Все шаги были выполнены на CentOS 7.

Установим репозиторий EPEL, если его еще нет в системе и установим нужные пакеты:

yum install epel-release -y
yum install openvpn easy-rsa -y

Создаем файл конфигурации:

vim /etc/openvpn/server.conf

И копируем в него следующее:

local CHANGE_THIS_ON_YOUR_PUBLIC_IP
port 1194

proto udp
dev-type tun
dev tun

ca ca.crt
cert server.crt
key server.key

dh dh2048.pem

topology subnet
server 10.8.0.0 255.255.255.0

txqueuelen 250
keepalive 300 900

cipher AES-128-CBC
ncp-ciphers AES-128-GCM

user nobody
group nobody

duplicate-cn

persist-key
persist-tun

status openvpn-status.log

client-config-dir ccd

Для того, чтобы не весь наш траффик ходил через VPN, а только необходимые сети, создадим файл конфигурации для клиента:

mkdir /etc/openvpn/ccd
vim /etc/openvpn/ccd/DEFAULT

И скопируем в него следующее:

push "dhcp-option DNS 8.8.8.8"
push "route 8.8.8.8"

push "dhcp-option DNS 74.82.42.42" # HE.net DNS
push "route 74.82.42.42" # Route to HE.net DNS

# Persist TUN
push "persist-tun"

# Routes

# Yandex network
push "route 5.45.192.0 255.255.192.0"
push "route 5.255.192.0 255.255.192.0"
push "route 37.9.64.0 255.255.192.0"
push "route 37.140.128.0 255.255.192.0"
push "route 77.75.152.0 255.255.248.0"
push "route 77.88.0.0 255.255.192.0"
push "route 84.201.128.0 255.255.192.0"
push "route 87.250.224.0 255.255.224.0"
push "route 93.158.128.0 255.255.192.0"
push "route 95.108.128.0 255.255.128.0"
push "route 100.43.64.0 255.255.224.0"
push "route 109.235.160.0 255.255.248.0"
push "route 130.193.32.0 255.255.224.0"
push "route 141.8.128.0 255.255.192.0"
push "route 178.154.128.0 255.255.128.0"
push "route 185.32.185.0 255.255.255.0"
push "route 185.32.186.0 255.255.255.0"
push "route 185.71.76.0 255.255.252.0"
push "route 199.21.96.0 255.255.252.0"
push "route 199.36.240.0 255.255.252.0"
push "route 213.180.192.0 255.255.224.0"

push "route-ipv6 2001:678:384::/48"
push "route-ipv6 2620:10f:d000::/44"
push "route-ipv6 2a02:6b8::/32"
push "route-ipv6 2a02:5180::/32"

# Mail.ru network
push "route 5.61.16.0 255.255.248.0"
push "route 5.61.232.0 255.255.248.0"
push "route 79.137.157.0 255.255.255.0"
push "route 79.137.183.0 255.255.255.0"
push "route 94.100.176.0 255.255.240.0"
push "route 95.163.32.0 255.255.224.0"
push "route 95.163.248.0 255.255.248.0"
push "route 128.140.168.0 255.255.248.0"
push "route 178.22.88.0 255.255.248.0"
push "route 178.237.16.0 255.255.240.0"
push "route 185.5.136.0 255.255.252.0"
push "route 185.16.148.0 255.255.252.0"
push "route 185.16.244.0 255.255.252.0"
push "route 188.93.56.0 255.255.248.0"
push "route 194.186.63.0 255.255.255.0"
push "route 195.211.20.0 255.255.252.0"
push "route 195.211.128.0 255.255.252.0"
push "route 195.218.168.0 255.255.255.0"
push "route 208.87.92.0 255.255.252.0"
push "route 217.20.144.0 255.255.240.0"
push "route 217.69.128.0 255.255.240.0"

push "route-ipv6 2a00:1148::/32"
push "route-ipv6 2a00:a300::/32"
push "route-ipv6 2a00:b4c0::/32"

# VK.com network
push "route 87.240.128.0 255.255.192.0"
push "route 93.186.224.0 255.255.240.0"
push "route 95.142.192.0 255.255.240.0"
push "route 95.213.0.0 255.255.192.0"
push "route 185.29.130.0 255.255.255.0"
push "route 185.32.248.0 255.255.252.0"

push "route-ipv6 2a00:bdc0::/36"
push "route-ipv6 2a00:bdc0:e003::/48"
push "route-ipv6 2a00:bdc0:e004::/46"
push "route-ipv6 2a00:bdc0:e008::/48"
push "route-ipv6 2a00:bdc0:f000::/36"

# Kaspersky network
push "route 77.74.176.0 255.255.248.0"
push "route 91.103.64.0 255.255.248.0"
push "route 93.159.224.0 255.255.248.0"
push "route 185.54.220.0 255.255.254.0"
push "route 185.85.12.0 255.255.255.0"
push "route 185.85.14.0 255.255.254.0"

push "route-ipv6 2a03:2480::/33"

Создаем папку для ключей и копируем нужные скрипты для создания их:

mkdir -p /etc/openvpn/easy-rsa/keys
cp -a /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Для удобства можем сразу в переменные среды указать информацию нужную для создания ключей, дабы в будущем ее постоянно не вводить:

vim /etc/openvpn/easy-rsa/vars

И приведем его к такому виду:

export KEY_COUNTRY="UA"
export KEY_PROVINCE="UA"
export KEY_CITY="Kiev"
export KEY_ORG="openvpn"
export KEY_EMAIL="[email protected]"
export KEY_OU="VPN"
export KEY_NAME="openvpn"
export KEY_CN="openvpn.artem.services"

Копируем конфигурацию OpenSSL:

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Переходим в папку со скриптами для создания ключей, и очищаем содержимое ее для наших будущих ключей:

cd /etc/openvpn/easy-rsa
source ./vars
./clean-all

Создадим корневой сертификат:

./build-ca

Создадим ключ и публичный сертификат:

./build-key-server server

Создадим Diffie-Hellman ключ:

./build-dh

Перейдем в каталог с ключами и сертификатами, которые мы создали:

cd /etc/openvpn/easy-rsa/keys

И скопируем нужные нам файлы в каталог OpenVPN'a:

cp -a dh2048.pem ca.crt server.crt server.key /etc/openvpn

 

Важно чтобы после копирования у этих файлов сохранились права

 

Создадим сертификат и ключ для клиента:

cd /etc/openvpn/easy-rsa
./build-key client

Дальше конфигурация приводится для iptables, если используется firewalld то отключить его можно следующим образом:

yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush

Добавляем правило в iptables и сохраняем:


iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

 

Обязательно проверьте правильность названия интерфейса, в моем случае это eth0

В файле "/etc/sysctl.conf" разрешаем форвардинг пакетов:

net.ipv4.ip_forward = 1

И перезапускаем службу сети:

systemctl restart network.service

Добавляем службу OpenVPN в автозапуск и стартуем ее:

systemctl -f enable [email protected]
systemctl start [email protected]

Создадим файл конфигурации клиента для подключения к серверу, сразу вставив нужные ключи и сертификаты:

vim openvpn.ovpn

И скопируем в него следующее:

client
remote artem.services 1194

nobind

remote-cert-tls server

cipher AES-128-CBC

setenv opt ncp-ciphers AES-128-GCM

setenv opt block-outside-dns

dev tun

proto udp
<ca>
СОДЕРЖИМОЕ ФАЙЛА ca.crt
</ca>

<cert>
СОДЕРЖИМОЕ ФАЙЛА client.crt
</cert>

<key>
СОДЕРЖИМОЕ ФАЙЛА client.key
</key>

Дальше этот файл можно импортировать на устройства клиентов и подключаться к серверу.

Метки: Метки