Установка и настройка VPN-сервера Wireguard в Debian 9.9
Введение
Wireguard - это быстрая и безопасная альтернатива другим программам VPN, таким как IPSec и OpenVPN. Преимущество Wireguard заключается в том, что он многопоточный и встроен в ядро, что означает, что вы можете достичь симметричной пропускной способности 1 Гбит / с даже на нижних конечных устройствах, что невозможно в OpenVPN. Сервер очень легкий и простой в настройке. Есть клиенты для большинства операционных систем, включая Windows.На текущий момент это один из лучших VPN который дает максимальную скорость практически равную скорости вашего интрнет соединения.
Некоторые другие преимущества Wireguard включают возможность запуска внутренних служб, таких как SSH, FTP и удаленный рабочий стол, на IP-адресе VPN вместо основного IP-адреса сервера, что уменьшает возможные векторы атак на ваш сервер. Например, вы можете включить SSH-доступ для одного пользователя на вашем общедоступном IP-адресе, а для всех остальных пользователей - только для VPN-IP.
Вы также можете туннелировать часть или весь ваш интернет-трафик через проводную сеть как VPN и легко достигать скорости более 1 Гбит / с. Если вы находитесь за NAT и не можете перенаправить порт, простой сервер Wireguard на низком уровне VPS - это хороший способ обеспечить доступ серверов, работающих на вашем компьютере, из Интернета. Мы обычно используем впс провайдера Kamatera.
Этот учебник будет посвящен установке Wireguard на сервер Debian 9.9 (Stretch).
Шаг 1 - Установка
После входа на сервер через SSH, переключитесь на пользователя root, напечатавsudo su -
.Запустите следующие команды:
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable
apt-get update
apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')
apt-get install wireguard
Building for 4.9.0-8-amd64
Building initial module for 4.9.0-8-amd64
Done.
uname -a
тем, что собирается). В противном случае вам может потребоваться перезагрузить сервер, например, если вы только что произвели dist-upgrade и не перезагружены.Шаг 2 - Конфигурация сервера
В этом руководстве предполагается, что у вас есть сервер с одним клиентом. Wireguard поддерживает столько клиентов, сколько необходимо, просто добавьте еще одного партнера в файл конфигурации wg0.conf и снова выполните шаги установки клиента на клиенте.Сначала создайте открытый и закрытый ключи на сервере:
wg genkey | tee /etc/wireguard/wg-private.key | wg pubkey > /etc/wireguard/wg-public.key
cat /etc/wireguard/wg-private.key
и cat /etc/wireguard/wg-public.key
.Этот учебник будет использоваться
wg-quick
для работы сервера. Существуют и другие методы, но с этого проще всего начать.Создайте и отредактируйте файл
/etc/wireguard/wg0.conf
в вашем любимом текстовом редакторе.Здесь
1.2.3.4
- публичный IPv4-адрес вашего сервера, 10.0.0.1
частный IPv4-адрес, используемый для VPN-сервера и 10.0.0.2
используемый для клиента. Если вам нужно больше клиентов, просто используйте другие IP-адреса ( 10.0.0.3
и т. Д.) Внутри подсети 10.0.0.0/24
.- Частный (
10.0.0.1
) IPv4 будет IP-адресом VPN сервера. Этот IP-адрес недоступен из общедоступного Интернета, и любые прослушивающие его службы будут доступны только для клиентов, подключенных к VPN. - Эту подсеть можно изменить на другие частные сети . Кроме того, вы можете использовать и пересылать общедоступные IP-адреса, если на вашем сервере есть хотя бы 3 общедоступных IPv4, но это выходит за рамки данного руководства и требует тщательного межсетевого экрана.
[Interface]
Address = 10.0.0.1/24
SaveConfig = false
ListenPort = 56
PrivateKey = PRIVATE KEY YOU GENERATED GOES HERE
[Peer]
PublicKey = NOTHING GOES HERE YET
AllowedIPs = 10.0.0.0/24, 10.0.0.2/32
PersistentKeepalive = 25
Address
это вышеупомянутый приватный IPv4. Подсеть / 24 указывает, что это будет обрабатывать IP-адреса10.0.0.1 - 10.0.0.254
.SaveConfig
не позволяет изменениям в командной строке влиять на файл конфигурации, что может вызвать проблемы в режиме wg-quick.ListenPort
это порт прослушивания вашего сервера. Это нужно будет открыть в вашем брандмауэре.PrivateKey
это закрытый ключ, сгенерированный для сервера. Открытый ключ будет выдан каждому клиенту. Практическое правило: закрытый ключ не покидает устройство, на котором он был сгенерирован, а открытый ключ - нет.
AllowedIPs
Здесь мы размещаем подсеть для наших клиентов, а также разрешенный IP-адрес для клиента. Ограничьте это по мере необходимости (например, удалите,10.0.0.0/24
если вы не хотите, чтобы каждый клиент мог общаться с другими клиентами в этой подсети).PersistentKeepalive
: Поддерживает соединение, отправляя рукопожатие каждые 25 секунд.
Шаг 3 - Настройка клиента
Повторите шаги установки до «конфигурации», если вы используете Linux на клиенте, в противном случае загрузите https://tunsafe.com/ или другой клиент для других операционных систем, таких как Windows.Создайте открытый и закрытый ключ на клиенте через тот же процесс, что и на сервере, или с помощью File -> Generate Key Pair в TunSafe. Стандартная конфигурация TunSafe поставляется с открытым / закрытым ключом, который необходимо изменить в целях безопасности, он одинаков для всех установок.
Добавьте открытый ключ, который вы только что сгенерировали, на сервер wg0.conf в разделе PublicKey партнера.
Далее вам нужно будет настроить клиент. Конфигурация очень похожа на сервер. Фактически, вы можете запустить клиент как сервер, добавив директиву ListenPort, и таким образом соединить несколько серверов.
Пример конфигурации Linux-клиента, который только туннелирует VPN-трафик
10.0.0.0/24
, а не весь интернет клиентского компьютера:[Interface]
Address = 10.0.0.2/32
SaveConfig = false
PrivateKey = PRIVATE KEY OF CLIENT GOES HERE
[Peer]
PublicKey = PUBLIC KEY OF SERVER GOES HERE
AllowedIPs = 10.0.0.0/24
Endpoint = 1.2.3.4:56
PersistentKeepalive = 25
/31
или /32
), которая туннелирует весь трафик через сервер с поддержкой IPv6:[Interface]
PrivateKey = PRIVATE KEY OF CLIENT GOES HERE
# Switch DNS server while connected
DNS = 8.8.8.8
Address = 10.0.0.2/30, 2a01:4f8:1234::2/128
[Peer]
PublicKey = PUBLIC KEY OF SERVER GOES HERE
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 1.2.3.4:56
PersistentKeepalive = 25
1.2.3.4
находится публичный IPv4-адрес вашего сервера. Удалите адреса IPv6, если вы не хотите поддерживать IPv6.Если вам нужна поддержка IPv6, вам также необходимо добавить IPv6-адрес клиента в конфигурацию сервера в AllowedIPs однорангового узла. Каждый сервер получает,
/64
так что вы можете выделить отдельный IP-адрес для вашего клиента (или меньшую подсеть). Имейте в виду, что при пересылке общедоступного IPv6 вам нужно будет правильно настроить его брандмауэр, что выходит за рамки данного руководства (например, его можно использовать как для брандмауэра на клиенте с брандмауэром Windows, так и на сервере с iptables). Можно пересылать общедоступный IPv4 аналогичным образом. Преимущество этого состоит в том, что вам не нужен NAT на стороне сервера для переадресации портов.Шаг 4 - Дальнейшая настройка сервера в особых случаях
Параметр AllowedIPs на клиенте будет указывать, какие диапазоны IP-адресов проходят через туннель, а какие - нет. Вам нужно будет настроить iptables на сервере, например, чтобы включить внешний доступ в Интернет при пересылке всего трафика (то есть0.0.0.0/0
конфигурации):echo 1 > /proc/sys/net/ipv4/ip_forward
nano /etc/sysctl.conf
net.ipv4.ip_forward = 0
на net.ipv4.ip_forward = 1
Установить пакет
iptables
и iptables-persistent
затем iptables-save > /etc/iptables/rules.v4
сохранить конфигурацию при перезагрузке:iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp1s0 -j SNAT --to-source 1.2.3.4
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
ifconfig
).Если вы хотите перенести порт вперед, подумайте:
iptables -t NAT -A PREROUTING -d 1.2.3.4/32 -i enp1s0 -p tcp -m tcp --dport 45000 -j DNAT --to-destination 10.0.0.2:48000
10.0.0.2:48000
доступной из Интернета по адресу 1.2.3.4:45000
. Обратный прокси-сервер nginx также может использоваться в качестве альтернативы proxy_pass
директиве.Шаг 5 - Включить сервер
Чтобы запустить сервер,systemctl enable wg-quick@wg0
(начать при загрузке)systemctl status/stop/start/restart wg-quick@wg0
(по мере необходимости)
Чтобы проверить, все ли работает, введите
wg
. Это отобразит вывод, такой как:interface: wg0
public key: removed
private key: (hidden)
listening port: 56
peer: removed
endpoint: 12.13.14.15:31844
allowed ips: 10.0.0.2/32, 2a01:4f8:1234::1/128
latest handshake: 11 seconds ago
transfer: 2.16 TiB received, 1.67 TiB sent
persistent keepalive: every 25 seconds
Теперь вы можете пропинговать ваш сервер / клиент через туннель (ping 10.0.0.1). Любые услуги, связанные
0.0.0.0
или 10.0.0.1
также будут доступны от ваших клиентов через VPN. Наконец, при AllowedIPs = 0.0.0.0/0
настройке весь интернет-трафик будет проходить через VPN-соединение.Чтобы защитить сервисы для VPN, либо установите их адрес привязки на VPN IP (10.0.0.1), либо ограничьте доступ
10.0.0.0/24
(например, директива AllowUsers в sshd_config: AllowUsers root@10.0.0.*
). Избегайте полной блокировки себя на сервере, делая это, и всегда оставляйте службу открытой для всех IP-адресов при внесении изменений на случай, если что-то пойдет не так. Если вы заблокируете себя, вам потребуется запросить консоль KVM в роботе и исправить ошибки.Шаг 6 - Перезагрузка конфигурационного файла (необязательно)
Чтобы полностью перезагрузить файл конфигурации, вам необходимо перезапустить сервер (это приведет к разрыву текущих подключений):systemctl restart wg-quick@wg0
Если вы просто хотите добавить клиента после обновления файла конфигурации, вы можете вместо этого выполнить:
wg addconf wg0 <(wg-quick strip wg0)
Это не нарушит существующие соединения.Шаг 7 - Устранение неисправностей
- Можно ли вообще подключиться к серверу? Тип
sudo wg
. Вы видите рукопожатие, имевшее место недавно? Если это так, вы связаны. Если нет, проверьте ваш открытый и закрытый ключи, а также правила брандмауэра. - Можно ли подключиться к серверу, но не получить доступ к Интернету в
0.0.0.0/0
конфигурации? Если вы можете пропинговать сам сервер (10.0.0.1
), это может быть проблемой iptables. Убедитесь, что вы правильно добавили правило иcat /proc/sys/net/ipv4/ip_forward
возвращаете 1. - Можете ли вы не пинговать клиента Windows? Windows блокирует ICMP по умолчанию в
10.0.0.0/8
диапазоне, поэтому вам нужно будет включить его в брандмауэре Windows. То же самое относится к любой службе, работающей на клиенте Windows. - Медленные скорости? Проверьте использование вашего процессора на клиенте и сервере. Если ваш процессор работает на максимуме, это проблема, но у вас не должно быть проблем с мульти-гигабитными скоростями на современном 4-ядерном процессоре. Попробуйте убить или арендовать другие приложения, которые могут использовать процессор. Вы не увидите Wireguard как процесс, так как он работает в ядре, но вы увидите, что его загрузка процессора отображается в виде красных полос
htop
. - Не можете получить доступ к сервису по адресу https://10.0.0.1:port? Наберите
netstat -tulpn
и проверьте, прослушивает0.0.0.0
или10.0.0.1
нет,127.0.0.1
или1.2.3.4
. - TunSafe может потребоваться перезагрузить компьютер.
- Как клиент, не можете получить доступ к тому, что работает на другом клиенте? Убедитесь, что сервер разрешает
FORWARD
между двумя клиентами в iptables / ufw. Также убедитесь, что/proc/sys/net/ipv4/ip_forward
= 1.
Заключение и дальнейшее чтение
К настоящему времени у вас должен быть работающий VPN-сервер с WireGuard, поздравляю!https://wiki.debian.org/Wireguard имеет альтернативы wg-quick и полезен для дальнейшего чтения, если вы хотите использовать systemd или / etc / network / interfaces для конфигурации.
Комментариев 0