Трафик Wireguard VPN в AWS работает, но трафик из AWS к этому VPN IP никогда не достигает.

Вопрос или проблема

У меня есть сервер Wireguard, работающий в экземпляре EC2 в публичной подсети VPC. Я могу подключаться к нему и использовать SSH или другие средства для доступа к ресурсам как в публичной, так и в частной подсетях этого VPC.

Тем не менее, я не могу получить трафик в обратном направлении. С сервера (10.8.0.1) я не могу пинговать подключенный Windows VPN клиент (10.8.0.2) или даже выполнить traceroute к нему. Оба обращения заканчиваются тайм-аутом.

Таблица маршрутов на Windows клиенте показывает

 10.8.0.0      255.255.0.0         On-link          10.8.0.2      5
 10.8.0.2  255.255.255.255         On-link          10.8.0.2    261

а на сервере Wireguard показывает

[root@ip-10-0-0-202 wireguard]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-10-0-0-1.us- 0.0.0.0         UG    512    0        0 enX0
ip-10-0-0-0.us- 0.0.0.0         255.255.255.0   U     512    0        0 enX0
ip-10-0-0-1.us- 0.0.0.0         255.255.255.255 UH    512    0        0 enX0
ip-10-0-0-2.us- 0.0.0.0         255.255.255.255 UH    512    0        0 enX0
ip-10-8-0-0.us- 0.0.0.0         255.255.0.0     U     0      0        0 wg0

Группа безопасности, в которой находится сервер Wireguard, имеет allowAllEgress, и я могу получать доступ к ресурсам в открытом интернете оттуда. Брандмауэр Windows (для тестирования) полностью отключен, и пинг работает с другой машины в его локальной сети.

Таблица маршрутов для группы безопасности, в которой находится сервер, показывает, что 10.8.0.0/16 имеет целью сетевой интерфейс самого VPN сервера.

Редактирование:

Я выполнил iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -d 10.0.0.0/16 -j MASQUERADE, а также sysctl net.ipv4.ip_forward возвращает ответ 1.

Редактирование 2:

[ec2-user@ip-10-0-0-202 ~]$ sudo iptables -L FORWARD -v -n
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
14819 3075K ACCEPT     all  --  wg0    *       0.0.0.0/0            0.0.0.0/0
15119   56M ACCEPT     all  --  *      wg0     0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  wg0    wg0     0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  wg0    *       0.0.0.0/0            0.0.0.0/0

Конечная цель состоит в том, чтобы разрешить ALB в той же VPC перенаправлять определенные HTTP-запросы на VPN сервер, который запускает nginx и будет перенаправлять эти запросы на подключенный VPN клиент. Запросы приходят на сервер Wireguard, но никогда не доходят до клиента.

Что я мог делать не так?

Ответ или решение

Анализ проблемы с маршрутизацией трафика WireGuard VPN между AWS и клиентом

Ваша ситуация, в которой трафик от WireGuard сервера в AWS не доходит до VPN клиента, может быть вызвана несколькими факторами. Давайте детально рассмотрим все возможные сценарии и шаги для устранения неполадок.

1. Проверка маршрутов

Сначала убедитесь, что маршруты для подключения вашего VPN клиента правильно прописаны как на стороне сервера, так и на клиенте. На стороне клиента (10.8.0.2) маршрут 10.8.0.0 255.255.0.0 указывает, что этот IP-адрес находится в локальной сети. С серверной стороны также должен быть соответствующий маршрут. Хотя вы уже указали, что ip-10-8-0-0 должен вести к wg0, проверьте, правильно ли настроены IP-адреса и маска подсети.

2. Настройки iptables

Вы указали, что правило iptables для маскарадинга настроено правильно. Убедитесь, что ваш сервер WireGuard позволяет пересылку пакетов через интерфейс wg0. Вот основные моменты, которые вы должны проверить:

  • Убедитесь, что есть правило на уровне FORWARD, разрешающее трафик из интерфейса wg0 на остальные интерфейсы.

    sudo iptables -A FORWARD -i wg0 -o enX0 -j ACCEPT
    sudo iptables -A FORWARD -i enX0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  • После внесения изменений, проверьте текущие правила с помощью команды:

    sudo iptables -L FORWARD -v -n

3. Включение пересылки IP

Вы уже выполнили команду sysctl net.ipv4.ip_forward, и получите значение 1, что правильно. Однако убедитесь, что это параметр сохраняется даже после перезагрузки системы. Для этого проверьте и отредактируйте файл /etc/sysctl.conf, добавив или изменив следующую строчку:

net.ipv4.ip_forward = 1

После изменения выполните команду:

sudo sysctl -p

4. Настройки безопасности AWS

На уровне AWS необходимо проверить настройки группы безопасности (Security Group) вашего EC2 инстанса. Убедитесь, что входящий трафик разрешен для UDP-порта, который используется WireGuard, а также обеспечьте разрешение для IP-адреса вашего VPN клиента:

  • Входящие правила должны включать:
    • Тип: All Traffic / Custom UDP, Порт: [Ваш_Port], Исходящий IP: 10.8.0.0/16

Также проверьте, что маршрутная таблица для вашей VPC не блокирует трафик в вашу VPN подсеть.

5. Настройки Nginx и ALB

Поскольку ваша цель — настроить ALB для перенаправления HTTP-запросов на Nginx и затем на клиента WireGuard:

  • Убедитесь, что Nginx настроен правильно для обработки таких запросов. Проверьте, что Nginx слушает на соответствующем порту и правильно переадресовывает запросы на 10.8.0.2.

  • Также стоит пересмотреть настройки ALB и убедиться, что он настроен на правильный протокол и целевой порт.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...