Вопрос или проблема
У меня есть сервер 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
- Тип: All Traffic / Custom UDP, Порт: [Ваш_Port], Исходящий IP:
Также проверьте, что маршрутная таблица для вашей VPC не блокирует трафик в вашу VPN подсеть.
5. Настройки Nginx и ALB
Поскольку ваша цель — настроить ALB для перенаправления HTTP-запросов на Nginx и затем на клиента WireGuard:
-
Убедитесь, что Nginx настроен правильно для обработки таких запросов. Проверьте, что Nginx слушает на соответствующем порту и правильно переадресовывает запросы на
10.8.0.2
. -
Также стоит пересмотреть настройки ALB и убедиться, что он настроен на правильный протокол и целевой порт.
Заключение
Устранение проблемы, заключающейся в невозможности получения трафика от AWS на VPN клиент, требует комплексного подхода. Необходимо внимательно проверить настройки маршрутов, iptables, правила AWS и конфигурации Nginx. В большинстве случаев проблемы могут быть устранены через правильные настройки правил маршрутизации и настройки безопасности. Уделите особое внимание каждому пункту, и у вас будет больше шансов на успешное разрешение проблемы.