Переход с openvpn на wireguard для объединения сетей в одну сеть l2

Checking VPN connection

To check if the VPN works correctly, open a browser with the URL: https://www.whatismyip.com/ Or enter the search term «my ip» into the Google search.

If the connection is routed through the VPN, it should show the IP address of the WireGuard server as the public address.

If you run your own DNS server, as I do in this example, also check if DNS requests are routed through the VPN. Go to https://www.dnsleaktest.com and run the extended test. The test runs for a few seconds and displays a list of servers that answered the DNS queries. Make sure that this list only contains the IP address of your DNS server.

Read this guide about DNS leaks to learn more why you want to test for DNS leaks and it also shows you other methods for preventing leaks.


Next, we configure the VPN tunnel. This includes setting up the endpoints and exchanging the public keys.

Open the WireGuard GUI and click on Add Tunnel -> Add empty tunnel…

The software automatically creates the public/private key pair and displays it on the screen.

Give the tunnel a name and insert the following configuration. Change IP addresses and keys according to your environment.

  • PrivateKey: Private key of this client
  • Address: IP address of this client. It must be unique among all clients.
  • DNS: IP address of a DNS server. In this case, I use the DNS server running on the WireGuard server.
  • PublicKey: Public key of the server
  • AllowedIPs: Specifies what IP addresses should be routed over the VPN. is a catch-all configuration and routes everything over the VPN.
  • Endpoint: External IP address of the server and listening port. Port must match server configuration.

On the server side you need to add a section to the WireGuard configuration file ()

  • PublicKey: Public key of the Windows client
  • AllowedIPs: Specifies what IP addresses are allowed through this tunnel. This is the VPN IP address of the Windows computer.

Here a screenshot where you see the Windows client (left) and the Linux server (right) configuration.

Make sure that you exchange the correct keys, and the IP addresses are correct.

In the screenshot above, you might notice the option Block untunneled traffic. You can enable this option when your configuration has precisely one section and is set to a catch-all address.

If the option is enabled the WireGuard client adds Windows Firewall rules to block all traffic that is neither to nor from the tunnel interface.

As mentioned before, I use this configuration to route all IP traffic through the VPN, so it makes sense to enable this option to prevent accidentally sending IP packets outside the VPN.

If you use WireGuard for connection to a private network, like a company LAN or your home network, you don’t enable this option and configure so that only IP addresses of your private network are routed through the VPN.

You should now be able to activate the VPN connection. Click on Activate.

After a few seconds, the status should change to Active

If that’s not the case, check the Log tab and double-check the client and server configuration.

Deactivate closes the VPN connection.

Cryptokey Routing

At the heart of WireGuard is a concept called Cryptokey Routing, which works by associating public keys with a list of tunnel IP addresses that are allowed inside the tunnel. Each network interface has a private key and a list of peers. Each peer has a public key. Public keys are short and simple, and are used by peers to authenticate each other. They can be passed around for use in configuration files by any out-of-band method, similar to how one might send their SSH public key to a friend for access to a shell server.

For example, a server computer might have this configuration:

And a client computer might have this simpler configuration:

In the server configuration, each peer (a client) will be able to send packets to the network interface with a source IP matching his corresponding list of allowed IPs. For example, when a packet is received by the server from peer , after being decrypted and authenticated, if its source IP is, then it’s allowed onto the interface; otherwise it’s dropped.

In the server configuration, when the network interface wants to send a packet to a peer (a client), it looks at that packet’s destination IP and compares it to each peer’s list of allowed IPs to see which peer to send it to. For example, if the network interface is asked to send a packet with a destination IP of, it will encrypt it using the public key of peer , and then send it to that peer’s most recent Internet endpoint.

In the client configuration, its single peer (the server) will be able to send packets to the network interface with any source IP (since is a wildcard). For example, when a packet is received from peer , if it decrypts and authenticates correctly, with any source IP, then it’s allowed onto the interface; otherwise it’s dropped.

In the client configuration, when the network interface wants to send a packet to its single peer (the server), it will encrypt packets for the single peer with any destination IP address (since is a wildcard). For example, if the network interface is asked to send a packet with any destination IP, it will encrypt it using the public key of the single peer , and then send it to the single peer’s most recent Internet endpoint.

