WireGuard — это приложение, предназначенное для создания защищенной виртуальной частной сети (VPN) с удобным интерфейсом и простой настройкой. Используя надежные криптографические протоколы и алгоритмы, программа обеспечивает шифрование данных. Изначально разработанная для ядра Linux, программа WireGuard была расширена до совместимости с Windows, macOS, FreeBSD, iOS и Android.
Шаг 1. Установка сервера WireGuard на CentOS
Для начала получите последние обновления, выполнив следующие команды:
sudo yum update
sudo dnf update
Для установки необходимых модулей ядра и инструментов WireGuard включите репозитории EPEL и Elrepo:
sudo dnf install epel-release elrepo-release -y
Убедитесь, что репозиторий PowerTools активен, поскольку пакеты EPEL могут полагаться на его компоненты:
sudo yum install ‘dnf-command(config-manager)’
sudo yum config-manager —set-enabled PowerTools
Перед установкой модуля ядра WireGuard активируйте его официальный репозиторий:
sudo yum copr enable jdoss/wireguard
Наконец, перейдите к установке WireGuard:
sudo yum install wireguard-dkms wireguard-tools
Шаг 2. Генерация закрытого и открытого ключей
WireGuard работает по принципу шифрования соединений с помощью пары криптографических ключей. При этом открытый ключ передается другой стороне, что позволяет ей шифровать сообщения таким образом, что расшифровать их может только соответствующий закрытый ключ. Для обеспечения безопасности двусторонней связи каждой стороне необходим свой набор закрытых и открытых ключей. Каждая пара ключей обеспечивает только односторонний обмен сообщениями.
Перед созданием пары ключей перейдите в каталог.
Перейдите в каталог WireGuard с помощью команды:
cd /etc/wireguard
Настройте разрешения для этого каталога:
umask 077
Для генерации пары ключей выполните следующую команду:
wg genkey | tee private.key | wg pubkey > public.key
Проверьте сгенерированные ключи с помощью команд:
ls -l privatekey publickey
sudo cat privatekey
sudo cat publickey
Запишите оба ключа, так как они потребуются в дальнейшем.
Шаг 3. Настройка серверной конфигурации
Для начала настройки сервера WireGuard перейдите в папку /etc/wireguard и создайте файл wg0.conf с помощью команды:
sudo nano /etc/wireguard/wg0.conf
Добавьте в конфигурационный файл последующие директивы, заполнив данные ключами, сгенерированными ранее:
[Interface]
PrivateKey = <contents-of-server-privatekey>
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Извлеките сгенерированный ранее закрытый ключ и вставьте его в поле PrivateKey.
Затем сгенерируйте пару ключей для клиента, скопируйте открытый ключ клиента и вставьте его в поле PublicKey. Для копирования значения ключа воспользуйтесь следующими командами:
sudo cat /etc/wireguard/public.key
sudo cat /etc/wireguard/private.key
Шаг 4. Настройка FireWall
По умолчанию брандмауэр ограничивает все соединения между внутренней сетью (wg0) и публичной сетью (eth0). Давайте изменим эту конфигурацию с помощью следующих команд:
Шаг 5. Запуск WireGuard и включение его при загрузке
Теперь сервер готов к запуску. Для запуска WireGuard воспользуйтесь командой wg-quick и укажите имя нового интерфейса:
wg-quick up wg0
Если конфигурация верна, то на экране появится следующее окно:
[WireGuard for CentOS — Screenshot].
Чтобы проверить состояние сервера WireGuard, введите:
wg show
OpenVPN vs WireGuard: какой VPN лучше?
OpenVPN и WireGuard — популярные протоколы VPN, у которых есть несколько ключевых различий. Решение о том, какой из них лучше, зависит от ваших конкретных потребностей и предпочтений.
OpenVPN
OpenVPN известен своими сильными функциями безопасности. Он использует библиотеку OpenSSL и поддерживает различные алгоритмы шифрования, включая AES, Blowfish и Camellia.
OpenVPN широко поддерживается и может использоваться на различных операционных системах, включая Windows, macOS, Linux и мобильные платформы. Он также хорошо работает с брандмауэрами и трансляцией сетевых адресов (NAT).
OpenVPN обладает высокой конфигурируемостью, позволяя вам настраивать параметры в соответствии с вашими требованиями. Он поддерживает как UDP (User Datagram Protocol), так и TCP (Transmission Control Protocol) для связи.
WireGuard
WireGuard — легкий и простой в использовании протокол. Он имеет более простую кодовую базу по сравнению с OpenVPN, что делает его более легким для аудита и потенциально более безопасным.
WireGuard разработан для обеспечения высокой эффективности и предлагает более высокую скорость по сравнению с OpenVPN. В нем используются современные криптографические протоколы, такие как ChaCha20 для шифрования и Curve25519 для обмена ключами, что обеспечивает преимущество в скорости.
WireGuard устанавливает соединения быстрее, что делает его подходящим для сценариев, где требуется частое установление соединения, например, при переключении между сетевыми интерфейсами.
WireGuard хорошо подходит для мобильных устройств благодаря эффективному использованию заряда батареи и возможности беспрепятственного роуминга в сети.
Заключение
OpenVPN известен своей надежной безопасностью, совместимостью и гибкостью, в то время как WireGuard ставит во главу угла простоту, производительность и поддержку мобильных устройств. Если вам требуется проверенное решение с широкими возможностями конфигурирования, OpenVPN — это надежный выбор. С другой стороны, если вы отдаете предпочтение скорости, простоте и эффективному мобильному использованию, WireGuard может оказаться более предпочтительным вариантом.
Как настроить VPN IPsec
Виртуальная частная сеть (VPN) часто используется для создания безопасного туннеля передачи данных между локальным компьютером и удаленным сервером. Существуют различные протоколы туннелирования VPN, и в этой статье мы сосредоточимся на настройке L2TP через IPSec для Windows.
L2TP, или Layer 2 Tunneling Protocol, сам по себе не обеспечивает надежного шифрования. Именно здесь в игру вступает IPSec, поскольку он обеспечивает надежное шифрование данных, которыми обмениваются удаленный сервер и локальная машина. Комбинируя L2TP и IPSec, можно создать безопасное и зашифрованное VPN-соединение, обеспечивающее конфиденциальность и целостность передаваемых данных.
Введение
Технология IPsec VPN позволяет создать туннель для передачи трафика из частных сетей через публичный интернет. Это достигается путем шифрования данных для обеспечения их безопасности. VPN на базе IPsec обычно используются для соединений site-to-site, соединяющих две географически разделенные сети, например, различные центры обработки данных, когда выделенные каналы связи нецелесообразны.
В этой статье мы продемонстрируем, как запустить виртуальную машину с IPsec VPN для маршрутизации трафика из облачной сети в удаленную точку подключения. В качестве примера мы будем использовать демон strongSwan. Во второй части мы рассмотрим пример схемы обхода отказа с двумя виртуальными машинами IPsec VPN, обеспечивая избыточность и высокую доступность.
Исходные данные
виртуальная машина с Ubuntu 20.04
1 порт имеет подключение к публичной сети (как default route)
2 порт подключается к частной сети, в которой необходимо настроить маршрутизацию
Схема адресации
Обратите внимание, что в схеме отказоустойчивость не рассматривается, так как она опирается на один вариант VPN. Для достижения отказоустойчивости вам потребуется установить дополнительные резервные VPN. В этой статье предполагается, что у вас уже есть левая часть настройки, которая включает в себя вариант VPN в другом облаке с настроенной виртуальной машиной или IPsec.
На стороне *** ваша виртуальная машина оснащена двумя портами, настроенными на IPsec. Первый порт имеет адрес 188.68.206.154 и подключен к публичной сети. Второй порт имеет адрес 192.168.10.10 и подключен к частной сети.
Настройка VPN с одним инстансом
Подключитесь к виртуальной машине по SSH и начните настройку. Первое, что нужно сделать, это установить демон strongSwan и включить его в автозагрузке:
sudo apt update
sudo apt install -y strongswan
sudo systemctl enable strongswan-starter
Далее необходимо включить пересылку пакетов между интерфейсами, поскольку ваша виртуальная машина будет служить шлюзом для частной сети, пересылая трафик через публичную сеть с шифрованием.
sudo cat << EOF > /etc/sysctl.d/99-vpn-ipsec.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
EOF
sudo sysctl -p /etc/sysctl.d/99-vpn-ipsec.conf
Создайте файл конфигурации IPsec для strongSwan:
sudo cat << EOF > /etc/ipsec.conf
config setup
charondebug=»all»
uniqueids=yes
strictcrlpolicy=no
conn site-to-site-vpn
type=tunnel
authby=secret
left=%defaultroute
leftid=188.68.206.154
leftsubnet=192.168.10.0/24
right=51.250.46.166
rightsubnet=192.168.20.0/24
ike=aes256-sha2_256-modp1024!
esp=aes256-sha2_256!
keyingtries=0
ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=restart
auto=start
EOF
Существуют важные параметры, которые требуют настройки в зависимости от конкретной среды и используемых адресов:
leftid: Это публичный IP-адрес самой виртуальной машины IPsec. В вашем случае это 188.68.206.154. Однако в другой среде этот адрес будет другим.
leftsubnet: Это относится к частной сети, созданной в облаке Selectel для других виртуальных машин. Это сеть, из которой вам нужен доступ к виртуальным машинам в другом облаке.
right: Это публичный IP-адрес удаленной виртуальной машины. В вашем случае это 51.250.46.166.
rightsubnet: Это удаленная частная сеть. Это сеть, созданная в другом облаке и используемая для виртуальных машин.
Для получения более подробной информации о других опциях рекомендуется обратиться к официальной документации, поскольку могут существовать дополнительные опции, специфичные для вашей установки.
Создайте файл, который будет содержать ключ для подключения:
sudo cat << EOF > /etc/ipsec.secrets
188.68.206.154 51.250.46.166 : PSK «<SECRET>»
EOF
SECRET — пароль, указанный с обеих сторон тоннеля, то есть на обеих виртуальных машинах VPN IPsec.
Перезагружаем IPsec демон и проверяем статус подключения:
sudo systemctl restart strongswan-starter ipsec status
Настройка отказоустойчивой схемы
В отличие от предыдущей схемы, в этой конфигурации используются VIP-адреса в качестве IP-адреса шлюза в приватной сети и основного адреса для VPN-туннеля. Перемещение VIP-адресов между виртуальными машинами осуществляется при помощи протокола VRRP.
Для настройки отказоустойчивой схемы необходимо добавить еще одну виртуальную машину для VPN. Она будет называться vpn2, а первая виртуальная машина — vpn1.
Прежде чем настраивать IPsec, требуется установить и сконфигурировать демон keepalived для использования протокола VRRP. Следуйте инструкциям ниже для установки этой службы:
sudo apt install -y keepalived
Для достижения требуемой VRRP-конфигурации:
Убедитесь, что оба VIP-адреса находятся в одной группе и перемещаются одновременно между виртуальными машинами. Это гарантирует, что обе виртуальные машины могут выступать в качестве MASTER и BACKUP для обслуживания запросов.
Когда статус инстанса изменяется с MASTER на BACKUP и обратно, необходимо включать и отключать IPsec соответственно. Это обеспечит построение VPN-туннеля только с одной виртуальной машины в определенный момент времени.
Теперь перейдем к настройке VRRP на виртуальной машине vpn2:
sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh
#!/bin/bash
TYPE=\$1
NAME=\$2
STATE=\$3
case \$STATE in
«MASTER») /usr/sbin/ipsec restart
;;
«BACKUP») /usr/sbin/ipsec stop
;;
«FAULT») /usr/sbin/ipsec stop
exit 0
;;
*) /usr/bin/logger «ipsec unknown state»
exit 1
;;
esac
EOF
sudo chmod a+x /usr/local/sbin/notify-ipsec.sh
sudo cat << EOF > /etc/keepalived/keepalived.conf
vrrp_sync_group G1 {
group {
EXT
INT
}
notify «/usr/local/sbin/notify-ipsec.sh»
}
vrrp_instance INT {
state BACKUP
interface eth1
virtual_router_id 11
priority 25
advert_int 1
authentication {
auth_type PASS
auth_pass <SECRET>
}
virtual_ipaddress {
192.168.120.100/24
}
nopreempt
garp_master_delay 1
}
vrrp_instance EXT {
state BACKUP
interface eth0
virtual_router_id 22
priority 25
advert_int 1
authentication {
auth_type PASS
auth_pass <SECRET>
}
virtual_ipaddress {
188.68.206.158/29
}
nopreempt
garp_master_delay 1
}
EOF
Следующие команды выполняют две задачи:
Создают файл /usr/local/sbin/notify-ipsec.sh, который представляет собой скрипт, вызываемый при изменении статуса VRRP. Этот скрипт будет отвечать за выключение и включение IPsec соответствующим образом.
Создают файл конфигурации /etc/keepalived/keepalived.conf, который будет использоваться keepalived для настройки двух групп.
После создания этих файлов необходимо перезагрузить keepalived и включить его автоматически при запуске системы.
sudo systemctl restart keepalived
sudo systemctl enable keepalived
После выполнения этих шагов можно приступить к настройке IPsec на виртуальной машине vpn2. Новая конфигурация файла будет отличаться, так как теперь туннель должен быть установлен с использованием VIP-адреса, а не адреса, связанного с интерфейсом.
sudo cat << EOF > /etc/ipsec.conf
config setup
charondebug=»all»
uniqueids=yes
strictcrlpolicy=no
conn site-to-site-vpn
type=tunnel
authby=secret
left=%defaultroute
leftid=188.68.206.158
leftsubnet=192.168.10.0/24
right=51.250.46.166
rightsubnet=192.168.20.0/24
ike=aes256-sha2_256-modp1024!
esp=aes256-sha2_256!
keyingtries=0
ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=restart
auto=start
EOF
После завершения настройки vpn2 мы переходим к настройке vpn1. На первой виртуальной машине также необходимо запустить VRRP и внести некоторые изменения в конфигурацию IPsec.
Поскольку данная схема разработана для обеспечения отказоустойчивости, большинство конфигурационных файлов будут идентичны настройкам vpn2. Единственное отличие заключается в том, что роль VRRP на этом инстансе будет MASTER. Сначала устанавливаем keepalived, затем создаем конфигурацию и скрипт для контроля IPsec:
sudo apt install -y keepalived
sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh
#!/bin/bash
TYPE=\$1
NAME=\$2
STATE=\$3
case \$STATE in
«MASTER») /usr/sbin/ipsec restart
;;
«BACKUP») /usr/sbin/ipsec stop
;;
«FAULT») /usr/sbin/ipsec stop
exit 0
;;
*) /usr/bin/logger «ipsec unknown state»
exit 1
;;
esac
EOF
sudo chmod a+x /usr/local/sbin/notify-ipsec.sh
sudo cat << EOF > /etc/keepalived/keepalived.conf
vrrp_sync_group G1 {
group {
EXT
INT
}
notify «/usr/local/sbin/notify-ipsec.sh»
}
vrrp_instance INT {
state MASTER
interface eth1
virtual_router_id 11
priority 25
advert_int 1
authentication {
auth_type PASS
auth_pass <SECRET>
}
virtual_ipaddress {
192.168.120.100/24
}
nopreempt
garp_master_delay 1
}
vrrp_instance EXT {
state MASTER
interface eth0
virtual_router_id 22
priority 25
advert_int 1
authentication {
auth_type PASS
auth_pass <SECRET>
}
virtual_ipaddress {
188.68.206.158/29
}
nopreempt
garp_master_delay 1
}
EOF
sudo systemctl enable keepalived
Важно, чтобы пароль <SECRET>, указанный в конфигурации, был одинаковым на обеих виртуальных машинах VPN.
Далее необходимо обновить конфигурацию IPsec и конфигурацию секрета IPsec. В этих конфигурационных файлах необходимо изменить основной адрес на VIP-адрес. Таким образом, конфигурация IPsec и конфигурация секрета будут идентичными на vpn1 и vpn2.
sudo cat << EOF > /etc/ipsec.conf
config setup
charondebug=»all»
uniqueids=yes
strictcrlpolicy=no
conn site-to-site-vpn
type=tunnel
authby=secret
left=%defaultroute
leftid=188.68.206.158
leftsubnet=192.168.10.0/24
right=51.250.46.166
rightsubnet=192.168.20.0/24
ike=aes256-sha2_256-modp1024!
esp=aes256-sha2_256!
keyingtries=0
ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=restart
auto=start
EOF
sudo cat << EOF > /etc/ipsec.secrets
188.68.206.158 51.250.46.166 : PSK «<SECRET>»
EOF
После внесения изменений необходимо перезагрузить keepalived и проверить статус IPsec: sudo systemctl restart keepalived
ipsec status
Установка OpenVPN сервера на Linux и настройка клиента для подключения к нему
Требование к оборудованию
Виртуализация — KVM. Сервер — VPS/VDS на Linux.
Установка OpenVPN
С помощью Docker
apt install curl docker.io
yum install docker curl
docker run —name dockovpn —cap-add=NET_ADMIN \
-p 1194:1194/udp -p 80:8080/tcp \
-e HOST_ADDR=$(curl -s https://api.ipify.org) \
alekslitvinenk/openvpn
Когда ваша конфигурацию подготовиться, скачайте ее по ссылке — http://ваш IP/
Перед запуском VPN, укажите во время исполнения скрипта IP-адрес. Шлюз лучше не указывать, чтобы избежать ошибок исполнения.
Вы можете добавить пароль на подключение. Чтобы не инициализировать ключ для подключения, введите цифру 1.
Client name: openvpnDo you want to protect the configuration file with a password?(e.g. encrypt the private key with a password) 1) Add a passwordless client 2) Use a password for the clientSelect an option [1-2]: 1
Создан файл, располагающийся в /root/client.ovpn
client — имя пользователя
Чтобы скачать файл конфигурации, проведите аналогичную процедуру (ваш IP). При повторном запуске скрипта, вы можете:
удалить пользователя OpenVPN
удалить OpenVPN
добавить пользователя OpenVPN
Ручная установка OpenVPN
Установка сервера
apt install -y openvpn
Разархивируйте ключи:
mkdir /src; cd /src && wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
cd easy-rsa-master/easyrsa3
./easyrsa init-pki
Создайте центр сертификации. Пароль, который будет необходим для завершения сохраните:
./easyrsa build-ca
Вывод:
./pki/ca.crt
./pki/private/ca.key
Сгенерируйте запрос, чтобы создать сертификат, позволяющий осуществлять подключение к серверу, не используя пароль:
./easyrsa gen-req server nopass
Подпишите запрос. Для этого используйте пароль, который установили при создании центра сертификации:
./easyrsa sign-req server server
Вывод:
./pki/issued/server.crt
Сгенерируйте ключи для клиента:
./easyrsa gen-req client nopass
./easyrsa sign-req client client
Вывод (два файла):
./pki/private/client.key
./pki/issued/client.crt
Сгенерируйте файл с параметрами Диффи-Хеллмана:
./easyrsa gen-dh
Вывод:
./pki/dh.pem
Перенесите файлы:
mv ./pki/dh.pem /etc/openvpn/dh1024.pem
mv ./pki/private/client.key /etc/openvpn/
mv ./pki/private/server.key /etc/openvpn/
mv ./pki/ca.crt /etc/openvpn/
mv ./pki/issued/client.crt /etc/openvpn/
mv ./pki/issued/server.crt /etc/openvpn/
client.crt, client.key, ca.crt переместите на устройство (компьютер) пользователя, который инициирует подключение к серверу OpenVPN:
Если сервер был установлен при помощи скрипта или с использованием Docker, то конфигурационный файл openvpn.conf генерируется автоматически, его необходимо импортировать в ваш OpenVPN клиент. Если настройка производилась вручную, то и файл конфигурации для клиента необходимо корректировать вручную. Далее о том, как это сделать.
Перейдите в директорию, где расположена программа (например, C:\Program and Files\OpenVPN\sample-config).
Откройте в текстовом редакторе файл client.ovpn, внесите дополнение:
remote my-server-1 1194
Скачивайте данные файлы (скачать нужно в ту директорию, где проводили корректировки):
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
Выберите Start OpenVPN on this config file. Сообщение в случае успешного соединения:
Linux
Установка клиента:
Centos 7 (yum install -y openvpn)
Debian/Ubuntu (apt install -y openvpn)
Скрипт или контейнер
Разместите файл .conf в /etc/openvpn/client.conf, выполните подключение:
openvpn —config /etc/openvpn/openvpn.conf
Загрузите 3 файла, созданных на сервере в директорию /etc/openvpn/:
client1.key
client1.crt
ca.crt
Вы получите файл с кодом:
remote <IP.вашего.сервера> 1194
push «redirect-gateway def1»
tls-client
remote-cert-tls server
nobind
proto tcp-client
dev tun0
pull
resolv-retry infinite
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
persist-tun
persist-key
verb 3
route-method exe
route-delay 2
Подключение после ручной корректировки
openvpn —config /etc/openvpn/openvpn.conf
Для чего использовать OpenVPN
Что такое OpenVPN
OpenVPN — это популярная реализация технологии VPN. Используется для создания виртуальных корпоративных сетей. Более стабильный и надежный, чем SSTP, Wireguard, SoftEther. OpenVPN — кроссплатформенный open-source продукт. Может работать со многими маршрутизаторами. Новые реализации работают быстрее OpenVPN, но возможно компенсировать потерю скорости, заменив TCP-порт на UDP.
*TCP & UDP -протоколы транспортного уровня, отвечающие за логическую маршрутизацию данных в сети.
Конфиденциальность данных в OpenVPN обеспечена с помощью OpenSSL, 256-битный ключей-шифрования и сложных алгоритмов шифрования. Проект развивается динамично, новые обновления выходят, баги и уязвимости исправляются.
Как работает OpenVPN
Инициализируется защищенное соединение между VPN-клиентом и сервером. OpenVPN применяется повсеместно. Например, при организации удаленной работы для сотрудника (ов). VPN также является инструментом защиты данных при взаимодействии с публичными точками доступа. VPN часто находит применение как инструмент обхода интернет-блокировок.
OpenVPN — реализация VPN, позволяющая гибко настраивать VPN-соединение, используя дополнительные опции (например, улучшение авторизации/аутентификации).
Одна из привлекательных для пользователей возможностей — организация туннелирования (два хоста в связке через безопасное соединение). Хосты друг друга идентифицируют через специальные сгенерированные ключи, адреса не задействуются. OpenVPN удобно использовать для организации соединения “site-to-site”.
Начало работы с OpenVPN
В настройках сетевых соединений найдите пункт Предустановленно ПО, выберите OpenVPN. Про настройку OpenVPN — link
Установка Wireguard VPN на VPS
Данное руководство поможет последовательно установить, настроить и отладить WireGuard VPN. Для работы вам понадобится виртуальный сервер под управлением OS Linux. В нашем случае, был выбран Ubuntu 20 с минимальными расширениями. Редактирование файлов будет происходить в программе VIM.
Удалённый сервер
С помощью авторизации по SSH произведите подключение к серверу, на котором будет развернут VPN.
обновление репозиториев apt — sudo apt update -y
установка WG — sudo apt install -y wireguard
переход в папку с VPN — cd/etc/wireguard/
генерация ключей для соединения с VPN — wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey.Команда tee сохраняет ключи в файл, далее скрипт создает публичный ключ на основе секретного, передает в директорию, полученный файл, сохраняет изменения.
Командой cat проверьте существование ключей в файлах:
cat publickey
cat privatekey
Следующим шагом в VIM создайте файл конфигурации VPN-сервера. Вставляем:
[Interface]
PrivateKey = <privatekey> # Приватный ключ из файла privatekey.
Address = 10.0.0.1/24 #Адрес VPN-сервера в частной сети.
ListenPort = 51830 #Порт, который будет слушать VPN-сервер.
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при поднятии сервера
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при выключении сервера.
Вместе privatekey вставьте приватный ключ.
Настройте форвардинг (прохождение трафика через VPN) —
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Включите автоматический запуск VPN после выключения, а также перезагрузки виртуального сервера — systemctl enable wg-quick@wg0.service. Команда вернет сообщение:
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
Произведите запуск WG — systemctl start wg-quick@wg0.service. Обязательно, уточните статус сервера VPN — systemctl status wg-quick@wg0.service. Настройка сервера завершена.
Подключение к WG
Создайте пары ключей для клиента — wg genkey | tee /etc/WireGuard/katkov_privatekey | wg pubkey | tee /etc/WireGuard/katkov_publickey
Папка сервера содержит файлы:.├── katkov_privatekey — частный ключ клиента├── katkov_publickey — публичный ключ клиента├── privatekey — частный ключ WG сервера├── publickey — публичный ключ WG сервера└── wg0.conf — конфигурационный файл WG сервера
Откройте файл — vim /etc/WireGuard/wg0.conf
Добавьте в конец файла строки ниже: [Peer] PublicKey = <katkov_publickey> #Публичный ключ клиента AllowedIPs = 10.0.0.2/32 #IP-адрес в час
Добавили, теперь перезагрузите сервер и проверьте статус:
systemctl restart wg-quick@wg0 systemctl status wg-quick@wg0
Вывод:
Настраиваем машину клиента
Мы показываем процесс на примере Windows 11, но любая версия Windows настраивается таким же образом. Не закрывайте сессию SSH на удаленном сервере, потому что нам необходимы ключи из директории /etc/WireGuard/
создайте текстовый документ, файл конфигурации для соединения к серверу WG, местоположение значения не имеет. В созданный wgvpn_connect.conf вставьте:
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY> #Клиентский приватный ключ. В нашем случае katkov_privetkey.
Address = 10.0.0.2/32 #IP-адрес клиента, который настроен на WG сервере
DNS = 8.8.8.8 #DNS, который будет использовать при подключении
[Peer]
PublicKey = <SERVER-PUBKEY> #Публичный ключ сервера
Endpoint = <SERVER-IP>:51830 #IP адрес удаленного сервера и порт прослушивания
AllowedIPs = 0.0.0.0/0 #Если указаны все нули — весь трафик клиента будет проходить через WG сервер
PersistentKeepalive = 20 #Интервал проверки соединения между клиентом и сервером (сек).
Чтобы узнать IP сервера, воспользуйтесь панелью управления или введите команду — curl ifconfig.me
Подготовленный файл загрузите в клиент WG:
Когда будет совершено подключение, индикатор загорится зеленым, трафик будет увеличиваться
ifconfig.me — для проверки IP
Вы настроили WG VPN-сеть. Чтобы подключать новых пользователей (новые устройства), генерируйте новые ключи и не забывайте давать им осмысленные названия. Также, следите за файлами конфигурации, они тоже должны присутствовать на каждом устройстве в сети.
*VPN — инструмент, реализующий технологию виртуальной частной сети. Главной задачей *VPN является обеспечение должного уровня безопасности сети, состоящей из нескольких кластеров локальных сетей или между отдельными клиентами (звеньями) в сетевой инфраструктуре. Конфиденциальность и цельность передаваемых данных поддерживаются с помощью туннелей шифрования.
Механизм работы:
В первую очередь необходимо настроить и запустить север. После запуска сервер сможет принимать и перенаправлять запросы/ответы через защищенные SSL-туннели, передавая информацию на сетевой адаптер. Также, возможна настройка proxy сети, так как инструмент позволяет производить гибкую маршрутизацию трафика.
Требования к ОС
Перед развёрткой *VPN проверьте правильность базовых параметров сервера. У сервера должен быть статический белый IP адрес, если нужен динамический, необходимо интегрировать динамический DNS. В настройках должна быть разрешена установка файлов конфигурации из директорий официальных источников. cat /etc/apt/sources.list — команда проверки директорий (проверяйте наличие комментариев, обычно комментарии содержат полную ссылку на файл конфигурации с официальным поставщиком ОС). Внимательно проверьте валидность параметров сети ( DNS-hosts, hostname).
Установка ПО
Производим обновление файлов директории и системы
apt-get update
apt-get upgrade
Устанавливаем *VPN
git clone …
Необходимо установить easy-rsa, разместить скрипты в нужную директорию, подготовить ключи шифрования
Создание симлинка файла, отвечающего за настройки *vpn
ln -s *vpn… *vpn.cnf
Активация скрипта vars
source ./vars
Провести очистку дефолтных ключей
./clean-all
Развертывание сертификации
./build-ca
Скрипт запросит подтверждение некоторых данных, можно поставить предустановленные
Создание ключа сервера
./build-key-server server
Сгенерируйте специальной командой клиентскую пару ключей
./build-key-pass client1
Скрипт потребует установить сид-фразу по соображениям безопасности
Имена ключей должны быть уникальными в случае, если существуют несколько пользователей. Иногда, требуется повторная процедура создания сертификатов. Тогда, снова активизируйте vars, подготовьте ключи.
cd /etc/*vpn/easy-rsa
source ./vars
./build-key client3
Приватный канал сообщения
Ключи Диффи-Хеллмана — надежный способ установления конфиденциальной связи в сети. Генерируется пара ключей, один из них — секретный.
./build-dh
После выполнения, в директории /etc/*vpn/easy-rsa/keys/ появится файл dh2048.pem
Командой захватываем необходимые файлы для сервера
Ключи храните надежно, иначе злоумышленники, совершив подмену или компрометацию секретных данных, нанесут весомый ущерб.
Клиенты
Клиенту понадобится всего 3 файла ca.crt, client1.crt, client1.key. Каждому клиенту необходимо отдавать только его ключи. Данные файлы можно разместить в директории /etc/*vpn на оборудовании клиента, если оно под управлением ОС группы Linux.
В ОС Windows их следует разместить в пользовательский каталог.
Отладка клиента и сервера
*VPN содержит sample файлы. В данных файлах содержатся варианты настроек (шаблоны).
С полученным файлом сервер уже готов к работе. Он сконфигурирован с возможностью туннелирования, однако не имеет возможности к проксированию, т.е. пересылки клиентского трафика от своего имени. Исправим это.
Для начала, проверяем какие файлы оказались в директории /etc/*vpn:
ls /etc/*vpn
nano /etc/*vpn/server.conf
Проверяем соответствуют ли файлы конфигурации с файлами в каталоге. Главное, чтобы ключи и сертификаты были валидными.
Запуск сервера
/etc/init.d/*vpn start
Чтобы определить статус сервера
/etc/init.d/*vpn status
Копируем файлы настроек клиента и ключи, заранее сгенерированные в /root
cp /usr/share/doc/*vpn/examples/sample-config-files/client.conf /root - настройки
cd /etc/openvpn/easy-rsa/keys - взять ключи
cp client1.key client1.crt ca.crt /root - скопировать в директорию root
Немного измените конфигурационный файл клиента
nano /root/client.conf
Находим строки “# The hostname/IP and port of the server”. Для remote изменяем my-server-1 на IP сервера или его домен. Далее, редактируем ключи в графе ssl/tls. Переносим файлы на устройство, которое будет клиентом.
*vpn *vpn.conf
На этом этапе настройка пока не завершена. Можно заметить, что машина не имеет доступ в интернет во время подключения к *VPN, потому что виртуальный адаптер и сервер существуют как шлюз.
Настройте маршрутизацию трафика
Для этого отредактируйте файл server на сервере
nano /etc/*vpn/server.conf
Из строки push «redirect-gateway def1 bypass-dhcp» удалите (;). В файле sysctl.conf добавьте net.ipv4.ip_forward=1. Эта команда позволяет ОС осуществлять движение трафика между интерфейсами(форвардинг). Чтобы редактирование вступило в силу — перезагрузите оборудование. Мы прекрасно понимаем, что постоянная перезагрузка ни к чему. Командой echo 1 > /proc/sys/net/ipv4/ip_forward разрешить перенаправлять данные без перезагрузок серверной машины.
Список команд для настройки NAT сети
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
В завершающий этап отладки сервера входит настройка форвардинга DNS. Для этого установите dnsmaq — apt-get install dnsmasq. Отредактируйте файл конфигурации dnsmaq — nano /etc/dnsmasq.conf, добавив listen-address=10.8.0.1 и bind-interfaces. Также измените файл настроек сети — nano /etc/network/interfaces. Укажите соответствующий секциям настроек адаптера адрес DNS серверов — dns-nameservers 8.8.8.8 8.8.4.4
На аварийный случай учитывайте возможность перезагрузки соединения с DNS.
/etc/init.d/dnsmasq restart
Поставьте разрешение клиентам *VPN на использование настроенного DNS. Для этого снимите комментарии в строке
push "dhcp-option DNS 10.8.0.1"
Перезагрузите сервер, чтобы обновить соединение и загруженные надстройки.
reboot
Выполните подключение к серверу. Откройте сайт, проверяющий адрес устройства в сети(IP). Сайт должен показать IP адрес сервера.