OpenVPN — Весь траффик через VPN

Thank you for reading this post, don't forget to subscribe!

Цель:

Пустить весь траф­фик с любо­го из устройств через 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 tcp
dev-type tun
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.1255.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
push "redirect-gateway def1"
push "remote-gateway 10.8.0.1"
push "dhcp-option DNS 8.8.8.8"

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

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="admin@test.services"
export KEY_OU="VPN"
export KEY_NAME="openvpn"
export KEY_CN="openvpn.test.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 openvpn@server.service
systemctl start openvpn@server.service

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

vim openvpn.ovpn

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

client
remote test.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>

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