- WireGuard
- Сервер wireguard.
- Подготовка и установка.
- Настройка сервера.
- Клиент wireguard.
- Пишем конфиг.
- Wireguard и десктоп клиент.
- Wireguard на android.
- Дополнительно.
- 21 thoughts on “ WireGuard ”
- Установка и настройка быстрого VPN WireGuard сервер
- Давайте приступим к установке # WireGuard
- Что понадобится
- Строим VPN-туннель в локальную сеть с помощью «WireGuard»
WireGuard
WireGuard — инструмент для построения виртуальных сетей. Многие называют его этаким «VPN нового поколения». Он включен в состав ядра, начиная с версии 5.6.
Заметка обновлена 27.02.2020.
В рамках этой заметки, мы запустим в работу простой WireGuard VPN сервер и настроим подключение из Linux клиента к нему. Работать мы будем в CentOS 8, но инструкция вполне подойдёт и для других дистрибутивов, разве что пакетные менеджеры и репозитории будут отличаться.
Сервер wireguard.
Подготовка и установка.
1. Для начала, подключаем репозитории EPEL и RPMFusion Free. Cтавим доступные обновления и запускаем систему с новым ядром.
2. Далее, ставим на сервер всё необходимое и собираем модуль для Wireguard. После, убеждаемся, что модуль запущен в работу:
Вывод последней команды будет примерно таким:
Настройка сервера.
3. Генерируем ключи для клиента и сервера:
В результате, здесь мы получаем четыре файла — приватный и публичный ключ для сервера, и аналогичные для клиента, которым будем подключаться.
4. Создаём конфигурационный файл для сервера /etc/wireguard/wg0.conf со следующим содержимым:
Разумеется, вместо SERVER_PRIVATE_KEY и CLIENT_PUBLIC_KEY мы прописываем ключи, из созданных ранее файлов. Далее, комментарии по конфигу:
Address — адрес виртуального интерфейса wg0 на сервере.
ListenPort — порт, на котором будет работать VPN.
AllowedIPs — виртуальные IP клиентов, которые будут подключаться к нашему серверу.
При необходимости, мы можем так же указать параметры PostUp и PostDown — команды, которые будут выполнены при включении и отключении интерфейса.
5. Включаем форвардинг пакетов:
6. Настраиваем фаервол:
7. Запускаем сервис в работу:
Клиент wireguard.
Пишем конфиг.
8. На основе сделанной настройки, пишем простой конфиг для клиента. Этот конфиг подойдёт и для десктопа, и для, например, android приложения:
В данном случае, вместо CLIENT_PRIVATE_KEY и SERVER_PUBLIC_KEY мы опять же, подставляем ключи, сгенерированные ранее, а вместо SERVER_REAL_IP прописываем IP адрес нашего сервера, на котором установлен VPN.
Wireguard и десктоп клиент.
— Создаём директорию /etc/wireguard, а в ней сохраняем наш конфигурационный файл под именем wg0-client.conf.
— Пробуем подключиться к серверу с помощью wg-quick:
Проверяем подключение, и если всё сделано верно, то весь наш трафик теперь будет проходить через VPN сервер.
Для отключения от VPN просто выполняем команду wg-quick down wg0-client:
При необходимости, мы можем управлять сервисом через systemd:
Wireguard на android.
Для использоания wireguard на android, достаточно скачать клиента из Play Market или из F-Droid репозитория, а для подключения просто выполнить импорт подготовленного wg конфига для клиента.
И, собственно, всё. Вот так, очень просто (куда проще чем тот же OpenVPN) мы можем настроить защищённый VPN туннель и использовать его в повседневной работе.
Дополнительно.
Быстрая установка.
wireguard-manager — инструмент для быстрой установки и настройки Wireguard на сервере.
wireguard-install — ещё одна реализация быстрого установщика.
Использование iptables.
Для случаев, когда в системе не оказывается firewalld (либо его не хочется ставить по какой-то причине), можно настроить обработку подключений с помощью iptables, для этого, конфиг на сервере нужно модифицировать так:
Несколько клиентов.
Для работы с несколькими клиентами, каждому из них нужно сгенерировать свои открытый и закрытый ключи. Затем, в конфиге сервера указать каждого из них. Пример такого конфига:
Просто, для истории.
В дополнение — на видео ещё один пример быстрой настройки WireGuard, но уже вручную:
21 thoughts on “ WireGuard ”
Буквально с месяц назад пробовал, понравилось. НО всегда есть одно «но»:
Не могу повесить несколько клиентов на один интерфейс сервера, работает по принципу «кто ПЕРВЫЙ встал того и тапки». остальные подключаются но с сетью не работают, даже сервер не пингуют, не говоря уже о том чтобы между собой по ssh гулять или ещё что. Может ты подскажешь как это исправить?
Хм, как появится время — протестирую это дело и отпишусь либо тут, либо как-то в отдельной заметке.
Так и не дошли руки?
Сам нашел косяк, у клиента в конфиге обязательно должна быть маска /32
Более производительный. На роутере где tinc загибался под 10 мегабитами, wireguard 80-90 давал.
Проблема в том, что он только UDP.
А почему это проблема?
Потому что в офисной сетке нашей например UDP вообще зарезан. А вот OpenVPN по TCP на 443-й порт прекрасно работает.
Возможно ли с помощью WireGuard создать VPN между
точкой с реальным IP адресом и точкой без реального IP адреса ( роутер+OpenWRT+3G/4G internet)? При этом требуется доступ к компьютерам, находящимся за роутером с OpenWRT.
как отключить логи?
Не получилось подключиться. Всё сделал по инструкции.
wg-quick up wg0-client
Warning: `/etc/wireguard/wg0-client.conf’ is world accessible
[#] ip link add wg0-client type wireguard
[#] wg setconf wg0-client /dev/fd/63
[#] ip -4 address add 10.8.0.2/32 dev wg0-client
[#] ip link set mtu 1420 up dev wg0-client
[#] mount `8.8.8.8′ /etc/resolv.conf
Error: ipv6: FIB table does not exist.
Dump terminated
[#] wg set wg0-client fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0-client table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
Возможно неправильно указываю -> Endpoint = SERVER_REAL_IP:51820
Пробывал разные внешние сервисы, но не получилось.
Что не так? Где смотреть?
У WireGuard есть одна большая проблема — если по какой-то причине отваливается сервер, то клиент всё равно пытается посылать трафик в несуществующий тоннель. Для мобилки это даже хорошо — мы уверены в том, что наше соединение защищено. Но если я использую WireGuard для подключения удалённой точки, то даже3если на этой точке есть интернет, но нет коннекта с WireGuard сервером (например, инстанс на DO попал в чёрный список), то эта точка остаётся без связи вообще до тех пор, пока не подключится снова к WireGuard или кто-то там далеко на точке не остановить wireguard клиента.
Вы пробовали делать настройки, чтобы default gateway поднимался только после установления соединения?
Чтобы этого не произошло, достаточно настроить Kill Switch.
В конфиг клиента добавляем пару строк. Покажу на примере iptables в линукс:
[Interface]
Address = 10.8.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 193.138.218.74
PostUp = iptables -I OUTPUT ! -o %i -m mark ! —mark $(wg show %i fwmark) -m addrtype ! —dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! —mark $(wg show %i fwmark) -m addrtype ! —dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! —mark $(wg show %i fwmark) -m addrtype ! —dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! —mark $(wg show %i fwmark) -m addrtype ! —dst-type LOCAL -j REJECT
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_REAL_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21
—————————————-CONF—————————————-
Примечания к конфигу:
— DNS — для примера указан non-logged DNS-сервер Mullvad. Лучшим решением будет указание собственного DNS.
— PostUp и PostDown — вот тут настраиваем KillSwitch
— CLIENT_PRIVATE_KEY и SERVER_PUBLIC_KEY — мы опять же, подставляем ключи, сгенерированные ранее,
— SERVER_REAL_IP — прописываем IP адрес нашего сервера, на котором установлен WireGuard
А как написать конфиг если у меня на серваке серый адре, на роутере белый с пробросом протов на серый и клиентом является плашет с симкой?
Здравствуйте, есть VPS установил WG (192.168.2.1) так же есть debian 10 клиент 192.128.2.2 он же шлюз в локальной сети для обхода блокировок, соединение через WG с сервером установлено, как сделать так что бы был доступ в локальную сеть 192.168.1.0/24 с сервера? Не могу разобраться с маршрутом
Здравствуйте, есть VPS установил WG (192.168.2.1) так же есть debian 10 клиент 192.128.2.2 он же шлюз (192.168.1.2) в локальной сети для обхода блокировок, соединение через WG с сервером установлено, как сделать так что бы был доступ в локальную сеть 192.168.1.0/24 с сервера? Не могу разобраться с маршрутом
Столкнулся с не критичной проблемой:
Несмотря на то, что мой хостинг провайдер находится в Англии, а по тестам DNS leaks мне выделили сервер во Франции, поисковики считают что я в Украине..
Вот и думаю, где пошаманить, чтобы играться с определением геолокации
Ребят, подскажите, пожалуйста, как сконфигурировать route, чтобы клиент не маршрутизировал трафик до одного конкретного айпишника? То есть чтобы трафик до этого шел напрямую на клиенте.
в конфиге опенвпн на клиенте я просто добавлял
route 255.255.255.255 net_gateway
У меня ANR уведомление перестало выплывать! Отметьте у себя в качестве достоинства приложения!
Установка и настройка быстрого VPN WireGuard сервер
Протоколы, которые используют VPN-сервисы , имеют свои плюсы и минусы, а скорость соединения обычно обратно пропорциональна надёжности шифрования VPN туннеля , однако потенциальные преимущества # WireGuard перевешивают все возможные минусы.
Специалисты проверили скорость работы WireGuard и выяснили, что он способен обойти большинство протоколов шифрования в том числе широко известный протокол OpenVPN .
Главное преимущество # WireGuard в том, что он сделан максимально дружелюбным в плане настройки своих клиентов, а интеграция данного протокола реализована на уровне ядра в Linux и скоро его обещают внедрить в Windows. Все это позволяет достичь очень большой скорости работы.
Следующая причина, которая объясняет высокую скорость работы, это применение быстрого и современного алгоритма шифрования, благодаря которому скорость передачи данных очень высока.
Кроме того, данный протокол очень похож на https , что позволяет обманывать системы анализа трафика DPI, установленные у Вашего провайдера и обходить эти блокировки по сигнатурам.
Давайте приступим к установке # WireGuard
Что понадобится
- Компьютер
Буду показывать на примере Windows, для других систем процесс очень похож. - 1 час
Для настройки всего софта
Карта Visa / Mastercard (можно использовать бесплатную карту c кешбеком до 3% от банка Открытие и подарком 500 рублей при регистрации на счёт)
При привязке карты спишут небольшую сумму, которая сразу вернётся к Вам на карту.
Строим 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 и выполним следующие команды:
Создадим конфигурационный файл /etc/wireguard/wg0.conf со следующим содержимым:
Параметры PostUp/PostDown содержат правила iptables, которые будут применены при запуске/остановке сервиса. Обратите внимание на название сетевого интерфейса — оно должно соответствовать общедоступному сетевому адаптеру, в моем случае это eth0. Вывести список адаптеров можно командой:
Выберите из списка тот, которому соответствует внешний IP-адрес. — заменяем содержимым файла /etc/wireguard/privatekey.
Запустим VPN-сервис и добавим его в автозагрузку:
Убедимся, что служба запустилась корректно:
Если ваш роутер поддерживает WireGuard (Zyxel KeeneticOS >=3.3, Mikrotik RouterOS >=7.1beta2, OpenWRT) — можно настроить VPN-клиент прямо на нем. Я буду использовать для этой цели сервер Ubuntu 20.04 (локальный адрес 192.168.100.7).
Первый этап настройки аналогичен конфигурации серверной части. Выполняем с правами root-пользователя:
Address = 10.0.0.2/32 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlp2s0 -j MASQUERADE [Peer] PublicKey = Endpoint = :51820 AllowedIPs = 10.0.0.0/24 PersistentKeepalive = 20
— заменяем содержимым /etc/wireguard/privatekey, — /etc/wireguard/publickey с сервера, — внешний IP-адрес сервера. Правила iptables в PostUp/PostDown необходимы для того, чтобы наш клиент выступал в роли шлюза в LAN. Указываем в правилах тот сетевой интерфейс, на который назначен локальный адрес (192.168.100.7, в моем случае это wlp2s0). Уточните его путем исполнения команды:
В параметре AllowedIPs задаются адреса, маршрутизация к которым будет осуществляться через VPN-интерфейс. В поле PersistentKeepalive — периодичность проверки доступности соединения в секундах. Запускаем службу и добавляем в автозагрузку:
На сервере добавляем в файл /etc/wireguard/wg0.conf блок:
AllowedIPs = 10.0.0.2/32, 192.168.100.0/24
— /etc/wireguard/publickey клиента. Перезапустим службу и убедимся, что все настроено корректно:
Проверим теперь с клиента:
Сборки WireGuard доступны для основных платформ: Linux, Windows, Mac, Android, FreeBSD, OpenWRT и др. Рассмотрим настройку VPN-клиента на десктопах под управлением Linux и Windows, а так же на Android-смартфоне.
На клиенте выполняем с правами root:
Конфигурационный файл /etc/wireguard/wg0.conf:
Address = 10.0.0.3/32 DNS = 8.8.8.8 [Peer] PublicKey = Endpoint = :51820 AllowedIPs = 0.0.0.0/0 # AllowedIPs = 10.0.0.0/24, 192.168.100.0/24 PersistentKeepalive = 20
— заменяем содержимым /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-туннель:
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 root@wg-peer1:/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-клиента:
Добавим блок Peer в файл /etc/wireguard/wg0.conf: