# Примеры создания VPN-сетей

> Практические примеры топологий SoftEther VPN - site-to-site туннели, remote access, каскадные подключения и объединение филиальных сетей через интернет

Source: https://opennix.org/docs/softether-vpn/manual/softether-vpn-network-examples/

Данная глава содержит практические примеры построения различных типов VPN-сетей с использованием SoftEther VPN.

### Типы VPN

Топологии VPN можно разделить на три основных типа:

#### PC-to-PC VPN (ПК к ПК)
- Простое соединение между двумя компьютерами
- Минимальная настройка
- Подходит для личного использования

#### Remote Access VPN (Удаленный доступ)
- Подключение удаленных пользователей к корпоративной сети
- Центральный VPN сервер
- Множество клиентских подключений

#### LAN-to-LAN VPN (Сеть к сети)
- Соединение географически разделенных сетей
- Постоянные туннели между офисами
- Прозрачная связность для всех устройств

### Общие концепции и знания

Перед настройкой любого типа VPN необходимо понимать следующие концепции:

#### IP-адресация в VPN

**Виртуальные IP-адреса:**
- Каждому VPN-клиенту назначается виртуальный IP-адрес
- Виртуальные адреса должны быть из отдельной подсети
- Рекомендуется использовать частные диапазоны (RFC 1918)

**Примеры распределения адресов:**
```
Корпоративная сеть:     192.168.1.0/24
VPN клиенты:           192.168.10.0/24  
Филиал 1:              192.168.20.0/24
Филиал 2:              192.168.30.0/24
```

#### DHCP в VPN

SoftEther VPN может предоставлять IP-адреса клиентам через:
- **SecureNAT**: встроенный DHCP сервер
- **Локальный мост**: использование существующего DHCP сервера
- **Статические адреса**: ручное назначение

#### Маршрутизация

**Автоматическая маршрутизация:**
- VPN Client автоматически создает маршруты к виртуальной сети
- Возможно принудительное направление всего трафика через VPN

**Ручная маршрутизация:**
```bash
# Windows - добавление статического маршрута
route add 192.168.1.0 mask 255.255.255.0 192.168.10.1

# Linux - добавление статического маршрута  
ip route add 192.168.1.0/24 via 192.168.10.1
```

### Создание PC-to-PC VPN

Это простейший тип VPN для соединения двух компьютеров напрямую.

#### Архитектура

```
Компьютер A ←→ Интернет ←→ Компьютер B
    (Client)                    (Server)
```

#### Шаг 1: Настройка VPN Server (Компьютер B)

```bash
# Подключение к серверу
vpncmd localhost /server

# Создание Virtual Hub
HubCreate PCTOPC /PASSWORD:hubpass

# Переключение на созданный Hub
Hub PCTOPC

# Создание пользователя для Компьютера A
UserCreate computerA /REALNAME:"Computer A User"
UserPasswordSet computerA /PASSWORD:pctopcpass

# Включение SecureNAT для автоматической настройки сети
SecureNatEnable

# Настройка DHCP (опционально)
DhcpSet /START:192.168.30.10 /END:192.168.30.200 /MASK:255.255.255.0 /GW:192.168.30.1
```

#### Шаг 2: Настройка VPN Client (Компьютер A)

```bash
# Подключение к клиенту
vpncmd localhost /client

# Создание виртуального адаптера
NicCreate "PC to PC Connection"

# Создание VPN подключения
AccountCreate "Connect to Computer B" /SERVER:computer-b-ip:443 /HUB:PCTOPC /USERNAME:computerA /NICNAME:"PC to PC Connection"

# Установка пароля
AccountPasswordSet "Connect to Computer B" /PASSWORD:pctopcpass

# Подключение
AccountConnect "Connect to Computer B"
```

#### Шаг 3: Проверка подключения

На обоих компьютерах проверьте:

```bash
# Windows
ipconfig
ping 192.168.30.1

# Linux  
ip addr show
ping 192.168.30.1
```

### Создание Remote Access VPN (ПК к ЛВС)

Этот тип VPN позволяет удаленным пользователям подключаться к корпоративной сети.

#### Архитектура

```
Удаленный сотрудник ←→ Интернет ←→ VPN Server ←→ Корпоративная ЛВС
     (VPN Client)                      (в офисе)        (192.168.1.0/24)
```

