Чтобы при подключении к WireGuard основной интернет-трафик шёл через ваш локальный IP (не через тоннель), а доступ к определённым ресурсам осуществлялся через удалённый IP (через тоннель), нужно настроить split tunneling — выборочное направление трафика.

Такая конфигурация называется split tunneling (разделённый туннель): не весь трафик идёт через туннель, только нужные подсети или IP-адреса.


🎯 Цель:

  • Основной интернет-трафик → идёт напрямую (через ваш обычный интернет, ваш IP).
  • Определённые ресурсы (IP/подсети) → идут через WireGuard-сервер (через его IP).

🔧 Как это сделать

1. Настройка клиента WireGuard

В конфигурации клиента (wg0.conf) нужно не добавлять маршрут по умолчанию в AllowedIPs, а указать только нужные IP/подсети.

Пример конфигурации клиента (wg0.conf):

[Interface]
PrivateKey = <ваш_приватный_ключ_клиента>
Address = 10.8.0.2/24
# DNS = 8.8.8.8  # опционально, если нужен DNS через тоннель
 
[Peer]
PublicKey = <публичный_ключ_сервера>
Endpoint = ваш-сервер.com:51820
AllowedIPs = 10.8.0.2/24, 192.168.100.0/24, 10.10.0.5, 203.0.113.10
PersistentKeepalive = 25

Объяснение:

  • AllowedIPs = 192.168.100.0/24, 10.10.0.5, 203.0.113.10 — это только те сети/IP, которые должны идти через тоннель.
  • 10.8.0.2/24 — это подсеть самого WireGuard (клиенты и сервер), её обязательно надо добавить.
  • Нет 0.0.0.0/0 и ::/0 → значит, по умолчанию трафик НЕ идёт через WireGuard.
  • Остальной интернет-трафик использует обычный маршрут (ваш обычный IP).

2. Настройка сервера WireGuard

На сервере нужно разрешить клиенту доступ к нужным внутренним ресурсам.

Пример конфигурации сервера (wg0.conf):

[Interface]
PrivateKey = <приватный_ключ_сервера>
Address = 10.8.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -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
 
[Peer]
PublicKey = <публичный_ключ_клиента>
AllowedIPs = 10.8.0.2/32

⚠️ Убедитесь, что на сервере включен IP-форвардинг:

sysctl net.ipv4.ip_forward=1

3. Что происходит при подключении:

  • Вы подключаетесь к WireGuard.
  • WireGuard добавляет маршруты только для AllowedIPs в вашу систему.
  • Например:
    • 192.168.100.0/24 → через интерфейс wg0
    • 10.10.0.5 → через wg0
    • 203.0.113.10 → через wg0
  • Весь остальной трафик (например, google.com, youtube.com) идёт через ваш обычный интернет-интерфейс (ваш локальный IP).

✅ Пример: доступ к внутреннему сервису через тоннель

Допустим:

  • У вас есть сервер с WireGuard.
  • Внутри сети сервера есть сервис по адресу 192.168.100.50:8080.
  • Вы хотите, чтобы только этот адрес был доступен через тоннель, а весь интернет — напрямую.

Конфиг клиента:

AllowedIPs = 192.168.100.50

Теперь:

  • curl http://192.168.100.50:8080 → идёт через WireGuard.
  • curl ifconfig.me → покажет ваш реальный IP, а не сервера.

🔐 Дополнительно: если нужно DNS-имена

Если вы хотите обращаться к ресурсам по доменному имени (например, internal.service.corp), но резолвить их нужно через DNS-сервер в той сети:

  1. Укажите DNS-сервер в конфиге клиента:
    DNS = 192.168.100.1
  2. Или используйте dnsmasq / systemd-resolved с роутингом DNS по доменам (advanced setup).

⚠️ Без DNS= будет использоваться ваш обычный DNS, и доменные имена могут не резолвиться.


🛠 Проверка

После подключения:

ip route

Убедитесь, что нет маршрута 0.0.0.0/0 via wg0.

ping 192.168.100.50
curl ifconfig.me
  • Первый должен работать.
  • Второй должен показывать ваш личный IP.

🔄 Альтернатива: ручное управление маршрутами

Если вы хотите динамически управлять маршрутами, можно:

  • Поднимать WireGuard без AllowedIPs.
  • Вручную добавлять маршруты:
    ip route add 192.168.100.0/24 dev wg0

✅ Вывод

Чтобы основной трафик шёл с вашего IP, а определённые ресурсы — через WireGuard:

❌ Не включайте 0.0.0.0/0 в AllowedIPs.
✅ Включайте только нужные IP/подсети в AllowedIPs.

Так вы получите split tunneling — гибкое и безопасное разделение трафика.