In other words, when sending packets, the list of allowed IPs behaves as a sort of routing table, and when receiving packets, the list of allowed IPs behaves as a sort of access control list.

This is what we call a Cryptokey Routing Table: the simple association of public keys and allowed IPs.

Any combination of IPv4 and IPv6 can be used, for any of the fields. WireGuard is fully capable of encapsulating one inside the other if necessary.

Because all packets sent on the WireGuard interface are encrypted and authenticated, and because there is such a tight coupling between the identity of a peer and the allowed IP address of a peer, system administrators do not need complicated firewall extensions, such as in the case of IPsec, but rather they can simply match on «is it from this IP? on this interface?», and be assured that it is a secure and authentic packet. This greatly simplifies network management and access control, and provides a great deal more assurance that your iptables rules are actually doing what you intended for them to do.

Настройка клиента

Для установки модулей и утилит WireGuard выполните:

emerge net-vpn/wireguard-tools net-vpn/wireguard-modules

Генерация ключей

Перейдите в директорию настроек WireGuard:

cd /etc/wireguard

Выполните генерацию закрытого и открытого ключей:

wg genkey | tee privkey | wg pubkey > publickey

Выведите публичный и приватный ключи:

tail publickey privkey

==> publickey <==

==> privkey <==

Конфигурация туннеля

Отредактируйте конфигурационный файл на клиенте, указав в нём

  • IP адрес сетевого интерфейса клиента;
  • порт, по которому будет происходить подключение;
  • приватный ключ, сгенерированный на стороне клиента (его содержимое).

Например, у клиента IP адрес, порт подключения 51820. Тогда конфиг будет выглядеть следующим образом:


Address =
# Закрытый ключ клиента
PrivateKey = gFDdeXHCIFEY5t4Tn3ETiZba/ElCxEIj1W8wX/YFVE4=

# Открытый ключ сервера
PublicKey = ACMHojZjwV616cIsToFrQowXMJRxwEThFoEsvJnL/QM=
AllowedIPs = .0.0.0/0
# Внешний ip адрес сервера и порт для подключения
Endpoint = wg.example.org:51820
PersistentKeepalive = 20

Исключение частных сетей

Для исключения частных сетей из маршрутизации через туннель, утановите в AllowedIPs вместо следующие значения:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Настройте права доступа к конфигурационному файлу и ключам:

chmod 600 wg0.conf privkey publickey

Запуск туннеля до сервера

Добавьте службу WireGuard в автозагрузку:

rc-update add wireguard

Запустите службу WireGuard:

/etc/init.d/wireguard start

Проверить подключение на стороне клиента можно командой , либо посмотрев внешний IP адрес с компьютера клиента:

dig +short myip.opendns.com @resolver1.opendns.com

Посмотреть информацию о подключении можно командой:


interface: wg0
public key: 6BfFNvPQbHKKDENJMRGXu0vVYaOsfEBxFpweNGLvU3Q=
  private key: (hidden)
  listening port: 45741
  fwmark: 0xca6c

peer: EDECjzNvTRsuuxiPD8VTS7N8cmcJ1fUIaANUdrOnbXM=
  allowed ips:
  latest handshake: 1 minute, 40 seconds ago
  transfer: 2.37 MiB received, 833.84 KiB sent
  persistent keepalive: every 20 seconds

Особенности WireGuard VPN

WireGuard VPN это программное обеспечение для создать виртуальную частную сеть (VPN) чрезвычайно прост в настройке , очень быстро (быстрее, чем IPsec и OpenVPN) и использует самая современная криптография по умолчанию , без необходимости выбирать между различными алгоритмами симметричного шифрования, асимметричным и хешированием. Цель WireGuard VPN состоит в том, чтобы стать стандартом, и для большего числа домашних пользователей и предприятий, чтобы начать использовать его, вместо использования IPsec или популярного OpenVPN, которые более сложны в настройке и медленнее. Это программное обеспечение предназначено для использования всеми пользователями, как для домашних пользователей, так и для суперкомпьютеров.

