маршрутизация wireguard. vps1 -> wireguard -> vps2 -> интернет. Ошибка curl: Не удалось разрешить хост

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

  1. У меня есть vps1 с ip, например, 100.100.100.100, с wgp2.conf:
[Interface]
PrivateKey = vps1.priv
Address = 20.0.20.1/24
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps2.pub
AllowedIPs = 20.0.20.3/32
Endpoint = 200.200.200.200:51821
PersistentKeepalive = 20
  1. У меня также есть vps2 с ip, например, 200.200.200.200, с wgp1.conf:
[Interface]
PrivateKey = vps2.priv
Address = 20.0.20.3/24  
ListenPort = 51821
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps1.pub
AllowedIPs = 20.0.20.1/32
  1. IP ПРАВИЛА
  • на vps1 включена IP переадресация.
  • на vps2 включена IP переадресация.
  • на vps2 правила iptables по sudo iptables -S && sudo iptables -t nat -S:
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-A FORWARD -i wgp1 -j ACCEPT 
-A FORWARD -o wgp1 -j ACCEPT 
-P PREROUTING ACCEPT 
-P INPUT ACCEPT 
-P OUTPUT ACCEPT 
-P POSTROUTING ACCEPT 
-A POSTROUTING -o ens3 -j MASQUERADE

КАК ЭТО РАБОТАЕТ:

  • когда на vps1 wg-quick down wgp2: команда curl --interface ens3 ifconfig.me возвращает ip vps1 100.100.100.100
  • НО:
    • когда на vps1 wg-quick up wgp2: команда curl --interface ens3 ifconfig.me возвращает ошибку curl: (6) Не удалось разрешить хост: ifconfig.me
    • когда на vps1 wg-quick up wgp2: команда curl --interface wgp2 ifconfig.me возвращает ошибку curl: (6) Не удалось разрешить хост: ifconfig.me

Я ОЖИДАЮ:

  • когда на vps1 wg-quick up wgp2: команда curl --interface ens3 ifconfig.me возвращает ip vps1 100.100.100.100
  • когда на vps1 wg-quick up wgp2: команда curl --interface wgp2 ifconfig.me возвращает ip vps2 200.200.200.200

Что мне добавить в iptables, если я хочу ОЖИДАТЬ?

Одно, что сразу бросается в глаза, это то, что ваша конфигурация wireguard блокирует ваш исходящий трафик. Когда вы выполняете…

curl --interface wgp2 ifconfig.me

…это попытается связаться с ifconfig.me через wgp2, но ваша конфигурация wireguard имеет AllowedIPs = 20.0.20.3/32. Поскольку адрес ifconfig.me не является 20.0.20.3, этот трафик будет отброшен.

Вам нужно обновить вашу конфигурацию wireguard, чтобы разрешить любой IP адрес через это соединение. На vps1:

[Interface]
PrivateKey = vps1.priv
Address = 20.0.20.1/24
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps2.pub
AllowedIPs = 0.0.0.0/0
Endpoint = 200.200.200.200:51821
PersistentKeepalive = 20

А на vps2:

[Interface]
PrivateKey = vps2.priv
Address = 20.0.20.3/24  
ListenPort = 51821
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps1.pub
AllowedIPs = 0.0.0.0/0

С этой конфигурацией ваш тест с использованием curl --interface wgp2 ... должен заработать.

Вы можете найти контейнеризованную установку, которую я использовал для тестирования, здесь.

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

Проблема маршрутизации Wireguard в контексте VPS: решение ошибки "Could not resolve host"

При использовании Wireguard для маршрутизации трафика через две виртуальные частные сети (VPS) могут возникнуть проблемы с разрешением имен, такие как ошибка "curl: (6) Could not resolve host: ifconfig.me". В данном ответе мы рассмотрим, как оптимизировать конфигурацию Wireguard и настройки iptables для решения этой проблемы.

1. Анализ текущей конфигурации

Настройка VPS1 (wgp2.conf):

[Interface]
PrivateKey = vps1.priv
Address = 20.0.20.1/24
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps2.pub
AllowedIPs = 20.0.20.3/32
Endpoint = 200.200.200.200:51821
PersistentKeepalive = 20

Настройка VPS2 (wgp1.conf):

[Interface]
PrivateKey = vps2.priv
Address = 20.0.20.3/24  
ListenPort = 51821
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps1.pub
AllowedIPs = 20.0.20.1/32

Проблемы, возникающие в текущей конфигурации

  1. Ограничение AllowedIPs: В настройках Wireguard на VPS1 и VPS2 вы ограничили маршрутизацию только до адресов, связанных с каждой VPS. Это значит, что когда вы пытаетесь выполнить curl на внешний ресурс, запрос блокируется, так как адреса (например, ifconfig.me) не находятся в разрешённом диапазоне.

  2. DNS-резолвинг: Если вы используете IP-адреса, которые не попадают под указанные диапазоны, ваш запрос будет отклонен. Сейчас curl не может преобразовать адрес, потому что маршрутизация не позволяет трафику проходить через Wireguard.

2. Решение

Для того чтобы правильно настроить маршрутизацию и устранить ошибку, нужно изменить конфигурацию Wireguard следующим образом:

Обновление конфигурации на VPS1:

[Interface]
PrivateKey = vps1.priv
Address = 20.0.20.1/24
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps2.pub
AllowedIPs = 0.0.0.0/0  # Позволяет весь внешний трафик
Endpoint = 200.200.200.200:51821
PersistentKeepalive = 20

Обновление конфигурации на VPS2:

[Interface]
PrivateKey = vps2.priv
Address = 20.0.20.3/24  
ListenPort = 51821
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = vps1.pub
AllowedIPs = 0.0.0.0/0  # Позволяет весь внешний трафик

3. Настройка iptables на VPS2

Убедитесь, что на VPS2 у вас установлены корректные правила iptables для NAT (маскарадирования), чтобы внешний трафик, проходящий через VPS2, корректно возвращался:

sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

4. Проверка и тестирование

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

sudo wg-quick down wgp2
sudo wg-quick up wgp2

Затем протестируйте команды:

  1. Проверка IP на VPS1:
curl --interface ens3 ifconfig.me

Ожидаемый результат: IP-адрес VPS1.

  1. Проверка IP на VPS2 через VPN:
curl --interface wgp2 ifconfig.me

Ожидаемый результат: IP-адрес VPS2.

Заключение

Следуя этим шагам, вы сможете правильно настроить маршрутизацию трафика через Wireguard между вашими VPS. Убедитесь, что настройки DNS актуальны, а iptables настроены для проксирования трафика. Эта оптимизация поможет устранить проблемы с разрешением хостов и обеспечит стабильную работу вашего сетевого соединения.

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

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