Wireguard windows server настройка

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, для этого, конфиг на сервере нужно модифицировать так:

Несколько клиентов.

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

Читайте также:  Принтер hp laserjet 1320 драйвер для windows 10
Просто, для истории.

В дополнение — на видео ещё один пример быстрой настройки 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

Читайте также:  Mac os x tiger hackintosh

—————————————-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 уведомление перестало выплывать! Отметьте у себя в качестве достоинства приложения!

Подключение по протоколу WireGuard VPN из Windows 10

Чтобы удаленно подключиться к локальной сети интернет-центра Keenetic, начиная с версии KeeneticOS 3.3 стало возможно использовать туннель WireGuard VPN.

Сначала необходимо выполнить настройку сервера WireGuard в Keenetic, которая показана в инструкции «Настройка WireGuard VPN между двумя роутерами Keenetic» , после переходите к настройке VPN-клиента.

NOTE: Важно! Если вы планируете настроить Keenetic в качестве VPN-сервера, начать необходимо с проверки того, что он имеет публичный «белый» IP-адрес, а при использовании сервиса KeenDNS, что он работает в режиме «Прямой доступ». При несоблюдении любого из этих условий подключение к такому серверу из Интернета будет невозможно.

Ниже приведем пример действий для подключения к серверу из операционной системы под управлением ОС Windows, на примере версии Windows 10 1909 (19H2).

Чтобы установить соединение к WireGuard -серверу Keenetic, в компьютере на базе ОС Windows, потребуется скачать и установить программу WireGuard с официального сайта.

1. Послу установки программы и запуска, нажимаем в нижнем левом углу на стрелку вниз напротив «Add Tunnel» — «Add empty tunnel. [Ctrl+N]».

Откроется окно настройки конфигурации подключения к удаленному WireGuard -серверу Keenetic — «Create new tunnel».

NOTE: Важно! Оставляем данное окно открытым, не закрываем его.

2. Скачиваем файл wg-client.conf к себе на компьютер, можно на Рабочий стол. Открываем в текстовом редакторе, например в Notepad++

Откроется готовая конфигурация, в которую необходимо будет ввести настройки подключаемого WireGuard -клиента Windows [Interface] и удаленного WireGuard -сервера Keenetic [Peer].

NOTE: Важно! Оставляем данное окно открытым, не закрываем его.

3. Возвращаемся к открытому окну «Create new tunnel» пункта 1 и копируем из поля «PrivateKey = » — приватный ключ WireGuard -клиента Windows в буфер обмена компьютера.

Читайте также:  Как изменить umask linux

NOTE: Важно! Оставляем данное окно открытым, не закрываем его.

4. Скопированный в буфер обмена компьютера приватный ключ WireGuard -клиента необходимо добавить в готовую конфигурацию из пункта 2 в строку «PrivateKey = «.

NOTE: Важно! Оставляем данное окно открытым, не закрываем его.

5. Настраиваем удаленное подключение на стороне ранее настроенного WireGuard-сервера.

Подключитесь к веб-конфигуратору роутера и перейдите в меню «Интернет» — «Другие подключения». Нажмите на ранее созданное WireGuard -подключение («WG-S») и добавьте «Настройки пира». Нажав на «Добавить пир» откроется поле настроек пира, в котором укажите название туннеля «wg-windows-client».

В поле «Публичный ключ» вставляем ключ из пункта номер 1, который необходимо скопировать из поля «Public key» в буфер обмена компьютера.

Окно «Create new tunnel» можно закрыть, нажимаем «Cancel».

NOTE: Важно! Оставляем окно подключения WireGuard открытым, не закрываем его.

Вставляем ключ в поле «Публичный ключ», в поле «Разрешенные подсети» указываем адрес, трафик с которого будет допущен до сервера в формате IP/bitmask — 172.16.82.6/32

В поле «Проверка активности» необходимо указать периодичность попыток проверки доступности удаленной стороны соединения. Обычно достаточно 10-15 секундного интервала между проверками. По умолчанию значение «Проверки активности» в настройках пира Keenetic указано 30 секунд.

6. Возвращаемся к настройке конфигурации wg-client.conf


Настройка [Interface] клиента:

В поле «PrivateKey» интерфейса клиента уже введем созданный ключ WireGuard -клиента Windows в пункте 4.

В поле «Addresses» интерфейса клиента указываем IP-адрес, в формате IP/bitmask — 172.16.82.6/24 (это внутренний адрес туннеля). Можно использовать другую подсеть, при этом ее следует выбрать из частного диапазона адресов и избежать наложения с другими настроенными на данных устройствах подсетями.

Настройка [Peer] сервера:

В поле «PublicKey» вставьте публичный ключ сервера, который можно скопировать в буфер обмена компьютера из настроек WireGuard в веб-интерфейсе роутера:

В поле «AllowedIPs» указываем разрешенные IP-адреса, в формате IP/bitmask — 172.16.82.1/32 (это внутренний адрес сервера) и 192.168.22.0/24 (адрес локального сегмента роутера Keenetic).

В поле «Endpoint» указываем публичный IP-адрес или доменное имя WireGuard -сервера, и порт прослушивания, на который будет устанавливать связь WireGuard -клиент.

В поле «PersistentKeepalive» указываем периодичность попыток проверки доступности удаленной стороны соединения. Обычно достаточно 10-15-секундного интервала между проверками.

Жмем сочетание клавиш Ctrl+S, либо нажимаем «Файл», «Сохранить».

7. В открытом окне настроек подключения WireGuard из пункта номер 5, нажимаем на «Import tunel(s) from file» и выбираем на Рабочем столе файл «wg-client», жмем «Открыть».

8. После добавления конфигурации «wg-client» в программу подключения WireGuard , в списке «Tunnels» появится новое подключение.

Если настройка выполнена правильно, напротив строки «Status» вы увидите зеленый индикатор.

Для проверки доступности сервера можно выполнить отправку ICMP-пакетов до IP-адреса в командной строке Windows.

Проверяем доступность веб-интерфейса сервера (в нашем примере это Keenetic с IP-адресом 192.168.22.1).

Если вам нужно, чтобы подключенные клиенты получали через данное VPN-соединение доступ в Интернет, выполните дополнительную настройку из статьи » Доступ в Интернет через WireGuard-туннель «.

Обращаем ваше внимание, что на стороне VPN-клиента в файле конфигурации wg-client.conf в разделе «[Interface]» необходимо указать DNS-сервер в поле «DNS=» (в нашем примере указан адрес DNS-сервера от Google 8.8.8.8) и добавить адресное пространство 0.0.0.0/0 в разделе AllowedIPs = :

TIP: Примечание: При условии, что в конфигурации один пир и указана разрешенная сеть «все адреса», приложение будет автоматически формировать запрещающее трафик мимо туннеля правило сетевого экрана на компьютере.

Пользователи, считающие этот материал полезным: 5 из 5

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