С WireGuard VPN нет необходимости управлять соединениями беспокоиться о состоянии самой виртуальной частной сети, управлять процессами или знать, что находится под программным обеспечением, чтобы оно работало, подобно IPsec, где часто необходимо просматривать журналы и исследовать происходящее. Другая сила в том, что конфигурация чрезвычайно проста, но очень мощна.

Этот Программное обеспечение L3 VPN то есть использует только туннелирование , это не происходит как OpenVPN, где у нас есть возможность работать в транспортном режиме или туннельном режиме. В этом случае мы всегда будем использовать туннельный режим, кроме того, он совместим с обоими Сети IPv4 и сети IPv6 Кроме того, он может инкапсулировать пакеты IPv4 в IPv6 и наоборот. Протокол транспортного уровня, используемый WireGuard: UDP Таким образом, нам нужно будет открыть определенный порт (чтобы его можно было изменить) в нашем маршрутизаторе, который выполняет NAT.

Совместимость с операционными системами

Это новое программное обеспечение VPN было впервые выпущено для Linux Ядро, но это кросс-платформенной , поскольку он совместим с Windows, Linux, MacOS, FreeBSD, Android , а также Ios операционные системы , Одной из сильных сторон этого программного обеспечения является то, что конфигурация клиента и сервера в разных операционных системах одинакова, используется один и тот же синтаксис, поэтому вы можете настроить сервер и клиенты в Linux, а затем «передать» конфигурацию другим устройствам с помощью другие операционные системы внутри.

Криптография используется

При использовании протоколов IPsec и OpenVPN необходимо, чтобы и клиенты, и сервер «согласовали» используемые криптографические протоколы как на этапе 1 и этапе 2 (IPsec), так и в канале управления и передачи данных (OpenVPN). ), иначе соединение не будет установлено правильно. WireGuard предоставляет весь криптографический «пакет» , обеспечивая связь без необходимости выбирать что-либо. Если в какой-то момент один из криптографических протоколов, используемых этой VPN, считается небезопасным, это так же просто, как запуск второй версии WireGuard с новым протоколом, который не имеет изъянов безопасности, и между клиентами и сервером он будет указали, что используют «версию 2», будучи полностью прозрачными для нас.

Еще одна очень важная деталь заключается в том, что этот VPN использует очень маленький исходный код , По сравнению со StrongSwan или OpenVPN очень мало строк кода, поэтому аудит может быть выполнен за очень короткое время, также будет легче найти возможные уязвимости или недостатки безопасности. С меньшим количеством строк кода поверхность возможной атаки на программирование VPN также становится меньше.

WireGuard VPN в настоящее время использует ChaCha20 для симметричного шифрования, аутентифицируется с Poly1305 , используя конструкцию AEAD. Он также использует Curve25519 для ECDH, BLAKE2 для хеширования, SipHash24 для хеш-таблица ключи и HKDF для получения ключа, что означает, что мы используем самые современные криптографические алгоритмы с целью обеспечения максимальной безопасности и производительности.

Поддержка роуминга и Kill Switch

Это программное обеспечение предназначено для бродить легко и быстро , если наше устройство меняет сети и логически меняет общедоступный IP-адрес, например, когда мы переходим из сети Wi-Fi и сети 4G / LTE нашего оператора, VPN-соединение будет отменено, поскольку они быстро повторно аутентифицируются с помощью VPN сервер, так что мы всегда будем подключены к VPN.

Мы также можем включить Kill-Switch на устройстве таким образом, если VPN-соединение будет прервано, само программное обеспечение также будет отвечать за прерывание всего сетевого трафика до тех пор, пока VPN-соединение не будет восстановлено, чтобы не было навигации без защиты, которую нам предоставляет эта VPN.

Настройка WireGuard для Windows

Прежде всего, вам нужно понять, что такое VPN . VPN – это безопасный туннель между двумя точками, который шифрует информацию при ее передаче в сети. Это уровень безопасности, который нужен каждому.

Установить WireGuard для Windows довольно просто. Мы шаг за шагом проведем вас через весь процесс.

