Wireguard linux client gui

Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух

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

Нам потребуется решить следующие задачи:

  1. Создать приватный и публичный ключи сервера
  2. Создать приватный и публичный ключи первого клиента
  3. Создать приватный и публичный ключи второго клиента
  4. Создать файл конфигурации сервера, указать в нем приватный ключ сервера и публичные ключи клиентов
  5. Создать файл конфигурации первого клиента, указать в нем приватный ключ этого клиента и публичный ключ сервера
  6. Создать файл конфигурации второго клиента, указать в нем приватный ключ этого клиента и публичный ключ сервера
  7. Скопировать файл конфигурации первого клиента на компьютер первого клиента
  8. Скопировать файл конфигурации второго клиента на компьютер второго клиента
  9. Проверить, что первый клиент может общаться с сервером
  10. Проверить, что второй клиент может общаться с сервером
  11. Обеспечить связь между первым и вторым клиентом
  12. Направить весь трафик клиентов через сервер

Установка WireGuard

В Ubuntu 20.04 получить WireGuard можно из официальных репозиториев. В более старых дистрибутивах или для получения самой свежей версии следует использовать PPA:

Устанавливаем пакет wireguard на сервере и на клиентах:

Создаем ключи сервера

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

Команда wg genkey создает приватный ключ, а команда wg pubkey — публичный ключ. Обе команды выводят сформированные ключи на экран. Для формирования публичного ключа нужен приватный ключ. А мы просто эти ключи записываем в файлы server-private.key и server-public.key .

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

Создаем ключи клиентов

Создаем ключи для первого клиента

Создаем ключи для второго клиента

Файл конфигурации сервера

Cоздаем файл конфигурации сервера, сразу в директории /etc/wireguard/ :

С точки зрения сервера AllowedIPs — это ip-адреса, которые клиенту разрешено использовать в качестве ip-адреса источника. Если клиент отправляет пакет с ip-адресом источника, которого нет в списке AllowedIPs сервера, то пакет будет просто отброшен. С другой стороны, AllowedIPs говорит серверу, какому клиенту отправлять пакеты с тем или иным ip-адресом назначения, и каким публичным ключом их шифровать.

Запуск службы сервера

Теперь все готово к запуску службы сервера, для этого можно использовать команду wg-quick или systemctl :

Добавим службу в автозагрузку

Файлы конфигурации клиентов

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

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

Запуск службы клиента

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

Теперь все готово к запуску службы:

Добавим службу в автозагрузку:

Для второго клиента все будет аналогично, так что нет смысла повторять.

Проверяем, как все работает

Выполняем ping сервера с первого клиента:

Выполняем ping сервера со второго клиента:

Читайте также:  Самоучитель linux установка настройка использование

Связь между клиентами

Сейчас клиенты отправляют в туннель только пакеты с ip-адресом назначения 10.8.0.1/32 . И принимают из туннеля только пакеты с ip-адресом источника 10.8.0.1/32 . Давайте это изменим:

А на сервере разрешим пересылку пакетов между интерфейсами. Чтобы пакеты, приходящие на виртуальный интерфейс wg0 могли с этого же интерфейса уходить.

После запуска сервера можно посмотреть правила netfilter для цепочки FORWARD таблицы filter :

После остановки сервера мы все возвращаем к значениям по умолчанию — форвардинг пакетов запрещен, политика по умолчанию для цепочки FORWARD — ACCEPT , правило пересылки пакетов удалено:

Весь трафик через сервер

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

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

Поскольку теперь весь трафик клиенты направляют в туннель, требуется указать DNS-серверы, которые им следует использовать. А чтобы wireguard мог изменить сетевые настройки клиентов, нужно установить пакет resolvconf или openresolv .

Собственно, при установке пакета wireguard было сообщение о том, что желательно установить resolvconf или openresolv :

Зачем нужен пакет resolvconf можно прочитать здесь. Без resolvconf клиент при запуске будет выдавать ошибку «resolvconf: command not found».

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

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

Сразу после запуска службы мы выполянем команды: разрешаем форвардинг пакетов между интерфейсами, разрешаем клиентам общаться между собой, разрешаем клиентам выходить в интернет и добавляем правило SNAT для интерфейса ens3 , чтобы все клиенты использовали единственный ip-адрес 123.123.123.123 . При остановке службы — действие всех этих команд отменяется.

3. Проверяем ip-адрес клиента

Все готово, перезапускаем службы сервера и клиентов, потом на любом клиенте открываем браузер и смотрим ip-адрес:

Cryptokey Routing

В основе WireGuard лежит концепция под названием Cryptokey Routining, которая работает путем связывания открытых ключей со списком ip-адресов, которые разрешены внутри туннеля. Каждый сетевой интерфейс имеет закрытый ключ и список одноранговых узлов. У каждого однорангового узла есть открытый ключ. Открытые ключи используются одноранговыми узлами для аутентификации друг друга.

