Установка WireGuard
Установка и базовая настройка WireGuard на Ubuntu
Al-Sher
Сегодня я решил написать о том, как поднять простенький VPN-сервер с использованием WireGuard. Для начала, разумеется, нам необходим сервер. Если VPN нужен не для обхода блокировок, то можно воспользоваться VDS в РФ, например, firstvds. Думаю для обхода блокировок лучше использовать что-то другое, например, Shadowsocks, который может маскироваться под https и websocket.
Следующим шагом нам необходимо установить Wireguard на сервер. Для операционной системы Ubuntu или Debian необходимо выполнить команду:
apt install wireguard
Следующим шагом создадим папку, где будем хранить конфигурационные файлы(если она вдруг не создалась автоматически при установке wireguard) и ключи для VPN. Для этого выполним команду:
mkdir /etc/wireguard/
cd /etc/wireguard/
Wireguard требует установить права доступа как 077, сразу же сделаем это:
umask 077
Теперь можно сгенерировать наши ключи. Создадим приватный и публичный ключи сервера, а также ключи для клиента:
wg genkey | tee privkey | wg pubkey > pubkey
wg genkey | tee client_privkey | wg pubkey > client_pubkey
У нас появятся четыре файла:
- privkey - приватный ключ сервера;
- pubkey - публичный ключ сервера;
- client_privkey - приватный ключ клиента;
- client_pubkey - публичный ключ клиента.
Следующим шагом необходимо написать конфигурацию сервера. Используя текстовый редактор nano создадим файл /etc/wireguard/wg0.conf со следующим содержимым:
[Interface]
Address = 10.4.72.1/24
SaveConfig = false
ListenPort = 11232
PrivateKey = PRIVKEY_SERVER
PostUp = iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu
PostUp = ip6tables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = sysctl -q -w net.ipv4.ip_forward=1
PostUp = sysctl -q -w net.ipv6.conf.all.forwarding=1
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -t mangle -D POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu
PostDown = ip6tables -t mangle -D POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu
PostDown = sysctl -q -w net.ipv4.ip_forward=0
PostDown = sysctl -q -w net.ipv6.conf.all.forwarding=0
[Peer]
PublicKey = PUBKEY_CLIENT
AllowedIPs = 10.4.72.2/32
[Peer]
PublicKey = PUBKEY_CLIENT2
AllowedIPs = 10.4.72.3/32
Группа Interface указывает правила создания сетевого интерфейса. В данной конфигурации указываем адрес 10.4.72.1/24 для нашего нового сетевого интерфейса. Флаг SaveConfig говорит о необходимости сохранить состояние сетевого интерфейса при завершении работы. В параметре ListenPort указываем прослушиваемый порт, в PrivateKey приватный ключ сервера, указанный в файле privkey. Также можно увидеть опции PostUp и PostDown. PostUp выполняется в момент поднятия интерфейса, а PostDown в момент удаления. Более подробно можно ознакомиться, например, здесь. Группа Peer указывает настройки клиентов, каждый новый Peer является отдельным клиентом. В данной конфигурации мы указываем публичный ключ клиента (файл client_pubkey), а также его внутренний IP адрес.
И создадим клиентский конфиг:
[Interface]
Address = 10.4.72.2/32
PrivateKey = PRIVKEY_CLIENT
[Peer]
PublicKey = PUBKEY_SERVER
Endpoint = SERVERIP:11232
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Тут мы уже создаем интерфейс для клиентского устройства с адресом 10.4.72.2/32. В качестве PrivateKey указываем приватный ключ клиента. В Peer нам необходимо указать данные для подключения к серверу. В качестве PublicKey указываем публичный ключ сервера. Endpoint - адрес VPN сервера. AllowedIPs - ip адреса, для которых будет использоваться VPN, использование 0.0.0.0/0 говорит о перенаправлении всего трафика через VPN. PersistentKeepalive указывает временной интервал проверки доступности VPN сервера.
Для просмотра состояния VPN сервера, необходимо выполнить следующую команду:
wg show
Данная команда выводит информацию об интерфейсе и клиентах. Клиентское приложение Wireguard можно скачать на официальном сайте. В них, кстати, также можно создавать клиентские ключ.