Шаг 1. Загрузка и установка WireGuard

Вам просто нужно перейти на сайт WireGuard , нажать кнопку « Установка» в верхнем левом углу страницы и загрузить установщик клиента WireGuard для Windows.

Затем вам нужно будет открыть файл .exe и предоставить ему права администратора. Это выберет самую последнюю версию для вашего оборудования, загрузит и установит ее.

Если это не работает по какой-либо причине или вы просто предпочитаете загрузить файл .msi самостоятельно, вы можете нажать кнопку « Обзор MSI» прямо под кнопкой « Загрузить установщик Windows» и выбрать тот, который подходит для вашего оборудования. Запустив этот файл, вы установите WireGuard на свой компьютер.

Шаг 2: настройка Windows WireGuard

Теперь вам нужно настроить VPN-туннель. Вам нужно будет предоставить конечные точки (внутренний IP-адрес вашего ПК и внешний IP-адрес вашего VPS) для туннеля и обмена открытыми ключами.

Откройте клиент WireGuard и нажмите Добавить туннель > Добавить пустой туннель .

Клиент WireGuard для Windows автоматически создает открытый и закрытый ключи, отображая их на экране.

Назовите туннель, а затем напишите следующую конфигурацию, изменив IP-адреса и ключи соответственно:

  • PrivateKey: закрытый ключ, предоставляемый вам клиентом WireGuard Windows.
  • Адрес: Ваш внутренний IP-адрес.
  • DNS: IP-адрес DNS-сервера.
  • PublicKey: открытый ключ VPS.
  • AllowedIPs: здесь вы указываете, какие IP-адреса будут маршрутизироваться через VPN. Конфигурация «» улавливает весь трафик, направляя его через VPN.
  • Конечная точка внешний IP-адрес и порт прослушивания VPS. Порт должен соответствовать конфигурации сервера ListenPort.

Шаг 3: Настройка сервера WireGuard

На другом конце туннеля, который вы собираетесь создать, вам нужно добавить раздел в файл конфигурации WireGuard:

  • PublicKey: открытый ключ, предоставляемый клиентом Windows WireGuard VPN.
  • Разрешенные IP-адреса: указывает, какие IP-адреса могут проходить через этот туннель. Здесь вы вводите свой внутренний IP-адрес.

Шаг 4. Заблокируйте нетуннелированный трафик

Вы также можете поставить галочку напротив опции « Блокировать весь нетуннелированный трафик» . Включив эту опцию, клиент WireGuard Windows добавляет правила брандмауэра и блокирует весь трафик, который не проходит через туннель.

Однако вы можете включить эту опцию, только если в вашей конфигурации есть только один раздел и для AllowedIPs установлено значение «».

Шаг 5: активируйте WireGuard

К настоящему времени вы должны быть в состоянии активировать VPN. Просто нажмите кнопку « Активировать» , и через несколько секунд статус туннеля должен измениться на « Активный» .

Однако если что-то пойдет не так, и вы не можете активировать туннель, проверьте вкладку « Журнал » и убедитесь, что клиент WireGuard Windows и конфигурация сервера совпадают.

Шаг 6. Убедитесь, что VPN работает

Чтобы проверить, правильно ли работает ваш VPN, просто введите «какой у меня IP» в Google. IP-адрес вашего VPS должен отображаться в первом результате поиска как ваш общедоступный IP-адрес.

Сервер wireguard.

Подготовка и установка.

1. Для начала, подключаем репозитории EPEL и RPMFusion Free. Cтавим доступные обновления и запускаем систему с новым ядром.

# dnf install epel-release
# dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
# dnf clean all; dnf update;
# reboot

2. Далее, ставим на сервер всё необходимое и собираем модуль для Wireguard. После, убеждаемся, что модуль запущен в работу:

# dnf install akmod-wireguard wireguard
# akmods --force
# modprobe wireguard && lsmod | grep wireguard

Вывод последней команды будет примерно таким:

# modprobe wireguard && lsmod | grep wireguard
wireguard 229376 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard

Настройка сервера.