Например, серверный компьютер может иметь такую ​​конфигурацию:

А клиентский компьютер может иметь более простую конфигурацию:

Получение пакетов на стороне сервера. Cервер будет принимать пакеты от клиента, если ip-адрес источника соответствует списку разрешенных ip-адресов для этого клиента. Когда сервер получил пакет от узла gN65BkIK… , после расшифровки и аутентификации, если ip-адрес источника — 10.10.10.230 , то он принимается, в противном случае — отбрасывается.

Отправление пакетов на стороне сервера. Когда сетевой интерфейс хочет отправить пакет клиенту, проверяется ip-адрес назначения этого пакета и сравниваетcя со списком разрешенных ip-адресов. Например, если сетевому интерфейсу предлагается отправить пакет с ip-адресом назначения 10.10.10.230 , он зашифрует его, используя открытый ключ клиента gN65BkIK… , а затем отправит на конечную точку этого узла.

Конечная точка представляет собой пару ip-адреса и порта хоста ip-адрес:порт в сети интернет. Сервер автоматически обновляет ip-адрес:порт клиента при получении от него аутентифицированных пакетов. Клиент, который переключается между мобильными сетями (и чей внешний ip-адрес изменяется), по-прежнему сможет получать сообщения от сервера. Поскольку конечная точка обновляется всякий раз, когда клиент отправляет аутентифицированное сообщение на сервер.

Получение пакетов на стороне клиента. У клиента есть только один узел, откуда можно получать пакеты — это сервер. Сервер может отправлять пакеты клиенту с любым ip-адресом источника (об этом говорит 0.0.0.0/0 ). При получении пакета от узла HIgo9xNz… , если он правильно расшифровывается и аутентифицируется (с любым ip-адресом источника), пакет принимается, в противном случае — отбрасывается.

Отправление пакетов на стороне клиента. Когда сетевой интерфейс хочет отправить пакет серверу, он будет шифровать пакеты с любым ip-адресом назначения (об этом говорит 0.0.0.0/0 ). Например, если сетевому интерфейсу предлагается отправить пакет с любым ip-адресом назначения, он зашифрует его, используя открытый ключ сервера HIgo9xNz… , а затем отправит на конечную точку этого узла.

Источник

Настройка WireGuard на Ubuntu 20.04

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

Читайте также:  Лицензионная наклейка windows 10 pro

В то время как OpenVPN скорее является лидером отрасли, WireGuard выглядит мощным соперником.

Что такое WireGuard?

Протокол VPN определяет, как ваши данные направляются с вашего компьютера на сервер. Разные протоколы имеют разные характеристики – т.е. некоторые из них более безопасны, чем другие и лучше подходят для разных задач.

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

Хотя существует много широко используемых протоколов VPN – SSTP, PPTP и P2TP / IPSec и многие другие – есть один более новый протокол, который выделяется на фоне остальных, WireGuard. Он станет ключевым протоколом и будущим VPN.

WireGuard, как технология VPN

Он был назван в качестве следующего поколения в безопасном VPN-туннелировании. В качестве протокола с открытым исходным кодом WireGuard представляет собой защищенный сетевой туннель на сетевом уровне – третьем уровне в модели компьютерных сетей OSI – для IPv4 и IPv6.

Используя современные криптографические протоколы, WireGuard является ультра-безопасным и очень быстро набирает обороты. Он особенно популярен среди разработчиков. Первоначально выпущенный для Linux, он теперь совместим с несколькими платформами и обеспечивает самое сильное шифрование, которое когда-либо когда-либо наблюдалось.

Что отличает WireGuard?

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

1. Он гораздо меньше

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

Напротив, код WireGuard прост и имеет около 4000 строк кода, тогда как OpenVPN имеет порядка 100 000 строк. Да и OpenVPN также требует OpenSSL, который добавляет что-то в районе 500 000 строк.

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

2. WireGuard проще в использовании

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

В то же время протоколы VPN, используемые в большинстве продуктов VPN, используют сложные протоколы туннелирования, такие как OpenVPN и IPSec. Они не только могут быть сложными и медленными в работе из-за огромного количества кода, их также сложно защитить.

WireGuard, является небольшим, легким, легко внедряемым на всех устройствах и работает в «скрытом режиме», не передавая данные.

3. Имеет шифрование следующего уровня

WireGuard использует процесс, известный как «маршрутизация криптовалюты», для защиты данных пользователей. Он работает путем соединения открытых ключей шифрования с авторизованными IP-адресами VPN-туннелей.

WireGuard также намеренно избегает использования так называемых «отраслевых стандартов» алгоритмов с присущими им недостатками в пользу новейших и самых сложных вариантов. Это включает:

  • ChaCha20 аутентифицируется с Poly13045
  • Curve25519
  • HKDF
  • Blake2s
  • SipHash24

