Существует ли централизованное решение для проброса портов на операционных системах Linux?

У меня есть несколько VPN-клиентов и центральный VPN-сервер. В упрощённом виде это выглядит следующим образом: защищённая DMZ (192.168.1.0/24) -> VPN-клиент в DMZ (192.168.1.253/10.0.0.10) -> VPN-сервер (10.0.0.1) -> VPN-клиент оффсайт (192.168.200.200/10.0.0.20) -> неконтролируемая LAN (192.168.200.0/24).

Существует ли решение, которое позволит мне: 
1. Открыть на VPN-клиенте оффсайт порт TCP/UDP, который будет пересылать трафик в защищённую сеть.
2. Иметь веб-интерфейс на VPN-сервере, который позволит задавать правила маршрутизации, например:
   2.2 VPN-клиент оффсайт (TCP: 123) -> 192.168.1.11:8080
   2.3 VPN-клиент оффсайт (UDP: 456) -> 192.168.1.12:8081

В настоящий момент, чтобы подключиться из неконтролируемой LAN к серверу в DMZ, я использую SSH Tunnel: 
ssh -L 13389:192.168.1.11:3389 192.168.200.200

В качестве клиентов используются OpenWrt, но возможен и обычный Debian-подобный дистрибутив.
  • 13 сентября 2024 г. 8:44
Ответы на вопрос 1
Для решения вашей задачи по пробросу портов на Linux с использованием VPN-клиентов и веб-интерфейса для управления маршрутами можно рассмотреть несколько решений. Они могут варьироваться от использования существующих инструментов для маршрутизации трафика до разработки собственного приложения/скрипта.

### 1. Использование `iptables` и `socat`

`iptables` — это мощный инструмент для настройки маршрутизации и фильтрации трафика в Linux. Вы можете использовать правила `iptables` для проброса портов. `socat` — это утилита для создания двусторонних соединений между двумя эндпоинтами. 

Пример настройки `iptables` для проброса портов:

```bash
# Проброс TCP-трафика с порта 123 на 192.168.1.11:8080
iptables -t nat -A PREROUTING -p tcp --dport 123 -j DNAT --to-destination 192.168.1.11:8080
iptables -A FORWARD -p tcp -d 192.168.1.11 --dport 8080 -j ACCEPT

# Проброс UDP-трафика с порта 456 на 192.168.1.12:8081
iptables -t nat -A PREROUTING -p udp --dport 456 -j DNAT --to-destination 192.168.1.12:8081
iptables -A FORWARD -p udp -d 192.168.1.12 --dport 8081 -j ACCEPT
```

### 2. Веб-интерфейс управления

Создание веб-интерфейса, который будет взаимодействовать с `iptables`, может быть реализовано с использованием простой веб-технологии. Вот несколько подходов:

- **PHP+Apache/Nginx**: Используйте PHP для создания HTML-форм, которые будут отправлять команды `iptables` через `exec()` или подобные функции.
- **Python Flask/Django**: Разработайте веб-приложение, используя Flask или Django, чтобы управлять правилами `iptables` через системные вызовы.

### 3. Использование специализированных инструментов

Существует несколько инструментов и решений, которые могут помочь вам централизовать управление настройками VPN и проброса портов:

- **OpenVPN**: Если вы используете OpenVPN, можно использовать его функционал для настройки проброса портов, а также возможности управления клиентами через конфигурационные файлы. 
- **WireGuard**: Более современный VPN с хорошей производительностью и возможностью управления маршрутами.
- **SoftEther VPN**: Это более комплексное решение VPN с открытым исходным кодом, которое содержит веб-интерфейс для маршрутизации и управления пользователями.

### Резюме

Для вашей задачи лучше начать с настройки `iptables` в сочетании с простым веб-интерфейсом на PHP или Python. Это обеспечит вам гибкость в управлении пробросом портов, а также возможность добавлять дополнительные функции в будущем. Если необходимо использовать более сложные решения, инструменты, такие как OpenVPN или SoftEther, могут значительно упростить управление VPN и маршрутизацией.
Похожие вопросы