avk013.blogspot.com - другой мой блог "C# and etc"

понедельник, 16 марта 2026 г.

Подключение к компьютеру, который находится за NATом

Появилась необходимость подключиться к изолированному компьютеру (технологический) специалисту из зарубежья, причем на компьютере установлен какой-то специализированный Linux от которого, к тому же, нет пароля, только меню на экране.
*приведено к читаемому и рабочему виду с помощью Грока, за что и спасибо, описано Клаудем, идея и реализация моя.

Играться с промежуточным компьютером можно, НО
есть 
4G-модем, бюджетный, просто дает интернет
и 
Mikrotik hAP Lite  - ультрабюджетный.

Зато есть где-то там, другой Микротик с выделенным IP, и извращенным админом, и так наш технологический компьютер подключается в сеть 192.168.1.х микротика, который образует туннель с базой, также туннель образует и специалист со своего зарубежья, и заходит на наш промкомпьютер специализированной программой.
Выбрано L2tp как простота реализации.


Анализ логики работы

Топология «звезда» (hub-and-spoke). Все клиенты подключаются только к центральному серверу — прямых туннелей между клиентами нет. Для связи MikroTik-клиент ↔ Windows-клиент трафик идёт через хаб: 192.168.1.199 → 192.168.166.1 → 192.168.166.x.

Стек протоколов. L2TP создаёт туннель на уровне 2 (PPP-сессия), IPsec шифрует этот туннель на уровне 3 (ESP + IKE). PPP внутри туннеля обеспечивает аутентификацию (MSCHAPv2/CHAP) и назначение адресов из пула vpn-pool.

Жизненный цикл соединения состоит из трёх фаз: (1) IKE-согласование (UDP 500/4500, PSK — предобщий ключ), (2) IPsec SA — установка шифрованного канала (протокол ESP), (3) L2TP + PPP поверх IPsec — туннель, аутентификация пользователя, получение IP из пула.

Маршрутизация. MikroTik-клиент получает адрес .166.x, но его локальная сеть 192.168.1.0/24 не анонсируется автоматически — для этого добавляется статический маршрут 192.168.166.0/24 via l2tp-to-hub на клиенте. Windows работает в режиме full-tunnel: весь трафик идёт через 192.168.166.1, что обеспечивает галочка «использовать шлюз по умолчанию».

Firewall-логика выстроена в два слоя: на сервере input-цепочка разрешает только служебные порты VPN (1701, 500, 4500, ESP), forward-цепочка разрешает трафик внутри interface-list=PPP-VPN. На MikroTik-клиенте правила forward разрешают двунаправленный обмен между туннелем и мостом LAN.

======================================

мини-шпаргалка по настройке L2TP/IPsec «звезды» на MikroTik (центральный сервер + MikroTik-клиент + Windows-клиент с full-tunnel), с акцентом на правильную последовательность и проверку перед применением.

1. Центральный сервер (L2TP-сервер)

Порядок выполнения:

1. Создать пул адресов для клиентов /ip pool add name=vpn-pool ranges=192.168.166.10-192.168.166.250

2. Создать / проверить профиль PPP

text

/ppp profile

add name=vpn-profile local-address=192.168.166.1 remote-address=vpn-pool \

    use-encryption=required change-tcp-mss=yes only-one=no

(если профиль уже есть → set вместо add)

3. Включить L2TP-сервер + IPsec

text


/interface l2tp-server server

set enabled=yes default-profile=vpn-profile authentication=mschap2,chap \

    use-ipsec=yes ipsec-secret=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ

Создать пользователя для Windows text

/ppp secret

add name=win-user password=СильныйПароль service=l2tp profile=vpn-profile

Создать список интерфейсов PPP-VPN (если его ещё нет) text

/interface list print where name=PPP-VPN

→ если ничего не нашлось →

text


/interface list add name=PPP-VPN comment="VPN клиенты L2TP"

Привязать список к профилю (только после создания списка!) text

/ppp profile set [find name=vpn-profile] interface-list=PPP-VPN

Добавить базовые firewall-правила (input + forward) text

/ip firewall filter

add chain=input  action=accept protocol=udp dst-port=1701,500,4500 comment="L2TP/IPsec"

add chain=input  action=accept protocol=ipsec-esp

add chain=forward action=accept in-interface-list=PPP-VPN out-interface-list=PPP-VPN comment="VPN ↔ VPN"

MikroTik-клиент (тот, за которым 192.168.1.199) Порядок:

Создать L2TP-клиент text

/interface l2tp-client

add connect-to=ПУБЛИЧНЫЙ_IP_СЕРВЕРА user=имя_секрета password=пароль \

    name=l2tp-to-hub use-ipsec=yes ipsec-secret=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ \

    add-default-route=no disabled=no

Дождаться подключения (Connected) /interface l2tp-client print

Добавить маршрут обратно к туннельной подсети text

/ip route add dst-address=192.168.166.0/24 gateway=l2tp-to-hub distance=1 check-gateway=ping

Разрешить трафик из туннеля в LAN и обратно text

/ip firewall filter

add chain=forward action=accept in-interface=l2tp-to-hub out-interface=bridge comment="туннель → LAN" place-before=0

add chain=forward action=accept in-interface=bridge out-interface=l2tp-to-hub comment="LAN → туннель" place-before=0

(bridge → замени на реальное имя интерфейса с 192.168.1.0/24)

5. Разрешить доступ к WebFig/Winbox с VPN (если нужно)

text


/ip firewall filter

add chain=input action=accept protocol=tcp dst-port=80,443,8291 \

    in-interface=l2tp-to-hub comment="Web/Winbox из VPN" place-before=0

Убедиться, что masquerade только на WAN /ip firewall nat print → не должно быть masquerade на l2tp-to-hub

Windows-клиент

Создать VPN-соединение: L2TP/IPsec с предв. ключом

Сервер = публичный IP сервера

Тип входа = имя пользователя и пароль

Предварительный ключ = ВАШ_СЕКРЕТНЫЙ_КЛЮЧ

В свойствах соединения → IPv4 → Дополнительно → Поставить галочку «Использовать шлюз по умолчанию в удалённой сети»

Подключиться → проверить:

ipconfig → IP из 192.168.166.x

route print → default gateway = 192.168.166.1

ping 192.168.1.199 Краткая проверка после всего

Сервер: /interface l2tp-server print → connected клиенты

Сервер: /interface list member print where list=PPP-VPN → есть l2tp-in*

Клиент: /ip route print → есть 192.168.166.0/24 через l2tp-to-hub

Windows: tracert 192.168.1.199 → проходит через 192.168.166.1

======================================

Комментариев нет:

Отправить комментарий