Комбинация без параметров конфигурации наряду с относительно короткими 256-битными ключами шифрования беспокоит некоторых людей, особенно учитывая, что OpenVPN предлагает 4,906-битный RSA. Тем не менее, когда вы делаете математику, 4096-битный ключ вам нужен?

С 256-битным, вам нужно проработать 2 256 комбинаций, прежде чем взломать его. С учетом того, что большинство проблем ставит раскрытые решения на полпути, это оставляет колоссальные 2 255 возможных сбоев.

Высокие надежды на WireGuard

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

Читайте также:  Журнал подключения vpn windows

Хотя спрос на легкий и простой протокол в настоящее время низок, со временем, это изменится. Именно такие решения, как WireGuard, станут следующим «отраслевым стандартом» для VPN. WireGuard – это VPN следующего поколения.

Настройка WireGuard на Ubuntu 20.04

Установка и настройка на стороне сервера (Ubuntu 20.04 Server)

sudo su
apt install wireguard
cd /etc/wiregaurd/

# Создадим пару закрытого и открытого ключа сервера:
umask 077; wg genkey | tee server_private_key | wg pubkey > server_public_key

# Создадим пару закрытого и открытого ключа клиента:
umask 077; wg genkey | tee client1_private_key | wg pubkey > client1_public_key

# Создадим конфигурационный файлл нашего сервера и добавим в него следующие параметры:

nano wg0.conf
# Секция настройки сервера:
[Interface]
PrivateKey = server_private_key # подставьте сюда приватный ключ сервера (cat server_private_key)
Address = 10.0.0.1/24 # Внутренний ip адрес нашего сервера
ListenPort = 51194 # Порт на котором наш сервер будет принимать подключения
# Добавим правила маскарадинга, чтобы весь трафик проходил через наш сервер

# eth0 необходимо заменить на ваш сетевой интерфейс (ip route | grep default)
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

# Секция настройки клиента

# Client1
[Peer]
PublicKey = client1_public_key # Подставьте сюда публичный ключ клиента (cat client1_public_key)
AllowedIPs = 10.0.0.2/32 # внутренний ip адрес клиента (client1)

*Сохраните и закройте файл (ctrl+x, then ‘y’ and ‘enter’)

Теперь настроим сетевую инфраструктуру нашего сервера и firewall

# Открываем необходимые порт

sudo ufw allow 51194/udp # Порт сервера WireGuard
sudo ufw allow 22 # Порт OpenSSH сервера

# Включаем поддержку перенаправления трафика на уровне ядра

sudo nano /etc/sysctl.conf # Раскоментируйте параметр для включения перенаправления IPv4 траффика
net.ipv4.ip_forward=1
sudo sysctl -p # Применяем сделанные изменения

# Запускаем наш Wireguard сервер

# Добавляем его а автозагрузку

sudo systemctl enable [email protected]

Установка и настройки на стороне клиента (Ubuntu 20.04 Desktop)

sudo su
apt install wireguard
cd /etc/wireguard/
nano wg0.conf

# Секция настройки клиента client1
[Interface]
PrivateKey = client1_private_key # Скопировать значение с нашего сервера (на сервере: sudo cat /etc/wireguard/client1_private_key)
Address = 10.0.0.2/24 # ip адрес клиента client1
DNS = 8.8.8.8
# Секция настройки подключения к серверу
[Peer]
PublicKey = server_public_key # Скопировать значение с нашего сервера (на сервере: sudo cat /etc/wireguard/server_public_key)
AllowedIPs = 0.0.0.0/0 # разрешаем клиенту доступ в сеть
Endpoint = 172.105.112.120:51194 # Публичный IP адрес вашего сервера
PersistentKeepalive = 15
*Сохраните и закройте файл (ctrl+x, then ‘y’ and ‘enter’)

# Теперь можно установить соединение с нашим сервером

sudo wg-quick up wg0

# [sudo] пароль для username:
# Результат выполнения комманды будет примерно следующий:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] mount `8.8.8.8′ /etc/resolv.conf
[#] wg set wg0 fwmark 51194
[#] ip -4 route add 0.0.0.0/0 dev wg0-ideapad table 51194
[#] ip -4 rule add not fwmark 51194 table 51194
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63

# Проверим доступность нашего сервера в сети WireGuard:

ping 10.0.0.1 -c 3
# Результат выполнения комманды будет примерно следующий:
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=186 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=209 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=232 ms

— 10.8.10.1 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms

Это означает что наш сервер и клиент установили соединение и настроены корректно.

Для отключения от сервера используйте команду:

sudo wg-quick down wg0

Добавлять новых клиентов можно по аналогии с client1
Более подроную информацию ищите на официальном сайте проекта wireguard.com.

Источник: статья – MakeUseOf, настройка – iExclus1ve

Источник

Оцените статью