Настройка сервера WireGuard
Мы начнем с установки WireGuard на машину Ubuntu и настроим ее для работы в качестве сервера. Также настроим систему для маршрутизации клиентского трафика через нее.
Установите WireGuard на Ubuntu 20.04
WireGuard доступен из репозиториев Ubuntu по умолчанию. Чтобы установить его, выполните следующие команды:
$ sudo apt update
$ sudo apt install wireguard
Это установит модуль и инструменты WireGuard.
WireGuard работает как модуль ядра.
Настройка WireGuard
Инструменты командной строки wg
и wg-quick
позволяют настраивать интерфейсы WireGuard и управлять ими.
Каждое устройство в сети WireGuard VPN должно иметь закрытый и открытый ключ. Выполните следующую команду, чтобы сгенерировать пару ключей:
$ wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Файлы будут созданы в каталоге /etc/wireguard
. Вы можете просматривать содержимое файлов с помощью cat
или less
. Закрытый ключ никогда не должен передаваться кому-либо и всегда должен храниться в безопасности.
Wireguard также поддерживает предварительный общий ключ, который добавляет дополнительный уровень криптографии с симметричным ключом. Этот ключ не является обязательным и должен быть уникальным для каждой пары одноранговых узлов.
Следующим шагом является настройка туннельного устройства, которое будет маршрутизировать трафик VPN.
Устройство можно настроить либо из командной строки с помощью команд ip
и wg
, либо путем создания файла конфигурации с помощью текстового редактора.
Создайте новый файл с именем wg0.conf
и добавьте следующее содержимое:
$ sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Интерфейс можно назвать как угодно, однако рекомендуется использовать что-то вроде include wg0
или wgvpn0
. Настройки в разделе интерфейса имеют следующее значение:
Address - разделенный запятыми список IP-адресов v4 или v6 для интерфейса
wg0
. Используйте IP-адреса из диапазона, зарезервированного для частных сетей (10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16).ListenPort - порт прослушивания.
PrivateKey - закрытый ключ, сгенерированный командой
wg genkey
. (Чтобы увидеть содержимое файла типа:sudo cat /etc/wireguard/privatekey
)SaveConfig - при значении true текущее состояние интерфейса сохраняется в файл конфигурации при завершении работы.
PostUp - Команда или сценарий, который выполняется перед запуском интерфейса. В этом примере мы используем iptables для включения маскарадинга. Это позволяет трафику покидать сервер, предоставляя VPN-клиентам доступ в Интернет.
Не забудьте заменить
ens3
после-A POSTROUTING
, чтобы оно соответствовало имени вашего общедоступного сетевого интерфейса. Вы можете легко найти интерфейс с помощью:
$ ip -o -4 route show to default | awk '{print $ 5}'
- PostDown - команда или скрипт, который выполняется перед выключением интерфейса. Правила iptables будут удалены после отключения интерфейса.
Файлы wg0.conf
и privatekey
не должны быть доступны для чтения обычным пользователям. Используйте chmod
, чтобы установить разрешения на 600
:
$ sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
После этого запустите интерфейс wg0
, используя атрибуты, указанные в файле конфигурации:
$ sudo wg-quick up wg0
Команда выдаст следующий результат:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Чтобы проверить состояние и конфигурацию интерфейса, введите:
$ sudo wg show wg0
interface: wg0
public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
private key: (hidden)
listening port: 51820
Вы также можете запустить ip a show wg0
, чтобы проверить состояние интерфейса:
$ ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
WireGuard также можно управлять с помощью Systemd.
Чтобы запустить интерфейс WireGuard во время загрузки, выполните следующую команду:
$ sudo systemctl enable wg-quick@wg0
Настройка сети сервера и брандмауэра
Для работы NAT необходимо включить переадресацию IP. Откройте файл /etc/sysctl.conf
и добавьте или раскомментируйте следующую строку:
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Сохраните файл и примените изменения:
$ sudo sysctl -p
$ net.ipv4.ip_forward = 1
Если вы используете UFW
для управления брандмауэром, вам необходимо открыть UDP-трафик на порт 51820
:
$ sudo ufw allow 51820/udp
Вот и все. Одноранговый узел Ubuntu, который будет действовать как сервер, настроен.
Настройка клиентов Linux и macOS
Инструкции по установке для всех поддерживаемых платформ доступны по адресу https://wireguard.com/install/. В системах Linux вы можете установить пакет с помощью диспетчера пакетов распространения, а в macOS - с помощью brew
.
После установки выполните следующие действия, чтобы настроить клиентское устройство.
Процесс настройки клиента Linux и macOS практически такой же, как и для сервера. Сначала сгенерируйте открытый и закрытый ключи:
$ wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Создайте файл wg0.conf
и добавьте следующее содержимое:
$ sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Настройки в разделе интерфейса имеют то же значение, что и при настройке сервера:
Address - разделенный запятыми список IP-адресов v4 или v6 для интерфейса
wg0
.PrivateKey - чтобы увидеть содержимое файла на клиентском компьютере, запустите:
sudo cat /etc/wireguard/privatekey
Одноранговый раздел содержит следующие поля:
PublicKey - открытый ключ партнера, к которому вы хотите подключиться. (Содержимое файла сервера
/etc/wireguard/publickey
).Endpoint - IP или имя хоста однорангового узла, к которому вы хотите подключиться, за которым следует двоеточие, а затем номер порта, на котором удаленный одноранговый узел прослушивает.
AllowedIPs - разделенный запятыми список IP-адресов v4 или v6, с которых разрешен входящий трафик для однорангового узла и на которые направляется исходящий трафик для этого однорангового узла. Мы используем 0.0.0.0/0, потому что мы маршрутизируем трафик и хотим, чтобы одноранговый сервер отправлял пакеты с любым исходным IP.
Если вам нужно настроить дополнительных клиентов, просто повторите те же шаги, используя другой частный IP-адрес.
Настройка клиентов Windows
Загрузите и установите пакет Windows msi с веб-сайта WireGuard.
После установки откройте приложение WireGuard и нажмите «Добавить туннель» -> «Добавить пустой туннель…», как показано на изображении ниже:
Пара открытых ключей создается автоматически и отображается на экране.
Введите имя туннеля и отредактируйте конфигурацию следующим образом:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
В разделе интерфейса добавьте новую строку для определения адреса туннеля клиента.
В одноранговом разделе добавьте следующие поля:
PublicKey - открытый ключ сервера Ubuntu (файл /etc/wireguard/publickey).
Endpoint - IP-адрес сервера Ubuntu с двоеточием и порт WireGuard (51820).
AllowedIPs - 0.0.0.0/0
После этого нажмите кнопку «Сохранить».
Добавить однорангового клиента к серверу
Добавить однорангового клиента к серверу
Последний шаг - добавить на сервер открытый ключ и IP-адрес клиента. Для этого запустите на сервере Ubuntu следующую команду:
$ sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Обязательно измените CLIENT_PUBLIC_KEY
на открытый ключ, сгенерированный на клиентском компьютере (sudo cat /etc/wireguard/publickey
), и настройте IP-адрес клиента, если он отличается. Пользователи Windows могут скопировать открытый ключ из приложения WireGuard.
После этого вернитесь на клиентский компьютер и откройте интерфейс туннелирования.
Клиенты Linux и macOS
Выполните следующую команду, чтобы открыть интерфейс:
$ sudo wg-quick up wg0
Теперь вы должны быть подключены к серверу Ubuntu, и трафик с вашей клиентской машины должен проходить через него. Проверить соединение можно с помощью:
$ sudo wg
interface: wg0
public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
private key: (hidden)
listening port: 53527
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 53 seconds ago
transfer: 3.23 KiB received, 3.50 KiB sent
Вы также можете открыть свой браузер, ввести «what is my ip», и вы должны увидеть IP-адрес своего сервера Ubuntu.
Чтобы остановить туннелирование, выключите интерфейс wg0
:
$ sudo wg-quick down wg0
Клиенты Windows
Если вы установили WireGuard в Windows, нажмите кнопку «Активировать». Как только одноранговые узлы подключены, статус туннеля изменится на Активный:
Вывод
Мы показали вам, как установить WireGuard на машину с Ubuntu 20.04 и настроить его как VPN-сервер. Эта настройка позволяет вам просматривать веб-страницы анонимно, сохраняя конфиденциальность ваших данных о трафике.