Рейтинг:1

Не удается установить VPN-соединение s2s между AWS EC2 и общедоступным облаком OVH с помощью WireGuard

флаг gb

Я не могу установить VPN-соединение между экземпляром AWS EC2 и общедоступным облаком OVH. В /var/журнал/системный журнал ошибок нет, просто немного информации о WG-быстро такие операции, как добавление маршрутизации и т. д.

Экземпляр AWS EC2:

  • ОПЕРАЦИОННЫЕ СИСТЕМЫ: Убунту 20.04.2 ЛТС

  • Внутренний IP-адрес: напр. 10.0.22.22/16 энс4

  • Общедоступный IP-адрес: напр. 123.123.123.123/32 общедоступный интерфейс авс

  • Порт 12345/удп и 12345/TCP открыт через Группа безопасности

  • Конфигурация:
    /etc/wireguard/wg0.conf:

    [Интерфейс]
    Адрес = 10.10.0.1/24
    Сохранение конфигурации = ложь
    PrivateKey = <aws-закрытый ключ>
    Порт прослушивания = 12345
    PostUp = iptables -A FORWARD -i %i -j ПРИНЯТЬ; iptables -A FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE;  
    PostDown = iptables -D FORWARD -i %i -j ПРИНЯТЬ; iptables -D FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -D POSTROUTING -o ens4 -j MASQUERADE;
    
    [Вглядеться]
    PublicKey = <ovh-открытый-ключ>
    Разрешенные IP-адреса = 10.10.0.2/24, 192.168.10.0/16
    Конечная точка = 321.321.321.321:12345
    

Экземпляр общедоступного облака OVH:

  • ОПЕРАЦИОННЫЕ СИСТЕМЫ: Убунту 21.04

  • Внутренний IP-адрес: напр. 192.168.10.100/16 enp0s2

  • Общедоступный IP-адрес: напр. 321.321.321.321/32 enp0s1

  • Порт 12345/удп и 12345/TCP открыт через уфв

  • Конфигурация:
    /etc/wireguard/wg0.conf:

    [Интерфейс]
    Адрес = 10.10.0.2/24
    Сохранение конфигурации = ложь
    PrivateKey = <ovh-закрытый ключ>
    Порт прослушивания = 12345
    PostUp = iptables -A FORWARD -i %i -j ПРИНЯТЬ; iptables -A FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -A POSTROUTING -o enp0s1 -j MASQUERADE;  
    PostDown = iptables -D FORWARD -i %i -j ПРИНЯТЬ; iptables -D FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -D POSTROUTING -o enp0s1 -j MASQUERADE;
    
    [Вглядеться]
    PublicKey = <открытый-ключ aws>
    Разрешенные IP-адреса = 10.10.0.1/24, 10.0.0.0/16
    Конечная точка = 123.123.123.123:12345
    

Оба экземпляра:

  • сеть.ipv4.ip_forward=1 в /etc/sysctl.conf
  • команда: wg-быстро /etc/wireguard/wg0.conf
  • оба работают и создали WG0 интерфейсы с IP-адресами из WG0.conf

Резюме:

  • завиток чтобы приложение прослушивало открытый порт 80/TCP не работает в обе стороны.

Я что-то пропустил? Как я могу отладить это? Прочитал несколько статей, но так и не понял.

ОБНОВИТЬ:

Связь работает после модификации /etc/wireguard/wg0.conf:
от Разрешенные IP-адреса = 10.10.0.x/24, (...) к Разрешенные IP-адреса = 10.10.0.x/32, (...)
как предложил @Tom Yan.

Но я борюсь с маршрутизацией. Вот как это выглядит с эхо-запросами на другие серверы, которые находятся в тех же сетях, что и VPN-серверы.

В АМС Я добавил в таблицу маршрутизации правило:
192.168.10.0/16 с помощью AWS-VPN-интерфейс

В OVH-какой-то экземпляр я побежал:
IP-маршрут добавить 10.0.0.0/16 через 192.168.10.100 dev eno4

Итог пинга:

OVH-VPN -> AWS-VPN OK
OVH-VPN -> Тайм-аут AWS-некоторого экземпляра
OVH-некоторый экземпляр -> AWS-VPN OK
OVH-некоторый-экземпляр -> Тайм-аут AWS-некоторого-экземпляра

AWS-VPN -> OVH-VPN ОК
AWS-VPN -> OVH-некоторый экземпляр OK
AWS-некоторый экземпляр -> тайм-аут OVH-VPN
AWS-некоторый-экземпляр -> тайм-аут OVH-некоторого-экземпляра

В логах вижу только информацию:

$: dmesg -wH
[20 июля, 13:40] wireguard: wg0: получение пакета подтверждения активности от узла 5 (123.123.123.123:12345)

IPTables и маршрутизация

AWS-VPN:

$: iptables-сохранить
-P ВВОД ПРИНЯТЬ
-P ВПЕРЕД ПРИНЯТЬ
-P ВЫВОД ПРИНЯТЬ
-A ВПЕРЕД -i wg0 -j ПРИНЯТЬ
-A ВПЕРЕД -o wg0 -j ПРИНЯТЬ

$: IP-маршрут
по умолчанию через 10.0.22.1 dev ens4 proto dhcp src 10.0.22.22 метрика 100 
10.0.22.0/19 dev ens4 ссылка на область ядра proto src 10.0.22.22 
10.0.22.1 dev ens4 proto dhcp scope link src 10.0.22.22 метрика 100 
10.10.0.2 ссылка на область dev wg0 
Ссылка на область действия 192.168.10.0/16 dev wg0 