#### Шаг 1: Настройка VPN Server в офисе

```bash
# Подключение к серверу
vpncmd localhost /server

# Создание корпоративного Hub
HubCreate CORPORATE /PASSWORD:corppass

# Переключение на Hub
Hub CORPORATE

# Создание групп пользователей
GroupCreate employees /NOTE:"Regular employees"
GroupCreate management /NOTE:"Management group"

# Настройка политик для сотрудников
GroupPolicySet employees /NAME:MaxConnection /VALUE:3
GroupPolicySet employees /NAME:TimeOut /VALUE:300
GroupPolicySet employees /NAME:MaxUpload /VALUE:1000000
GroupPolicySet employees /NAME:MaxDownload /VALUE:5000000

# Создание пользователей
UserCreate john /GROUP:employees /REALNAME:"John Smith" /NOTE:"Sales Manager"
UserPasswordSet john /PASSWORD:johnpass

UserCreate alice /GROUP:management /REALNAME:"Alice Johnson" /NOTE:"IT Director"  
UserPasswordSet alice /PASSWORD:alicepass

# Создание локального моста с корпоративной сетью
exit
BridgeCreate CORPORATE /DEVICE:"Local Area Connection"
```

#### Шаг 2: Настройка клиентов

**Клиент John:**
```bash
vpncmd localhost /client

NicCreate "Company VPN"

AccountCreate "Corporate Access" /SERVER:vpn.company.com:443 /HUB:CORPORATE /USERNAME:john /NICNAME:"Company VPN"

AccountPasswordSet "Corporate Access" /PASSWORD:johnpass

AccountConnect "Corporate Access"
```

#### Шаг 3: Расширенная настройка сервера

**Настройка списков доступа:**
```bash
Hub CORPORATE

# Разрешить доступ к файловому серверу только управленцам
AccessAdd /RULENAME:"File Server Access" /PRIORITY:100 /SRC_USERNAME:management /DEST_IP:192.168.1.10 /ACTION:allow

# Заблокировать P2P трафик для всех
AccessAdd /RULENAME:"Block P2P" /PRIORITY:200 /DEST_PORT:6881-6999 /PROTOCOL:TCP /ACTION:deny
```

**Настройка логирования:**
```bash
# Логирование подключений
LogEnable connection /SWITCH:yes

# Логирование безопасности
LogEnable security /SWITCH:yes
```

### Создание LAN-to-LAN VPN (с использованием моста L2)

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

#### Архитектура

```
Офис A (192.168.1.0/24) ←→ VPN Bridge ←→ Интернет ←→ VPN Server ←→ Офис B (192.168.1.0/24)
```

#### Сценарий: Соединение главного офиса с филиалом

**Главный офис:**
- Сеть: 192.168.1.0/24
- VPN Server установлен на сервере
- Локальный мост к корпоративной сети

**Филиал:**
- Сеть: 192.168.1.0/24 (та же подсеть!)
- VPN Bridge для подключения к главному офису
- Прозрачное расширение корпоративной сети

#### Шаг 1: Настройка VPN Server (Главный офис)

```bash
# Настройка сервера
vpncmd localhost /server

# Создание Hub для соединения с филиалом
HubCreate BRANCH_NETWORK /PASSWORD:branchpass

# Переключение на Hub
Hub BRANCH_NETWORK

# Создание пользователя для VPN Bridge филиала
UserCreate branch_bridge /REALNAME:"Branch Office Bridge" /NOTE:"Автоматическое подключение филиала"
UserPasswordSet branch_bridge /PASSWORD:bridge_secret_2024

# Создание локального моста с корпоративной сетью
exit
BridgeCreate BRANCH_NETWORK /DEVICE:"Local Area Connection"
```

#### Шаг 2: Настройка VPN Bridge (Филиал)

```bash
# Подключение к Bridge
vpncmd localhost /bridge

# Создание каскадного подключения к главному офису
CascadeCreate "MainOffice" /SERVER:hq.company.com:443 /HUB:BRANCH_NETWORK /USERNAME:branch_bridge

# Установка пароля для каскада
CascadePasswordSet "MainOffice" /PASSWORD:bridge_secret_2024

# Настройка дополнительных параметров
CascadeSet "MainOffice" /KEEPALIVE:yes /USECOMPRESS:yes

# Создание локального моста с сетью филиала
BridgeCreate LocalBranch /DEVICE:"Local Area Connection"

# Подключение каскада
CascadeOnline "MainOffice"
```