3. Генерируем ключи для клиента и сервера:

# mkdir ~/wireguard; cd ~/wireguard
# wg genkey | tee server_private_key | wg pubkey > server_public_key
# wg genkey | tee client_private_key | wg pubkey > client_public_key
# chmod 600 ./*_private_key

В результате, здесь мы получаем четыре файла — приватный и публичный ключ для сервера, и аналогичные для клиента, которым будем подключаться.

4. Создаём конфигурационный файл для сервера /etc/wireguard/wg0.conf со следующим содержимым:

Address =
ListenPort = 35053

AllowedIPs =

Разумеется, вместо SERVER_PRIVATE_KEY и CLIENT_PUBLIC_KEY мы прописываем ключи, из созданных ранее файлов. Далее, комментарии по конфигу:

Address — адрес виртуального интерфейса wg0 на сервере.ListenPort — порт, на котором будет работать VPN.AllowedIPs — виртуальные IP клиентов, которые будут подключаться к нашему серверу.

При необходимости, мы можем так же указать параметры PostUp и PostDown — команды, которые будут выполнены при включении и отключении интерфейса.

5. Включаем форвардинг пакетов:

# cat /etc/sysctl.conf 
net.ipv4.ip_forward = 1
# sysctl -p

6. Настраиваем фаервол:

# firewall-cmd --permanent --zone=public --add-port=35053/udp
# firewall-cmd --permanent --zone=public --add-masquerade
# firewall-cmd --reload

7. Запускаем сервис в работу:

# systemctl enable [email protected]
# systemctl restart [email protected]

Часть 1: Предыстория

В качестве протокола для реализации этой задачи изначально был выбран OpenVPN, так как, во-первых, он может создавать устройство tap, которое без проблем добавляется в мост, а во-вторых, OpenVPN поддерживает работу по протоколу TCP, что было также немаловажно, ведь ни в одной из квартир не имелось выделенного IP-адреса, а использовать STUN мне не удалось, так как мой провайдер почему-то блокирует входящие подключения по протоколу UDP из своих сетей, в то время как протокол TCP позволял мне пробросить порт VPN-сервера на арендуемый VPS при помощи SSH. Да, такой подход дает большую нагрузку, так как данные шифруются дважды, но вводить VPS в свою частную сеть я не захотел, так как оставался риск получения третьими лицами контроля над ним, следовательно, иметь в домашней сети такое устройство являлось крайне нежелательным и было решено заплатить за безопасность большим оверхедом

Для проброса порта на роутере, на котором планировалось развернуть сервер, была использована программа sshtunnel. Описывать тонкости ее конфигурации не буду — это делается достаточно легко, просто отмечу, что ее задачей был проброс TCP-порта 1194 с роутера на VPS. Далее был настроен сервер OpenVPN на устройстве tap0, которое заводилось в мост br-lan. Проверив подключение к только что созданному серверу с ноутбука — стало понятно, что идея с пробросом порта себя оправдала и мой ноутбук стал членом сети роутера, хотя физически в ней не находился.

Дело оставалось за малым: нужно было распределить IP-адреса в разных квартирах так, чтобы они не конфликтовали и настроить маршрутизаторы в качестве OpenVPN-клиентов. Были выбраны такие IP-адреса маршрутизаторов и диапазоны DHCP-серверов:

  • с диапазоном для сервера
  • с диапазоном для маршрутизатора в квартире №2
  • с диапазоном для маршрутизатора в квартире №3

Также было необходимо назначить именно эти адреса для маршрутизаторов-клиентов OpenVPN-сервера, путем добавления в его конфигурацию строчки:

и добавлением следующих строк в файл /etc/openvpn/ipp.txt:

где flat1_id и flat2_id — это имена устройств, указываемые при создании сертификатов для подключения к OpenVPN

