- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка WireGuard
- Создаем ключи сервера
- Создаем ключи клиентов
- Файл конфигурации сервера
- Запуск службы сервера
- Файлы конфигурации клиентов
- Запуск службы клиента
- Проверяем, как все работает
- Связь между клиентами
- Весь трафик через сервер
- 1. Настройка клиентов
- 2. Настройка сервера
- 3. Проверяем ip-адрес клиента
- Cryptokey Routing
- Настройка WireGuard на Ubuntu 20.04
- Что такое WireGuard?
- WireGuard, как технология VPN
- Что отличает WireGuard?
- 1. Он гораздо меньше
- 2. WireGuard проще в использовании
- 3. Имеет шифрование следующего уровня
- Высокие надежды на WireGuard
- Настройка WireGuard на Ubuntu 20.04
Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
WireGuard — это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену других VPN решений. Проблема прочих VPN решений в том, что их тяжело правильно настроить и дорого обслуживать. Преимущества WireGuard — простота использования, современная криптография, компактный читаемый код и высокая производительность.
Нам потребуется решить следующие задачи:
- Создать приватный и публичный ключи сервера
- Создать приватный и публичный ключи первого клиента
- Создать приватный и публичный ключи второго клиента
- Создать файл конфигурации сервера, указать в нем приватный ключ сервера и публичные ключи клиентов
- Создать файл конфигурации первого клиента, указать в нем приватный ключ этого клиента и публичный ключ сервера
- Создать файл конфигурации второго клиента, указать в нем приватный ключ этого клиента и публичный ключ сервера
- Скопировать файл конфигурации первого клиента на компьютер первого клиента
- Скопировать файл конфигурации второго клиента на компьютер второго клиента
- Проверить, что первый клиент может общаться с сервером
- Проверить, что второй клиент может общаться с сервером
- Обеспечить связь между первым и вторым клиентом
- Направить весь трафик клиентов через сервер
Установка 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 сервера со второго клиента:
Связь между клиентами
Сейчас клиенты отправляют в туннель только пакеты с 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, легко упустить из виду то, что является одним из наиболее важных: используемые протоколы и методы шифрования.
В то время как 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, велик. Они быстрые, безопасные и широко доступные. Как долго они могут оставаться подходящими, особенно когда технологии становится все умнее и все больше людей начинают работать в интернете, неизвестно.
Хотя спрос на легкий и простой протокол в настоящее время низок, со временем, это изменится. Именно такие решения, как 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
Источник