#### Шаг 3: Проверка связности

После настройки компьютеры в филиале должны иметь прямой доступ к ресурсам главного офиса:

```bash
# Из филиала ping к серверу главного офиса
ping 192.168.1.10

# Доступ к общим папкам
\\192.168.1.10\shared

# Работа с корпоративными приложениями
# (без дополнительной настройки)
```

### Создание LAN-to-LAN VPN (с использованием L3 IP-маршрутизации)

Этот подход создает соединение уровня 3 между сетями с разными IP-подсетями.

#### Архитектура

```
Офис A (192.168.1.0/24) ←→ VPN Server ←→ Интернет ←→ VPN Server ←→ Офис B (192.168.2.0/24)
                              (Router)                      (Router)
```

#### Сценарий: Соединение офисов с разными подсетями

**Главный офис:**
- Локальная сеть: 192.168.1.0/24
- VPN подсеть: 192.168.100.0/24

**Филиал:**
- Локальная сеть: 192.168.2.0/24  
- VPN подсеть: 192.168.200.0/24

#### Шаг 1: Настройка главного офиса

```bash
# Настройка VPN Server
vpncmd localhost /server

# Создание Hub для маршрутизации
HubCreate ROUTING /PASSWORD:routepass

Hub ROUTING

# Создание пользователя для филиала
UserCreate branch_router /REALNAME:"Branch Router Connection"
UserPasswordSet branch_router /PASSWORD:router_pass_2024

# Включение SecureNAT для локального офиса
SecureNatEnable

# Настройка DHCP для главного офиса
DhcpSet /START:192.168.100.10 /END:192.168.100.100 /MASK:255.255.255.0 /GW:192.168.100.1

# Настройка виртуального NAT
NatSet /MTU:1500 /LOG:yes

# Создание виртуального L3 коммутатора
exit
Layer3Add L3SW

# Добавление интерфейса к Hub
Layer3IfAdd L3SW /HUB:ROUTING /IP:192.168.100.1 /MASK:255.255.255.0

# Добавление маршрута к сети филиала
Layer3TableAdd L3SW /NETWORK:192.168.2.0 /MASK:255.255.255.0 /GATEWAY:192.168.100.200
```

#### Шаг 2: Настройка филиала

```bash
# Настройка VPN Server в филиале как клиента
vpncmd localhost /server

# Создание локального Hub
HubCreate LOCAL /PASSWORD:localpass

Hub LOCAL

# Включение SecureNAT для филиала
SecureNatEnable
DhcpSet /START:192.168.200.10 /END:192.168.200.100 /MASK:255.255.255.0 /GW:192.168.200.1

# Создание каскадного подключения к главному офису
exit
Hub ROUTING
CascadeCreate "HeadQuarters" /SERVER:hq.company.com:443 /HUB:ROUTING /USERNAME:branch_router
CascadePasswordSet "HeadQuarters" /PASSWORD:router_pass_2024
CascadeOnline "HeadQuarters"

# Настройка L3 коммутатора для филиала
Layer3Add BRANCH_L3SW
Layer3IfAdd BRANCH_L3SW /HUB:LOCAL /IP:192.168.200.1 /MASK:255.255.255.0
Layer3IfAdd BRANCH_L3SW /HUB:ROUTING /IP:192.168.200.200 /MASK:255.255.255.0

# Добавление маршрута к главному офису
Layer3TableAdd BRANCH_L3SW /NETWORK:192.168.1.0 /MASK:255.255.255.0 /GATEWAY:192.168.100.1
```

#### Шаг 3: Настройка маршрутизации на рабочих станциях

**Главный офис:**
```bash
# Добавление маршрута к филиалу
route add 192.168.2.0 mask 255.255.255.0 192.168.100.1
```

**Филиал:**
```bash
# Добавление маршрута к главному офису
route add 192.168.1.0 mask 255.255.255.0 192.168.200.1
```

### Смешанный VPN: LAN-to-LAN и удаленный доступ

Комплексная конфигурация, объединяющая соединение офисов и удаленных сотрудников.

#### Архитектура

