Как настроить маршрутизацию на VPS-сервере с установленным WireGuard?

Привет! У меня установлена Ubuntu 24.04.1 LTS с настроенным WireGuard, и к серверу подключено несколько peer. Все работает в целом хорошо, но я столкнулся с проблемой: сервер не может пинговать адреса пиров. Я планирую установить Zabbix для мониторинга устройств за peer, но не знаю, в чем может быть проблема. 

Вот мои настройки WireGuard: 
<pre><code>[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 49964
PrivateKey = &lt;....&gt;

PreUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
# 
PostUp = iptables -I INPUT -p udp --dport 49964 -j ACCEPT
PostUp = iptables -I FORWARD -i ens3 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = ip6tables -I FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = sysctl -w net.ipv4.ip_forward=0
PostDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 49964 -j ACCEPT
PostDown = iptables -D FORWARD -i ens3 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

### Client
[Peer]
PublicKey = &lt;....&gt;
PresharedKey = &lt;....&gt;
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128</code></pre>

Я проводил тесты с помощью curl:
- Запрос: `curl -Is <a href="http://10.66.66.1" rel="nofollow">10.66.66.1</a> | head -1` - ответ: HTTP/1.1 200 OK
- Запрос: `curl -Is <a href="http://10.66.66.2" rel="nofollow">10.66.66.2</a> | head -1` - ответа нет.

При этом VPN работает нормально, и интернет через него доступен. Почему сервер не может пинговать адреса пиров?
  • 19 января 2025 г. 20:14
Ответы на вопрос 1
Если ваш WireGuard-клиент (peer) не может пинговать адреса пиров, возможно, проблема заключается в маршрутизации или настройках брандмауэра на сервере. Рассмотрим несколько моментов, которые могут помочь исправить ситуацию:

### 1. Проверьте настройки `AllowedIPs`

В настройках клиента у вас указано:

```plaintext
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
```

Это значит, что этот клиент может отправлять и получать пакеты только на указанный ему адрес. Убедитесь, что у вас на сервере правильно указаны `AllowedIPs` для всех клиентов. Если вы планируете, чтобы сервер взаимодействовал с этими пировыми адресами, убедитесь, что они правильно заданы в конфигурации сервера и других пиров.

### 2. Проверьте настройки iptables

Ваши правила iptables могут мешать маршрутизации. Убедитесь, что ваши правила находятся в правильном порядке. Попробуйте изменить порядок правил, вот пример:

```bash
iptables -I FORWARD -i wg0 -j ACCEPT
iptables -I FORWARD -o wg0 -j ACCEPT
```

Эти правила позволяют трафику проходить как с клиента на сервер, так и наоборот.

### 3. Убедитесь, что IP-адреса пиров настроены правильно

Убедитесь, что адреса клиентских пиров (например, 10.66.66.2) настроены корректно на клиентской стороне. Каждый клиент должен иметь уникальный `Address` в диапазоне, который вы указали на сервере (10.66.66.1/24).

### 4. Проверьте наличие ICMP в iptables

Убедитесь, что ваш iptables позволяет ICMP-пакеты (ping):

```bash
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
```

### 5. Проверьте файл конфигурации WireGuard

Убедитесь, что в конфигурации WireGuard на клиенте правильно указан адрес сервера и порт, например:

```plaintext
[Peer]
PublicKey = <ваш_публичный_ключ_сервера>
Endpoint = <IP_адрес_или_Domain_сервера>:49964
AllowedIPs = 10.66.66.0/24,fd42:42:42::/64
```

### 6. Попробуйте временно отключить firewall

Для тестирования, вы можете временно отключить ваш firewall (iptables) и посмотреть, будет ли работать пинг. Это может помочь в диагностике проблемы:

```bash
iptables -F
```

### 7. Логи

Проверьте логи WireGuard на клиенте и сервере для получения более подробной информации об ошибках. Можно использовать команду `journalctl` для просмотра логов:

```bash
journalctl -u wg-quick@wg0
```

### 8. Тестирование

После внесения изменений не забудьте перезапустить WireGuard:

```bash
sudo wg-quick down wg0
sudo wg-quick up wg0
```

### Заключение

Если ни один из этих шагов не помог, попробуйте поэкспериментировать с уменьшением сложности вашей сети (например, отключив NAT и другие настройки) и окружать проблему, постепенно добавляя компоненты, чтобы выяснить, где происходит сбой.
Похожие вопросы