WireGuard
Работает по UDP.
Дефолтный порт - 51820/udp
Установка на сервер
Настройка на сервере
Создаем private, public ключи в /etc/wireguard/:
Даем разрешение только под root:
Проверяем название сетевого интерфейса:
Создаем конфиг wireguard-а
C таким содержимым:
[Interface]
PrivateKey = <privatekey>
Address = 10.2.4.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Info
Вместо <privatekey> нужно вставить приватный ключ из файла /etc/wireguard/privatekey.
Вместо eth0 надо указать свой сетевой интерфейс.
Address = 10.2.4.1/24 - это локальный адрес сервера в VPN сети
Разрешаем ip forwarding, чтобы могли потом прокидывать трафик через сервер в интернет:
Info
Если sysctl не будет срабатывать (
sysctl not found
), надо добавить в .bashrc или в .zshrc путь к /usr/sbin:
Запуск wireguard
Настройка доступа клиентов
Для каждого клиента надо будет генерить keys, поэтому ключи лучше именовать подходящим образом (именами друзей, например, у которых будет доступ).
И добавляем в wg0.conf:
[Peer]
PublicKey = <client_publickey>
AllowedIPs = 10.0.0.2/32
Info
Вместо <client_publickey> нужно вставить публичный ключ из файла /etc/wireguard/client_publickey.
И ниже можно задать локальный IP клиенту. С помощью этих IP клиенты внутри VPN сети смогут взаимодействовать друг с другом.
И перезагружаем wireguard service:
Настройка на клиенте
Установка wireguard:
Создание (вручную) клиентского конфига:
С таким содержимым:
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY>
Address = 10.2.4.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Info
Вместо <CLIENT-PRIVATE-KEY> нужно вставить клиентский приватный ключ с сервера из файла /etc/wireguard/client_privatekey.
Вместо <SERVER-PUBKEY> - публичный wireguard ключ сервера.
Вместо <SERVER-IP> - IP адрес wireguard сервера.Address = 10.2.4.2/32 - это адрес, который мы указывали для клиента на сервере
PersistentKeepalive = 20 означает, что каждые 20 секунд будут пинговаться сервер-клиент, чтобы проверить, что соединение активно и работает.
Как пользоваться wireguard клиентами?
Просто нужно сделать для клиента свой client_wg.conf, который мы, к примеру, делали выше для client и передать этот файл им.
Они смогут в приложениях выбрать его и всё будет работать.
Troubleshoot
Warning: /etc/wireguard/wg0.conf is world accessible
Solution:
Sauce: https://geefire.eu.org/2020/11/01/wireguard-warning-conf-is-world-accessible.html