```
Удаленные сотрудники ←→ Интернет ←→ VPN Server ←→ Корпоративная сеть
                                      ↕
                                  Филиалы
```

#### Настройка многоцелевого сервера

```bash
# Создание Hub для корпоративной сети
HubCreate CORPORATE /PASSWORD:corppass

Hub CORPORATE

# Группы пользователей
GroupCreate remote_employees /NOTE:"Удаленные сотрудники"
GroupCreate branch_connections /NOTE:"Подключения филиалов"

# Политики для удаленных сотрудников
GroupPolicySet remote_employees /NAME:MaxConnection /VALUE:2
GroupPolicySet remote_employees /NAME:TimeOut /VALUE:1800
GroupPolicySet remote_employees /NAME:MaxUpload /VALUE:2000000
GroupPolicySet remote_employees /NAME:MaxDownload /VALUE:10000000

# Политики для филиалов (без ограничений)
GroupPolicySet branch_connections /NAME:MaxConnection /VALUE:999
GroupPolicySet branch_connections /NAME:TimeOut /VALUE:0

# Создание пользователей для удаленного доступа
UserCreate john.smith /GROUP:remote_employees /REALNAME:"John Smith - Sales"
UserPasswordSet john.smith /PASSWORD:john_remote_2024

UserCreate mary.jones /GROUP:remote_employees /REALNAME:"Mary Jones - Marketing"
UserPasswordSet mary.jones /PASSWORD:mary_remote_2024

# Создание пользователей для филиалов
UserCreate branch_moscow /GROUP:branch_connections /REALNAME:"Moscow Branch Bridge"
UserPasswordSet branch_moscow /PASSWORD:moscow_bridge_2024

UserCreate branch_spb /GROUP:branch_connections /REALNAME:"SPB Branch Bridge"
UserPasswordSet branch_spb /PASSWORD:spb_bridge_2024

# Настройка доступа
# Разрешить филиалам полный доступ
AccessAdd /RULENAME:"Branch Full Access" /PRIORITY:100 /SRC_GROUP:branch_connections /ACTION:allow

# Ограничить удаленных сотрудников
AccessAdd /RULENAME:"Remote Web Access" /PRIORITY:200 /SRC_GROUP:remote_employees /DEST_PORT:80,443 /ACTION:allow
AccessAdd /RULENAME:"Remote Email Access" /PRIORITY:201 /SRC_GROUP:remote_employees /DEST_IP:192.168.1.20 /DEST_PORT:25,143,993,995 /ACTION:allow
AccessAdd /RULENAME:"Remote File Server" /PRIORITY:202 /SRC_GROUP:remote_employees /DEST_IP:192.168.1.10 /DEST_PORT:445 /ACTION:allow

# Создание локального моста
exit
BridgeCreate CORPORATE /DEVICE:"Local Area Connection"
```

### Создание крупномасштабного сервиса VPN удаленного доступа

Для обслуживания большого количества пользователей используется кластеризация.

#### Архитектура кластера

```
Load Balancer ←→ VPN Server 1 (Controller)
                ↕
              VPN Server 2 (Member)
                ↕  
              VPN Server 3 (Member)
```

#### Настройка контроллера кластера

```bash
# Настройка главного сервера (контроллера)
vpncmd localhost /server

# Включение кластерного режима
ClusterSettingSet /CONTROLLER:yes /PASSWORD:cluster_secret_2024

# Создание Hub для пользователей
HubCreate USERS /PASSWORD:userspass

Hub USERS

# Массовое создание пользователей (пример скрипта)
# for i in {1..1000}; do
#   UserCreate user$i /GROUP:standard_users /REALNAME:"User $i"
#   UserPasswordSet user$i /PASSWORD:defaultpass$i
# done

# Настройка политик для масштабирования
GroupCreate standard_users
GroupPolicySet standard_users /NAME:MaxConnection /VALUE:1
GroupPolicySet standard_users /NAME:TimeOut /VALUE:3600
GroupPolicySet standard_users /NAME:MaxUpload /VALUE:1000000
GroupPolicySet standard_users /NAME:MaxDownload /VALUE:5000000

# Включение SecureNAT с большим пулом адресов
SecureNatEnable
DhcpSet /START:10.0.1.10 /END:10.0.10.254 /MASK:255.255.0.0 /GW:10.0.0.1 /DNS:8.8.8.8 /DNS2:8.8.4.4
```

