Как добраться до локальной подсети за Tinc VPN?

Вопрос или проблема

Я пытаюсь настроить VPN-соединение между облачным сервером на DigitalOcean и локальным сервером с использованием Tinc. До сих пор мне удалось установить соединение, и серверы могут общаться друг с другом через VPN-адрес – согласно этому руководству.

Тем не менее, я не могу пинговать любые устройства в моей локальной сети (172.23.6.0/24) с сервера на DigitalOcean. Я пытался указать свою локальную подсеть как подсеть для файла хостов Tinc, но это не работает. Когда я пытаюсь пинговать с облачного сервера, я просто получаю ошибку “Назначенный хост недоступен“.

Это мой первый опыт работы с Tinc, поэтому обучение мне дается с трудом. Я все еще читаю документацию, но на данный момент нахожу ее немного запутанной. Не то чтобы она плохо написана, просто почему-то я ее не понимаю.

Кто-нибудь уже разобрался с тем, что я пытаюсь сделать, и может мне помочь, пожалуйста? Спасибо.

PS. Моя конечная цель – добиться коммуникации между облачным сервером и локальным сервером, чтобы облачный сервер был осведомлен о LAN-подсети за нашим файрволом. Таким образом, я смогу выполнить аутентификацию Active Directory без непосредственного подключения сервера AD к интернету (по крайней мере, не напрямую).

Во-первых, пожалуйста, разместите файлы конфигурации и логи вместе с вашим вопросом.

Предполагаю, что ваша настройка в основном верна, так как у вас есть соединения между машинами.

Tinc обрабатывает маршрутизацию нативно — он не использует таблицы маршрутизации на машинах (поскольку это может создавать ненужный трафик).

В файле хостов для Tinc вы должны указать подсети, которые хотите сделать видимыми. Вот пример конфигурации подключения марса (сервер, на котором находятся эти конфигурации) к венере (удаленный сервер).

Удаленный сервер имеет видимые подсети 10.1.74.0/24 и 10.12.1.0/24, локальный сервер имеет видимую подсеть 10.1.1.0/24. Обратите внимание, что tinc-up добавляет маршруты, но файлы марс и венера определяют, какие сегменты разрешены через VPN (опция Subnet).

Это файлы конфигурации на сервере марс:

/etc/tinc/venus/tinc.conf

Name = vpn
Device = /dev/net/tun
PrivateKeyFile = /etc/tinc/venus/rsa_key.priv
TCPOnly=yes
AddressFamily=any

/etc/tinc/venus/tinc-up

#!/bin/sh
ifconfig $INTERFACE hw ether fe:fd:0:0:0:0
ifconfig $INTERFACE 10.1.1.90 netmask 255.0.0.0 -arp
route add -net 10.1.74.0 netmask 255.255.255.0 gateway 10.1.1.90
route add -net 10.12.1.0 netmask 255.255.255.0 gw 10.1.74.6

/etc/tinc/venus/hosts/venus

Address = 189.22.2.252
Port=260
Subnet = 10.1.74.0/24
Subnet = 10.12.1.0/24
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAMti4IsVr3UKqg24pVfvHRyL+0S1uGWKGsmNw1drAPn18PgY7hC8DKdO
+aEiboP2vOJTzj0pgpsdf43OypWzqXDQkIpjMLLjJMa0X9WLrQ3UKq4pVm9FBWVp
yiT7iZirkv6+iqTJq94rWKdOFaHg44h536hethdfghy54ubGlplJjGxHAgMBAAE=
-----END RSA PUBLIC KEY-----

/etc/tinc/venus/hosts/mars

Address = tinc.public.net
Port=260
Subnet = 10.1.1.0/24
-----BEGIN RSA PUBLIC KEY-----
MIGJyUGiL/WWZu6AoGBALvkoE+oSSO0a997Xb4+3woqJLAOi/js1ctlIpeLliN1T
DEv5+mu7fXXCAuOrgteHFYAsmwHPG+7VBSoDNa3WuZNlDFUa8WzHx6lJ6Rmrk6WV
A22Ya2MVvG09b1HTWgzw1MvVKkENeYW6TCiUGsNJh15ADGpb2dG3AgMBAAE=
-----END RSA PUBLIC KEY-----

В итоге я нашел способ заставить это работать. Мой ответ в первую очередь для Windows (и “клиент”, и “сервер”), так как это более редко и мало информации об этом в сети, но те же концепции применимы для Linux.

