<===

ProNotes

2025-11-16 10:04:42
`ssh -D` — это опция SSH-клиента, которая создаёт **динамический (dynamic) SOCKS-прокси** через SSH-туннель. По сути, она превращает ваш локальный порт в SOCKS-прокси-сервер, через который можно маршрутизировать трафик к удалённым хостам, используя SSH-сервер как посредника.

---

### Синтаксис
```bash
ssh -D [локальный_порт] user@ssh_server
```

Пример:
```bash
ssh -D 1080 user@example.com
```

После подключения:
- Локальный порт `1080` становится **SOCKS5-прокси** (по умолчанию).
- Любое приложение, настроенное на использование SOCKS-прокси `localhost:1080`, будет отправлять запросы через SSH-туннель.

---

## Механика работы (пошагово)

1. **Установка SSH-соединения**
   - Клиент подключается к `ssh_server` по SSH (обычно порт 22).
   - Аутентификация (пароль, ключ и т.д.).

2. **Создание локального порта**
   - Опция `-D 1080` говорит SSH-клиенту:  
     > "Слушай на `localhost:1080` и обрабатывай входящие SOCKS-запросы."

3. **Приложение → SOCKS-клиент → SSH-клиент**
   - Приложение (браузер, curl и т.д.) настроено на SOCKS-прокси `127.0.0.1:1080`.
   - Оно отправляет запрос:  
     `CONNECT google.com:80` (или `example.org:443`).

4. **SSH-клиент обрабатывает запрос**
   - SSH-клиент **не знает**, как подключиться к `google.com` напрямую.
   - Он **пересылает этот запрос по зашифрованному SSH-каналу** на **SSH-сервер**.

5. **SSH-сервер устанавливает соединение**
   - SSH-сервер (на `example.com`) **получает команду** от клиента:  
     > "Подключись к `google.com:80` от моего имени."
   - Сервер **устанавливает TCP-соединение** с `google.com` **своим IP-адресом**.

6. **Двунаправленный туннель**
   - Установлено:  
     `Приложение ↔ localhost:1080 (SOCKS) ↔ SSH-клиент ↔ SSH-туннель ↔ SSH-сервер ↔ google.com`
   - Все данные шифруются на участке `SSH-клиент ↔ SSH-сервер`.

7. **Динамичность**
   - В отличие от `-L` (локальный форвардинг, фиксированный хост:порт),  
     `-D` позволяет **подключаться к любым хостам**, указанным в SOCKS-запросе.
   - SSH-сервер сам разрешает DNS и устанавливает соединения.

---

## Схема

```
[Ваш браузер]
     ↓ (SOCKS5)
[localhost:1080] ← SSH-клиент
     ↓ (SSH-туннель, зашифровано)
[SSH-сервер @ example.com]
     ↓ (прямое TCP-соединение)
[google.com, youtube.com, любой хост]
```

---

## Особенности

| Особенность | Описание |
|------------|---------|
| **SOCKS5** | Поддерживает TCP и UDP (если сервер разрешает), аутентификацию. |
| **SOCKS4** | Можно включить через `-D 4:1080`, но редко нужно. |
| **DNS** | По умолчанию разрешается **на SSH-сервере** (безопасно). Можно форсировать локально: `ssh -D 1080 -o ProxyCommand...` + настройки. |
| **Только TCP** | UDP работает только для DNS (в SOCKS5), если сервер поддерживает. |
| **Множество соединений** | Один `-D` порт может обслуживать тысячи одновременных подключений. |

---

## Примеры использования

### 1. Обход блокировок (через домашний сервер)
```bash
ssh -D 1080 user@home-server.ru
```
→ Настраиваете браузер на SOCKS `127.0.0.1:1080` → весь трафик идёт через домашний IP.

### 2. Тестирование с curl
```bash
curl --socks5 localhost:1080 http://ifconfig.me
```
→ Покажет **IP вашего SSH-сервера**.

### 3. Только один сайт (гибрид с -L)
```bash
ssh -D 1080 -L 8080:internal-app:80 user@vps
```
→ `1080` — динамический прокси, `8080` — прямой форвардинг.

---

## Безопасность

- Трафик шифруется **только между вами и SSH-сервером**.
- От SSH-сервера до целевого сайта — **в открытом виде** (если не HTTPS).
- SSH-сервер **видит все ваши запросы** (хосты, порты).
- Используйте только **доверенные серверы**.

---

## Полезные опции с `-D`

```bash
ssh -D 1080 -f -N user@server  # фоновый режим, без команды
ssh -D 1080 -C user@server     # сжатие данных
ssh -D 1080 -o "ProxyJump bastion" user@internal  # через джамп-хост
```

---

## Итог

> `ssh -D [порт]` = **SOCKS5-прокси на локальном порту**,  
> который **перенаправляет любые TCP-соединения через SSH-сервер**,  
> **динамически разрешая хосты на стороне сервера**.

Это мощный инструмент для:
- Обхода блокировок
- Доступа к внутренним ресурсам
- Анонимизации (частичной)
- Тестирования сетей

---
← Previous Next →
Back to list