#### Добавление серверов в кластер

```bash
# На каждом дополнительном сервере
vpncmd localhost /server

# Подключение к кластеру
ClusterSettingSet /CONTROLLER:no /CONNECTTO:cluster-controller.company.com /PASSWORD:cluster_secret_2024
```

#### Мониторинг кластера

```bash
# Просмотр состояния кластера
ClusterStatusGet

# Статистика всех серверов
ClusterMemberInfoGet
```

### Создание крупномасштабного сервиса хостинга виртуальных концентраторов

Предоставление изолированных VPN-сервисов для множественных клиентов.

#### Архитектура мультитенантного сервиса

```bash
# Создание отдельных Hub для каждого клиента
HubCreate CLIENT_COMPANY_A /PASSWORD:companyA_admin_pass
HubCreate CLIENT_COMPANY_B /PASSWORD:companyB_admin_pass
HubCreate CLIENT_COMPANY_C /PASSWORD:companyC_admin_pass

# Настройка изоляции между клиентами
Hub CLIENT_COMPANY_A
AccessAdd /RULENAME:"Block Inter-Client" /PRIORITY:1 /SRC_IP:any /DEST_HUB:CLIENT_COMPANY_B /ACTION:deny
AccessAdd /RULENAME:"Block Inter-Client" /PRIORITY:2 /SRC_IP:any /DEST_HUB:CLIENT_COMPANY_C /ACTION:deny

# Аналогично для других клиентов...

# Создание администраторов для каждого клиента
# (клиенты управляют только своими Hub)
AdminCreate companyA_admin /PASSWORD:adminA_pass /HUB:CLIENT_COMPANY_A
AdminCreate companyB_admin /PASSWORD:adminB_pass /HUB:CLIENT_COMPANY_B
```

### Домашний ПК как VPN-ретранслятор для защиты WiFi

Использование домашнего компьютера для создания защищенного VPN-подключения.

#### Сценарий использования

Защита трафика при использовании публичных WiFi сетей через домашний VPN-сервер.

#### Настройка домашнего VPN Server

```bash
# Простая настройка домашнего сервера
vpncmd localhost /server

HubCreate HOME_VPN /PASSWORD:homepass

Hub HOME_VPN

# Создание пользователя для мобильных устройств
UserCreate mobile_user /REALNAME:"Mobile Devices Access"
UserPasswordSet mobile_user /PASSWORD:home_vpn_2024

# Включение SecureNAT для доступа к интернету
SecureNatEnable
DhcpSet /START:192.168.30.10 /END:192.168.30.100 /MASK:255.255.255.0 /GW:192.168.30.1 /DNS:8.8.8.8

# Настройка проброса портов на роутере для порта 443
```

#### Настройка клиента для мобильного устройства

```bash
# На ноутбуке/телефоне
AccountCreate "Home VPN" /SERVER:home.dyndns.org:443 /HUB:HOME_VPN /USERNAME:mobile_user /NICNAME:"Home Connection"
AccountPasswordSet "Home VPN" /PASSWORD:home_vpn_2024
AccountConnect "Home VPN"
```

### Использование SecureNAT для удаленного доступа без разрешений

Обход корпоративных ограничений с использованием SecureNAT.

#### Сценарий

Сотрудник хочет получить доступ к корпоративной сети, но IT-отдел не может настроить специальную маршрутизацию.

#### Настройка "невидимого" VPN

```bash
# Настройка сервера с SecureNAT
HubCreate STEALTH_ACCESS /PASSWORD:stealthpass

Hub STEALTH_ACCESS

UserCreate stealth_user /REALNAME:"Stealth Access User"
UserPasswordSet stealth_user /PASSWORD:stealth_secret_2024

# Включение SecureNAT для полного доступа
SecureNatEnable

# Настройка NAT для доступа к корпоративной сети
# SecureNAT автоматически предоставит доступ ко всем ресурсам,
# доступным серверу

# Настройка тонкого туннелирования только для корпоративного трафика
DhcpSet /START:172.16.1.10 /END:172.16.1.100 /MASK:255.255.255.0 /GW:172.16.1.1 

# Клиент будет получать доступ к корпоративной сети
# через NAT-преобразование сервера
```


