Вопрос или проблема
Извините за ещё одну тему, касающуюся Wireguard, я обыскал форум, но, похоже, каждая тема уникальна для каждого пользователя. Я использую Debian 12 с UFW, и недавно установил Wireguard. Я завершил настройку и смог подключиться к частной VPN с моего MacBook с помощью приложения Wireguard, однако, когда я запускаю команду traceroute, например, первый переход через VPN, как и должно быть, но второй переход через мой IP-адрес роутера. Затем я подтвердил, что VPN работает некорректно, когда я проверил свой IP-адрес в Интернете и получил публичный IP-адрес моего сервера. Я хотел бы узнать, что нужно сделать, чтобы избежать раскрытия моего IP-адреса, когда VPN подключен?
Вот некоторые детали моей конфигурации:
На стороне сервера
[Interface]
PrivateKey = SERVER KEY
Address = 10.0.0.1/32
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = KEY1
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = KEY2
AllowedIPs = 10.0.0.3/32
На стороне клиента
[Interface]
PrivateKey = Key
Address = 10.0.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = Key1 или 2
AllowedIPs = 0.0.0.0/0
Endpoint = myddip:51820
Правила UFW
Status: active
To Action From
-- ------ ----
1194/udp ALLOW Anywhere
Anywhere on tun0 ALLOW Anywhere
Anywhere ALLOW 10.8.0.0/24
443/udp ALLOW Anywhere
51820/udp ALLOW Anywhere
Anywhere ALLOW 10.0.0.0/24
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
445 ALLOW Anywhere
139/tcp ALLOW Anywhere
139 ALLOW Anywhere
445/tcp ALLOW Anywhere
Anywhere on wg0 ALLOW Anywhere
139/tcp (v6) ALLOW Anywhere (v6)
139 (v6) ALLOW Anywhere (v6)
445/tcp (v6) ALLOW Anywhere (v6)
51820/udp (v6) ALLOW Anywhere (v6)
Anywhere (v6) on wg0 ALLOW Anywhere (v6)
Anywhere ALLOW OUT Anywhere on enp2s0
Я также запускал некоторые скрипты в моих iptables, чтобы правильно направлять трафик через мою VPN, но, как я уже упоминал, VPN работает и активно подключен, но маршрутизация, похоже, не хочет оставаться внутри VPN IP.
Пока я здесь, вот вывод моей команды ip r:
default via <мой IP роутера> dev enp2s0
10.0.0.2 dev wg0 scope link
10.0.0.3 dev wg0 scope link
Это вывод, когда VPN активен.
Есть у кого-нибудь идеи?
Ответ или решение
Добрый день. Рассмотрим вашу проблему с маршрутизацией через WireGuard на Debian 12. Ваша ситуация касается неправильной маршрутизации, когда трафик не идет полностью через VPN-соединение, что приводит к утечке IP-адреса.
Теория
Когда вы подключаетесь к VPN, вся ваша исходящая сеть должна маршрутизироваться через VPN-туннель, и ваш внешний IP-адрес должен заменяться на адрес VPN-сервера. Это достигается путем настройки AllowedIPs
как 0.0.0.0/0
на клиентской стороне. Это правило позволяет маршрутизировать весь трафик через туннель WireGuard.
В IP-технологии термины "маршрут" и "шлюз" обозначают путь, по которому пакеты IP могут достигать цели. Чтобы весь трафик шел через VPN, обычно на клиенте устанавливается правило маршрутизации, перенаправляющее по умолчанию (default route) через интерфейс WireGuard.
Пример
В вашей конфигурации:
- На стороне клиента правильно указаны
AllowedIPs = 0.0.0.0/0
, что предполагает, что весь трафик должен отправляться через VPN. - Сервер использует стандартные правила NAT, чтобы скрыть внутренние IP и использовать IP-адрес интерфейса
eth0
для соединений, идущих наружу.
Применение
-
Проверка правил iptables
У вас в настройках используется NAT для маршрутизации трафика от WireGuard-интерфейса на внешний. Убедитесь, что эти правила работают корректно. Попробуйте временно отключить firewall на сервере, чтобы исключить UFW из причин проблемы. Настройте
iptables
напрямую, чтобы понять, влияет ли это на ситуацию. -
Конфигурация маршрутизации
Проверьте маршрут по умолчанию на клиентской машине. При подключении к VPN маршрут по умолчанию должен перенаправляться через
wg0
. После подключения выполните командуip route
на клиенте. Оно должно содержать строку вида:default via 10.0.0.1 dev wg0
Этой строкой должен быть указан маршрут через интерфейс WireGuard.
-
Проверка состояния соединения
Убедитесь, что ваше соединение действительно функционирует через VPN:
- Проверьте IP-адрес через такие сервисы, как
https://whatismyipaddress.com/
до и после подключения к VPN. - Если после подключения показывается ваш публичный IP вашего сервера, то маршрутизация вероятно не проходит через VPN.
- Проверьте IP-адрес через такие сервисы, как
-
Диагностика через лог-файлы
Просмотрите логи WireGuard как на сервере, так и на клиенте. В большинстве случаев WireGuard будет выводить полезные сообщения, которые могут указать на ошибки или несоответствия.
-
Дополнительные настройки UFW
Убедитесь, что UFW разрешает трафик через WireGuard. Хотя у вас уже настроены некоторые правила, нет конкретизации по адресу.
-
Проверка формирования пакетов
Используйте
tcpdump
илиwireshark
для анализа пакетов на вашем интерфейсе WireGuard. Это может помочь понять, идет ли трафик действительно по туннелю.
Заключение
Конфигурация WireGuard может быть достаточно простой, но она всегда требует осторожного подхода при вмешательстве в маршрутизацию и NAT. Убедитесь в правильности всех настроек и используйте методы диагностики для выявления проблем. Устранение ошибок в подобной ситуации обычно требует синергии между знанием как сетевых протоколов, так и конкретных особенностей установленного программного обеспечения. Если все вышеперечисленные шаги не привели к успеху, возможно, стоит обратиться к более детальному логированию и помощи специалистов по сетям.