Как настроить перенаправление SSH через сеть VPN на удаленный хост с использованием Wireguard?

У меня есть VPS, на которой развернут Docker и контейнер wg-easy. Вот его конфигурация в docker-compose: 
```yaml
services:
  wg-easy:
    environment:
      - LANG=ru
      - WG_HOST=myhostname
      - WG_DEFAULT_ADDRESS=10.10.0.x
      - WG_MTU=1420
      - WG_ALLOWED_IPS=10.10.0.0/24, 10.10.1.0/24
      - WG_PERSISTENT_KEEPALIVE=25

    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - etc_wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    networks:
      wg-intranet:
        ipv4_address: 10.10.1.2
volumes:
  etc_wireguard:

networks:
  wg-intranet:
    ipam:
      config:
        - subnet: 10.10.1.0/24
```

В Docker была создана подсеть для контейнеров, чтобы можно было к ним обращаться после подключения к сети Wireguard. Например, веб-интерфейс wg-easy доступен по адресу <a href="http://10.10.1.2:51821/" rel="nofollow">10.10.1.2:51821</a>. 

В связи с этим, как я могу подключиться по SSH к хост-машине изнутри VPN-сети? У меня закрыты внешние порты хоста для безопасности. Я заметил, что при отключении UFW я могу подключиться по SSH по адресу 10.10.1.1, но как только я включаю UFW, доступ блокируется. Я пробовал настройки, такие как <b>DEFAULT_FORWARD_POLICY="ACCEPT"</b> и <b>ufw route allow</b>, но это не помогло. Возможно, я что-то упускаю?
  • 6 сентября 2024 г. 8:33
Ответы на вопрос 1
Для того чтобы настроить доступ к хост-машине через SSH из сети Wireguard, необходимо правильно настроить UFW (Uncomplicated Firewall) и убедиться, что он позволяет трафик из вашей VPN-сети.

### Шаги по настройке:

1. **Включите UFW** (если он еще не включен):
   ```bash
   sudo ufw enable
   ```

2. **Разрешите доступ по SSH**:
   Убедитесь, что входящий трафик на порт SSH (обычно 22) разрешен:
   ```bash
   sudo ufw allow ssh
   ```

3. **Добавьте правила для Wireguard**:
   Вам нужно разрешить трафик из подсети Wireguard в вашу локальную сеть. Предполагая, что ваш Wireguard настроен на подсеть `10.10.0.0/24`, добавьте правила для UFW:
   ```bash
   sudo ufw allow from 10.10.0.0/24 to any port 22
   ```

4. **Разрешите пересылку пакетов (если не сделано ранее)**:
   Если ваш UFW настроен на маршрутизацию трафика, необходимо разрешить пересылку пакетов через интерфейсы:
   ```bash
   sudo nano /etc/default/ufw
   ```
   Измените параметр:
   ```plaintext
   DEFAULT_FORWARD_POLICY="ACCEPT"
   ```

5. **Добавьте правила для маршрутизации**:
   Так как вы используете UFW, можно использовать команду `ufw route allow`, чтобы явно разрешить маршрутизацию:
   ```bash
   sudo ufw route allow in on wg0 out on eth0
   sudo ufw route allow in on eth0 out on wg0
   ```
   (где `wg0` — это ваш интерфейс Wireguard, а `eth0` — это ваш внешний интерфейс).

6. **Сделайте перезагрузку UFW**:
   После всех изменений перезагрузите UFW, чтобы они вступили в силу:
   ```bash
   sudo ufw disable
   sudo ufw enable
   ```

7. **Проверьте статус UFW**:
   Убедитесь, что необходимые правила добавлены и активны:
   ```bash
   sudo ufw status verbose
   ```

### Проверка соединения

После выполнения всех вышеуказанных шагов, попробуйте подключиться по SSH к вашей VPS из сети Wireguard через IP-адрес `10.10.1.1` или другой адрес, который назначен хосту в вашей VPN.

Если подключение не удается, проверьте, правильно ли настроены правила UFW. Используйте `sudo iptables -L` для проверки активных правил и убедитесь, что трафик из подсети Wireguard разрешен.
Похожие вопросы