### Правила панели консоли AWS для сервера AWS-VPN
Пользовательский TCP TCP 12345 321.321.321.321/32
Пользовательский UDP UDP 12345 321.321.321.321/32
Весь трафик Все Все 321.321.321.321/32
Весь трафик Все Все 10.0.0.0/16
Весь трафик Все Все 192.168.10.0/16
Весь трафик Все Все 10.10.0.2/32

ОВХ-VPN:

$: iptables-сохранить
*фильтр
:ВВОД ПРИНЯТЬ [26612:55893110]
:ВПЕРЕД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТ [34036:3715836]
-A ВПЕРЕД -i wg0 -j ПРИНЯТЬ
-A ВПЕРЕД -o wg0 -j ПРИНЯТЬ
СОВЕРШИТЬ
*натуральный
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]
:ВВОД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТЬ [0:0]
:ОТПРАВКА ПРИНЯТИЯ [69:5450]
-A РАЗМЕЩЕНИЕ -o enp0s1 -j МАСКАРАД
СОВЕРШИТЬ

$: IP-маршрут
по умолчанию через 321.321.321.1 dev enp0s1 proto dhcp src 321.321.321.321 метрика 100 
Ссылка на область действия 10.0.0.0/16 dev wg0 
321.321.321.1 dev enp0s2 proto dhcp scope link src 321.321.321.321 метрика 100 
169.254.169.254 через 192.168.10.2 dev enp0s2 proto dhcp src 192.168.10.100 метрика 100 
Ссылка на область действия 10.10.0.1 dev wg0 
192.168.10.0/16 dev enp0s2 ссылка на область ядра proto src 192.168.10.100

$: firewall-cmd --list-all-zones
# я удалил пустые строки
внутренний (активный)
  цель: по умолчанию
  icmp-инверсия блока: нет
  интерфейсы: 
  источники: 10.0.0.0/16 10.10.0.1/32 123.123.123.123/32
  службы: dhcpv6-клиент mdns ssh
  порты: 12345/tcp 12345/udp
публичный (активный)
  цель: по умолчанию
  icmp-инверсия блока: нет
  интерфейсы: 
  источники: 123.123.123.123/32
  службы: dhcpv6-клиент ssh
  порты: 12345/tcp 12345/udp

Что еще я должен сделать, чтобы заставить его работать?

Tim avatar
флаг gp
Tim
Я бы начал с открытия брандмауэра, чтобы позволить IMCP проверить подключение к сети. Затем я мог бы подключиться по телнету к портам на каждой локальной машине, чтобы проверить, прослушивает ли Wireguard, а затем подключиться по телнету к портам с удаленной машины.
Tom Yan avatar
флаг in
Пожалуйста, не используйте `/24` в `AllowedIPs=`, если адрес на самом деле не является идентификатором подсети. (Так что это должно быть «10.10.0.1/32» / «10.10.0.2/32» или даже просто «10.10.0.1» / «10.10.0.2». На самом деле, если вы не собираетесь просто разрешать «10.10.0.0 /24` с обеих сторон, вероятно, нет необходимости использовать `/24` в `Address=`.)
Tom Yan avatar
флаг in
Также `wg` сообщает вам, когда/если вы получили рукопожатие с другой стороны.
maar avatar
флаг gb
@TomYan Спасибо! Он работает после того, как я изменил «AllowedIPs», как вы предложили. Но у меня есть некоторые проблемы с маршрутизацией. Я отредактировал основной пост. Я очень ценю вашу помощь!
Tom Yan avatar
флаг in
Не могли бы вы добавить вывод `iptables-save` обоих хостов?
maar avatar
флаг gb
@TomYan Конечно, я обновил содержание вопроса выводом `iptables-save`.
Tom Yan avatar
флаг in
Почему вы не предоставляете *фактические* результаты для `AWS-VPN`?
Tom Yan avatar
флаг in
Кроме того, является ли один из них шлюзом по умолчанию для некоторых экземпляров? Чтобы `AWS-some-instance -> OVH-VPN` / `OVH-some-instance -> AWS-VPN` работал/работал, должен быть маршрут на некоторых экземплярах, который охватывает `10.10.0.1 ` и `10.10.0.2` соответственно (поскольку вы не `маскируете` то, что выходит из интерфейса VPN с обеих сторон). Кроме того, вы упомянули, что добавили маршрут «192.168.10.0/16 через [так в оригинале] AWS-VPN-интерфейс», вы имели в виду, что wg-quick не добавил его автоматически для вас? Почему (ручное) добавление маршрута, о котором вы упомянули, не является «сбалансированным»?
maar avatar
флаг gb
@TomYan Маршрут «192.168.10.0/16 через [так в оригинале] AWS-VPN-интерфейс», который я добавил на панели консоли AWS, это маршрут для других экземпляров (вся сеть). Также на сервере AWS-VPN у меня есть только частный интерфейс (`ens4`) и NAT назначения для общедоступного IP-адреса через встроенный брандмауэр AWS за пределами экземпляра AWS-VPN. В OVH-VPN у меня есть два интерфейса - публичный (`enp0s1`) и частный (`enp0s2`) интерфейс, а в качестве брандмауэра я использую `firewalld` (в OVH-VPN).
maar avatar
флаг gb
Итак, если я правильно понимаю, на стороне AWS я должен добавить маршрут «192.168.10.0/16 через 10.10.0.1»? А на OVH-VPN `10.10.0.2/16 через 10.10.0.2`? Когда я пытаюсь сделать это на другом OVH-сервере, у меня возникает ошибка: «Ошибка: Nexthop имеет недопустимый шлюз».
maar avatar
флаг gb
@TomYan Я также добавил вывод команды ip route из обоих.
Tom Yan avatar
флаг in
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/127745/discussion-between-tom-yan-and-maar).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.