Вопрос или проблема
- У меня есть 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
- У меня также есть 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
- 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
Я ОЖИДАЮ:
- когда на 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
Проблемы, возникающие в текущей конфигурации
-
Ограничение
AllowedIPs
: В настройках Wireguard на VPS1 и VPS2 вы ограничили маршрутизацию только до адресов, связанных с каждой VPS. Это значит, что когда вы пытаетесь выполнитьcurl
на внешний ресурс, запрос блокируется, так как адреса (например, ifconfig.me) не находятся в разрешённом диапазоне. -
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
Затем протестируйте команды:
- Проверка IP на VPS1:
curl --interface ens3 ifconfig.me
Ожидаемый результат: IP-адрес VPS1.
- Проверка IP на VPS2 через VPN:
curl --interface wgp2 ifconfig.me
Ожидаемый результат: IP-адрес VPS2.
Заключение
Следуя этим шагам, вы сможете правильно настроить маршрутизацию трафика через Wireguard между вашими VPS. Убедитесь, что настройки DNS актуальны, а iptables настроены для проксирования трафика. Эта оптимизация поможет устранить проблемы с разрешением хостов и обеспечит стабильную работу вашего сетевого соединения.