Далее на роутерах были настроены OpenVPN-клиенты, устройства tap0 на обоих были занесены в мост br-lan. На этом этапе казалось, что все в порядке, так как все три сети видят друг друга и работают как единое целое. Однако, выяснилась не очень приятная деталь: иногда устройства могли получить IP-адрес не от своего маршрутизатора, со всеми вытекающими последствиями. По какой-то причине, маршрутизатор в какой-то из квартир не успевал ответить вовремя на DHCPDISCOVER и устройство получало не свой адрес. Я понял, что мне нужно отфильтровать такие запросы в tap0 на каждом из маршрутизаторов, но, как выяснилось, iptables не может работать с устройством, если оно является частью моста и мне на помощь должен прийти ebtables. К моему сожалению, в моих прошивках его не оказалось и пришлось пересобирать образы для каждого устройства. Сделав это и добавив такие строки в /etc/rc.local каждого маршрутизатора проблема была решена:

Такая конфигурация просуществовала на протяжении трех лет.

Настройка сервера WireGuard

Мы начнем с установки WireGuard на машину Ubuntu и настроим его для работы в качестве сервера. Мы также настроим систему для маршрутизации клиентского трафика через нее.

Установите WireGuard на Ubuntu 20.04

WireGuard доступен из репозиториев Ubuntu по умолчанию. Чтобы установить его, выполните следующие команды:

Это установит модуль и инструменты WireGuard.

WireGuard работает как модуль ядра.

Настройка WireGuard

В и инструмент командной строки позволяют настроить и управлять интерфейсами WireGuard.

Каждое устройство в сети WireGuard VPN должно иметь закрытый и открытый ключ. Выполните следующую команду, чтобы сгенерировать пару ключей:

Файлы будут созданы в каталоге . Вы можете просматривать содержимое файлов с помощью или . Закрытый ключ никогда не должен передаваться кому-либо и всегда должен храниться в безопасности.

Wireguard также поддерживает предварительный общий ключ, который добавляет дополнительный уровень криптографии с симметричным ключом. Этот ключ не является обязательным и должен быть уникальным для каждой пары одноранговых узлов.

Следующим шагом является настройка туннельного устройства, которое будет маршрутизировать трафик VPN.

Устройство можно настроить либо из командной строки с помощью команд и , либо путем создания файла конфигурации с помощью текстового редактора.

Создайте новый файл с именем и добавьте следующее содержимое:


Интерфейс можно назвать как угодно, однако рекомендуется использовать что-то вроде include или . Настройки в разделе интерфейса имеют следующее значение:

  • Адрес — разделенный запятыми список IP-адресов v4 или v6 для интерфейса . Используйте IP-адреса из диапазона, зарезервированного для частных сетей (, или

  • ListenPort — порт прослушивания.

  • PrivateKey — закрытый ключ, сгенерированный командой . (Чтобы увидеть содержимое файла типа: )

  • SaveConfig — при значении true текущее состояние интерфейса сохраняется в файл конфигурации при завершении работы.

  • PostUp — Команда или сценарий, который выполняется перед запуском интерфейса. В этом примере мы используем iptables для включения маскарадинга. Это позволяет трафику покидать сервер, предоставляя VPN-клиентам доступ в Интернет.

    Не забудьте заменить после чтобы оно соответствовало имени вашего общедоступного сетевого интерфейса. Вы можете легко найти интерфейс с помощью:

  • PostDown — команда или скрипт, который выполняется перед выключением интерфейса. Правила iptables будут удалены после отключения интерфейса.

и не должны быть доступны для чтения обычным пользователям. Используйте чтобы установить разрешения на :

После этого интерфейс , используя атрибуты, указанные в файле конфигурации:

Команда выдаст следующий результат:

Чтобы проверить состояние и конфигурацию интерфейса, введите:

Вы также можете запустить чтобы проверить состояние интерфейса:

WireGuard также можно управлять с помощью Systemd.

Чтобы запустить интерфейс WireGuard во время загрузки, выполните следующую команду:

Сеть сервера и настройка брандмауэра

Для работы NAT необходимо включить переадресацию IP. Откройте и добавьте или раскомментируйте следующую строку:


Сохраните файл и примените изменения:

Если вы используете UFW для управления брандмауэром, вам необходимо открыть UDP-трафик на порт :

Вот и все. Одноранговый узел Ubuntu, который будет действовать как сервер, настроен.

( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: