Строим VPN-туннель в локальную сеть с помощью «WireGuard»
Безопасный удаленный доступ к сервисам в локальной сети.
VPN (англ. Virtual Private Network, «виртуальная частная сеть») — обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например Интернет).
Наиболее популярные решения с открытым исходным кодом для построения виртуальных частных сетей — «OpenVPN» и «IPSec». В релиз ядра Linux 5.6, который состоялся 30 марта 2020 года, вошла еще одна реализация технологии VPN — «WireGuard». Это молодой набирающий популярность проект.
Основные преимущества «WireGuard»:
- Высокая производительность (бенчмарки можно посмотреть тут)
- Простая настройка
- Современная криптография
- Качественный код
В этой инструкции мы настроим VPN-туннель в локальную сеть с помощью «WireGuard» и обеспечим доступ из интернета к узлам LAN с различных устройств.
Адресация в LAN — 192.168.100.0/24, VPN-сети назначим диапазон 10.0.0.0/24.
Для размещения сервера потребуется VPS. При выборе необходимо обратить внимание на технологию виртуализации: предпочтительно KVM, можно XEN, а вот OpenVZ следует избегать. Дело в том, что в WireGuard реализован как модуль ядра, а в OpenVZ ядро очень старое. Я буду использовать самый дешевый виртуальный сервер c операционной системой Ubuntu 20.04 (KVM 512 МБ RAM 20 ГБ SSD 1 CPU — такая конфигурация вполне подойдет).
Залогинимся на сервер с правами пользователя root и выполним следующие команды:
# устанавливаем Wireguard apt update && apt upgrade apt install wireguard # разрешаем проброс пакетов echo «net.ipv4.ip_forward=1» >> /etc/sysctl.conf sysctl -p # генерируем ключи для сервера: wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Создадим конфигурационный файл /etc/wireguard/wg0.conf со следующим содержимым:
[Interface] Address = 10.0.0.1/24 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 ListenPort = 51820 PrivateKey =
Параметры PostUp/PostDown содержат правила iptables, которые будут применены при запуске/остановке сервиса. Обратите внимание на название сетевого интерфейса — оно должно соответствовать общедоступному сетевому адаптеру, в моем случае это eth0. Вывести список адаптеров можно командой:
Выберите из списка тот, которому соответствует внешний IP-адрес. — заменяем содержимым файла /etc/wireguard/privatekey.
Запустим VPN-сервис и добавим его в автозагрузку:
Убедимся, что служба запустилась корректно:
[email protected]:/etc/wireguard# wg show wg0 interface: wg0 public key: private key: (hidden) listening port: 51820
Если ваш роутер поддерживает WireGuard (Zyxel KeeneticOS >=3.3, Mikrotik RouterOS >=7.1beta2, OpenWRT) — можно настроить VPN-клиент прямо на нем. Я буду использовать для этой цели сервер Ubuntu 20.04 (локальный адрес 192.168.100.7).
Первый этап настройки аналогичен конфигурации серверной части. Выполняем с правами root-пользователя:
# устанавливаем WireGuard apt update && apt upgrade apt install wireguard # разрешаем проброс пакетов echo «net.ipv4.ip_forward=1» >> /etc/sysctl.conf sysctl -p # генерируем ключи для клиента wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
[Interface] PrivateKey =
— заменяем содержимым /etc/wireguard/privatekey, — /etc/wireguard/publickey с сервера, — внешний IP-адрес сервера. Правила iptables в PostUp/PostDown необходимы для того, чтобы наш клиент выступал в роли шлюза в LAN. Указываем в правилах тот сетевой интерфейс, на который назначен локальный адрес (192.168.100.7, в моем случае это wlp2s0). Уточните его путем исполнения команды:
В параметре AllowedIPs задаются адреса, маршрутизация к которым будет осуществляться через VPN-интерфейс. В поле PersistentKeepalive — периодичность проверки доступности соединения в секундах. Запускаем службу и добавляем в автозагрузку:
На сервере добавляем в файл /etc/wireguard/wg0.conf блок:
Где — /etc/wireguard/publickey клиента. Перезапустим службу и убедимся, что все настроено корректно:
systemctl restart [email protected] [email protected]:/etc/wireguard# wg show wg0 interface: wg0 public key: private key: (hidden) listening port: 51820 peer: endpoint: :42946 allowed ips: 10.0.0.2/32, 192.168.100.0/24 latest handshake: 2 minutes, 8 seconds ago transfer: 3.24 KiB received, 828 B sent [email protected]:/etc/wireguard# ping -c 3 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=31.1 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=120 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=40.9 ms — 10.0.0.2 ping statistics — 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 31.093/63.987/119.950/39.774 ms [email protected]:/etc/wireguard# ping -c 3 192.168.100.5 PING 192.168.100.5 (192.168.100.5) 56(84) bytes of data. 64 bytes from 192.168.100.5: icmp_seq=1 ttl=63 time=31.8 ms 64 bytes from 192.168.100.5: icmp_seq=2 ttl=63 time=119 ms 64 bytes from 192.168.100.5: icmp_seq=3 ttl=63 time=40.0 ms — 192.168.100.5 ping statistics — 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 31.834/63.573/118.915/39.273 ms
Проверим теперь с клиента:
[email protected]:/etc/wireguard# wg show wg0 interface: wg0 public key: private key: (hidden) listening port: 42946 peer: endpoint: :51820 allowed ips: 10.0.0.0/24 latest handshake: 8 seconds ago transfer: 21.34 KiB received, 83.03 KiB sent persistent keepalive: every 21 seconds [email protected]:/etc/wireguard# ping -c 3 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=32.0 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=32.6 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=32.2 ms — 10.0.0.1 ping statistics — 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 32.013/32.265/32.586/0.316 ms
Сборки WireGuard доступны для основных платформ: Linux, Windows, Mac, Android, FreeBSD, OpenWRT и др. Рассмотрим настройку VPN-клиента на десктопах под управлением Linux и Windows, а так же на Android-смартфоне.
На клиенте выполняем с правами root:
# устанавливаем Wireguard apt update && apt upgrade apt install wireguard # генерируем ключи wg genkey | tee /etc/wireguard/peer_1_privatekey | wg pubkey | tee /etc/wireguard/peer_1_publickey
Конфигурационный файл /etc/wireguard/wg0.conf:
[Interface] PrivateKey =
— заменяем содержимым /etc/wireguard/peer_1_privatekey, — /etc/wireguard/publickey с сервера.
Обратите внимание на строку «AllowedIPs = 0.0.0.0/0» — в данной конфигурации весь трафик будет маршрутизироваться через VPN-адаптер. Это может понадобиться для сокрытия реального IP при работе в интернет или для защиты трафика при подключении к недоверенным сетям (например публичные Wi-Fi точки доступа). В этом случае указываем «DNS = 8.8.8.8» (8.8.8.8 — DNS-сервер Google), чтобы DNS-запросы выполнялись через защищенное VPN-соединение.
Если VPN-туннель необходим только для доступа к LAN 192.168.100.0/24 — убираем строчку «DNS = 8.8.8.8» и в параметре AllowedIPs меняем «0.0.0.0/0» на «10.0.0.0/24, 192.168.100.0/24».
На сервере в конфигурационный файл /etc/wireguard/wg0.conf добавляем блок:
Где — содержимое файла /etc/wireguard/peer_1_publickey клиента и перезапускаем службу:
Возвращаемся на клиент и проверяем доступность узлов в LAN через VPN-туннель:
[email protected]:/etc/wireguard# wg show wg0 interface: wg0 public key: private key: (hidden) listening port: 34022 peer: endpoint: :51820 allowed ips: 10.0.0.0/24, 192.168.100.0/24 latest handshake: 44 seconds ago transfer: 6.91 KiB received, 8.96 KiB sent persistent keepalive: every 20 seconds [email protected]:/etc/wireguard# ping -c 3 192.168.100.5 PING 192.168.100.5 (192.168.100.5) 56(84) bytes of data. 64 bytes from 192.168.100.5: icmp_seq=1 ttl=62 time=66.3 ms 64 bytes from 192.168.100.5: icmp_seq=2 ttl=62 time=65.7 ms 64 bytes from 192.168.100.5: icmp_seq=3 ttl=62 time=67.2 ms — 192.168.100.5 ping statistics — 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 65.748/66.387/67.157/0.582 ms
Скачиваем WireGuard для Windows с официального сайта и устанавливаем.
На сервере сгенерируем ключи для Windows-клиента:
wg genkey | tee /etc/wireguard/peer_2_windows_privatekey | wg pubkey | tee /etc/wireguard/peer_2_windows_publickey
Добавим блок Peer в файл /etc/wireguard/wg0.conf:
Как сделать VPN туннель между двумя компьютерами
Чтобы создать VPN-туннель между двумя компьютерами, вы можете использовать встроенные средства операционной системы или сторонние программы. Вот несколько способов, которые могут помочь вам создать VPN-туннель между двумя компьютерами:
1. Настройка VPN-сервера на одном компьютере и VPN-клиента на другом. На компьютере, который будет работать как VPN-сервер, вы можете настроить VPN-сервис, который позволит удаленному компьютеру подключаться к нему. На компьютере-клиенте вы можете настроить VPN-подключение к серверу, используя учетные данные и IP-адрес сервера.
2. Использование стороннего VPN-софта, который позволяет создать VPN-туннель между двумя компьютерами. Некоторые известные VPN-клиенты и серверы включают OpenVPN, PPTP и другие. Выберите подходящее решение в зависимости от вашей операционной системы и требований.
3. Настройка VPN-туннеля через маршрутизатор. Если у вас есть маршрутизатор, который поддерживает VPN-соединения, вы можете создать VPN-туннель между двумя компьютерами, используя его функции VPN. Обычно это настраивается через веб-интерфейс маршрутизатора.
В любом случае, при создании VPN-туннеля между двумя компьютерами, вам потребуется знать IP-адреса обоих компьютеров и порты, которые используются для VPN-соединения. Также имейте в виду, что создание VPN-туннеля между двумя компьютерами может быть сложным для тех, кто не имеет опыта в настройке компьютерных сетей и VPN. В таком случае, вам может потребоваться помощь специалиста или подробная инструкция.
Как сделать VPN туннель между двумя компьютерами без создания VPN сервера через Windows?
1. Откройте раздел “Сеть и интернет” в настройках вашего ПК
2. Перейдите в настройку параметров адаптера
3. Нажмите Alt и в верхнем левом углу выберите “Файл” → “Новое входящее подключение”
4. Выберите пользователя, который будет иметь право подключения к VPN сети или создайте нового и нажмите “Далее”
5. Поставьте галочку возле “Через интернет”
6. Оставьте выбранные по умолчанию протоколы и нажмите “Разрешить доступ” и “Закрыть”
7. Для подключения к созданной сети, откройте на удаленном компьютере “Центр управления сетями” и нажмите на “Создание и настройка нового подключения..”
8. Выберите “Подключение к рабочему месту”
9. Выберите “Использовать мое подключение”
10. Введите адрес ПК(устройства) на котором настроен VPN (. ) Обязательно введите dedicated IP, если устройство подключено через роутер, а на самом роутере настройте “Переброс порта” и укажите IP адрес с портом “Адрес:порт”.
11. Введите логин и пароль от вашего аккаунта VPN сервиса, после чего нажмите “Подключить”
Все готово! Теперь ваши ПК будут считать, что они находятся в общей локальной сети.
Итог
С нашим гайдом вы легко справитесь с созданием VPN туннеля между двумя компьютерами, а выбирая ZoogVPN для этой задачи вы не только сможете обмениваться файлами и документами без каких-либо ограничений на максимальной скорости, но и получите максимальную защиту ваших данных. Станьте пользователем ZoogVPN уже сейчас зарегистрировав бесплатный аккаунт по этой ссылке.
Anastasia loves creating insightful articles that cover everything valuable for readers. She always wants to provide value for the users explaining how to protect their online privacy and get real Internet freedom.