Для будущих ссылок, вам нужно сделать следующее:

  1. Убедитесь, что у “серверного” узла Tinc (т.е. у того, который находится в LAN-подсети, в которую вы хотите получить доступ с вашего “клиента”) имеется значение Subnet = LAN_SUBNET в файле %ProgramFiles%\tinc\vpn-name\hosts\server. Это должно быть поверх того, что уже есть его собственное значение “IP” в другой записи Subnet = VPN_IP, так что у вас будет 2 записи. Например, если ваша LAN, которую вы хотите поделиться, это 192.168.88.0/24 и VPN IP вашего “сервера” это 10.0.0.1, вам нужно иметь:

    Subnet = 10.0.0.1/32 
    Subnet = 192.168.86.0/24 
    
  2. На “клиенте” вам нужно убедиться, что вы маршрутизируете трафик на 192.168.86.0/24 через интерфейс VPN. Для этого добавьте следующее в ваш файл %ProgramFiles%\tinc\vpn-name\tinc-up.bat:

    :: Установить тип соединения VPN как "частное"
    powershell -Command "Set-NetConnectionProfile -InterfaceAlias vpn-name -NetworkCategory Private"
    
    :: Добавить маршруты для доступа к удаленным LAN-подсетям
    netsh int ipv4 add route 192.168.86.0/24 "vpn-name" 10.0.0.1
    

    На Linux это может быть заменено на что-то вроде:

    ip route add 192.168.86.0/24 dev $INTERFACE
    
  3. На “сервере”, наконец, необходимо убедиться, что у вас включен NAT, выполнив следующую команду Powershell. Этот шаг критически важен, так как если его не выполнить должным образом, вы сможете пинговать “сервер” через его внутренний LAN IP, но не что-либо еще в той же LAN:

    New-NetNat -Name "tinc-vpn-name" -InternalIPInterfaceAddressPrefix "192.168.86.0/24"
    

    На Linux этот шаг может быть заменен на что-то вроде включения net.ipv4.ip_forward = 1

.

Ответ или решение

Настройка VPN-соединения между серверами, расположенными в облаке и на собственных подсетях, может быть сложной задачей, особенно когда требуется доступ к локальной сети через Tinc VPN. Рассмотрим, как обеспечить доступ из облачного сервера DigitalOcean к локальной сети, используя Tinc.

Обзор проблемы и задачи

Вы создали VPN, используя Tinc, который успешно соединяет ваш сервер в облаке с вашим локальным сервером. Однако вы не можете пинговать устройства в локальной сети (172.23.6.0/24) из облачного сервера. Цель заключается в том, чтобы настроить облачный сервер таким образом, чтобы он мог аутентифицироваться по Active Directory без прямого доступа к AD-серверу через интернет.

Шаги для достижения результата

  1. Настройка конфигурационных файлов Tinc

    Убедитесь, что конфигурационные файлы Tinc позволяют видимость локальной сети. В файле /etc/tinc/TincNetName/hosts/LocalServer добавьте строку с указанием локальной подсети, к примеру:

    Subnet = 172.23.6.0/24

    Эта запись позволяет Tinc зарезервировать соответствующий диапазон IP-адресов для VPN.

  2. Маршрутизация трафика через VPN интерфейс

    На облачном сервере настройте маршрут, чтобы трафик для локальной сети передавался через VPN интерфейс. Это достигается добавлением команды в скрипт /etc/tinc/TincNetName/tinc-up:

    ip route add 172.23.6.0/24 dev $INTERFACE via <VPN_IP>

    Здесь <VPN_IP> — это IP адрес, который присваивается облачному серверу в Tinc VPN.

  3. Настройка NAT или переадресации IP

    На локальном сервере (входном узле Tinc, соединённом с LAN) необходимо настроить NAT или переадресацию IP-адресов, чтобы пакеты, приходящие из облака, могли попасть в локальную сеть. Для этого включите пересылку IP на Linux:

    sysctl -w net.ipv4.ip_forward=1

    Вы также можете задать это значение навсегда в /etc/sysctl.conf.

  4. Проверка и отладка соединений

    После внесения изменений перезапустите службу Tinc на обоих серверах и проверьте, что облачный сервер может теперь посылать пакеты в локальную сеть. Используйте команды ping, traceroute и tcpdump для диагностики сетевых путей и проверки правильности настройки маршрутов и правил NAT.

Преимущества данного подхода

Этот метод обеспечивает надёжное и защищённое соединение между вашим облачным и локальным серверами, позволяя выполнять задачи, требующие доступа к внутренним ресурсам без их излишней экспозиции в интернет. Более того, описанные шаги специально адаптированы для Tinc, что делает их легок воспринимаемыми при адаптации к вашим специфическим требованиям и сторонам.

Следуя шагам ниже, вы гарантируете, что ваше VPN-соединение будет работать стабильно, а безопасность и эффективность взаимодействия не будут подвержены рискам.

Оцените материал
Добавить комментарий

Капча загружается...