Назад | Перейти на главную страницу

Не удается настроить WireGuard VPN

Моя цель - создать VPN, чтобы

  1. У клиентов есть статические IP-адреса.
  2. Клиенты могут общаться друг с другом и с сервером,
  3. Клиенты могут выйти в глобальный Интернет через VPN.
  4. Также я хотел бы настроить DNS и частные доменные имена (работающие с NginX).

Вот конфиг сервера:

[Interface]
Address = 10.0.0.1/24
ListenPort = 5555
PrivateKey = xxxxx

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0

И конфигурация клиента:

[Interface]
PrivateKey = xxxxx
ListenPort = 5555
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server ip>:5555

Но когда я пытаюсь загрузить конфигурацию сервера wg setconf wg0 /etc/wireguard/wg0.conf Я получаю такую ​​ошибку:

Line unrecognized: `Address=10.0.0.1/24'
Configuration parsing error

Таким образом я прокомментировал эту строку. Но это, вероятно, заставляет WG выбирать случайные IP-адреса для сервера и клиентов.

Чтобы WireGuard заработал, я также выполнил следующие команды:

ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.1/24
ip link set up dev wg0

После всего, wg команды обеспечивают следующий вывод:

interface: wg0
  public key: xxxxx
  private key: (hidden)
  listening port: 5555

peer: xxxxx
  endpoint: <my IP address>:6228
  allowed ips: 0.0.0.0/0
  latest handshake: 2 minutes, 11 seconds ago
  transfer: 26.02 KiB received, 248 B sent

С клиента (MacOS с графическим интерфейсом WireGuard) я могу подключиться, но:

Итак, как я могу достичь своих целей? А что не так с моими конфигами ??

PS. Ни то, ни другое iptables на сервере не установлены брандмауэры, так что это не может быть проблемой. Также я указал net.ipv4.ip_forward=1 & net.ipv6.conf.all.forwarding=1 в /etc/sysctl.conf.
Версии программного обеспечения. ОС есть Ubuntu 18.04.4 LTS, Ядро: 4.15.0-20-generic, РГ: wireguard-tools v1.0.20200206.


Обновить

Я удалил Address из конфигурации сервера и установите AllowedIPs = 10.0.0.2/24 в клиентском я наконец-то подключился к NginX сервера от клиента через частный IP-адрес и смог выйти в Интернет (трафик идет за пределы VPN).

Но если я установил AllowedIPs = 0.0.0.0/0 на клиенте у меня нет доступа в Интернет, хотя я все еще могу подключиться к серверу по IP-адресу VPN 10.0.0.1. Я пытался решить это с помощью ifconfig wg0 broadcast/multicast, но безуспешно. Теперь команда ip address show wg0 обеспечивает следующий вывод:

4: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.10.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet 10.10.10.1 peer 10.10.10.2/32 scope global wg0
       valid_lft forever preferred_lft forever

Кроме того, у меня нет доступа к одному клиенту с другого, думаю, это та же проблема. Как я могу исправить конфигурации WireGuard или сетевые настройки сервера, чтобы решить проблему?

Использовать wg-quick вместо того wg с файлом конфигурации, и он будет работать ;-). Вы написали, что используете напрямую wg команда, которая использует другой формат файла конфигурации, что приводит к ошибке:

Line unrecognized: `Address=10.0.0.1/24,fd86:ea04:1115::1/64'
Configuration parsing error

Что вы также можете проверить:

Трещина то Адрес строка для правильной конфигурации на сервере:

[Interface]
Address = 10.0.0.1/24
Address = fd86:ea04:1115::1/64
ListenPort = 5555
PrivateKey = xxxxx

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0

на стороне клиента также должно быть Конечная точка чтобы знать, где подключиться, а также сетевая маска будет соответствовать (быть одинаковой) со стороной сервера, поэтому в этом случае / 24:

[Interface]
PrivateKey = xxxxx
ListenPort = 5555
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <remote>:<ip>

Вы можете попробовать оба адреса в одной строке, но обязательно маска / 24 должно быть одинаковым с обеих сторон.

Ну за несколько дней, ночей и убитых серверов я решил все проблемы сам :)

  • Во-первых, хочу отметить, что wg и wg-quick утилиты по-разному обрабатывают файлы конфигурации. Так что мой wg setconf wg0 /etc/wireguard/wg0.conf не работал ожидаемым образом, и я предполагаю, что он использует старый формат конфигурации. Сейчас использую wg-quick через systemctl.

  • Во-вторых, мое добавление net.ipv4.ip_forward=1 в файл /etc/sysctl.conf не сработало, хотя я звонил systemctl daemon-reload ; systemctl restart systemd-networkd. Мне пришлось связать конфиг с ядром, используя sysctl -p /etc/sysctl.conf команда. Это позволяет одноранговым узлам общаться друг с другом и выходить в Интернет через VPN.

  • Приятно отметить, что для всех Address отмечает, что лучше использовать маску подсети из 32 бита, что означает точный IP-адрес, а не диапазон.

  • Кроме того, я настроил собственный DNS с BIND9 для создания собственного домена в сети. И NginX с проверкой IP-адреса отправителя, чтобы ограничить доступ только для клиентов VPN.

На данный момент мои конфиги следующие.

Сервер

[Interface]
Address = 10.0.0.1/32
ListenPort = 5555
PrivateKey = ___some_private_key___

# The following is needed only if you have `ufw` installed
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.1/32

Клиент

[Interface]
PrivateKey = ___some_private_key___
ListenPort = 5555
Address = 10.0.0.1/32

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.0/24
Endpoint = ___some_ip_address__:5555