Объединение двух офисов через VPN. Часть 1 – обходимся средствами Windows
Хотя тема и избита, но тем не менее, часто многие испытывают затруднения – будь то начинающий системный администратор или же просто продвинутый пользователь, которого начальство заставило выполнять функции эникейщика. Парадоксально, но несмотря на обилие информации по VPN, найти внятный вариант — целая проблема. Более того, даже складывается впечатление, что один написал – другие же нагло скопировали текст. В итоге, поисковая выдача буквально захламлена обилием ненужной информации, из которой стоящее редко можно вычленить. Поэтому я решил в своей манере разжевать все нюансы (может, кому и пригодится).
Итак, что такое VPN? VPN ( Virtual Private Network — виртуальная частная сеть) — обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (в том числе и интернет). В зависимости от применяемых протоколов и назначений, VPN может обеспечивать соединения трёх видов: узел-узел, узел-сеть и сеть-сеть. Как говорится, без комментариев.
VPN позволяет легко объединить удаленный хост с локальной сеткой фирмы или другого хоста, а также объединить сети в одну. Выгода вполне очевидна – мы легко с клиента VPN получаем доступ к сети предприятия. Кроме того, VPN еще и защищает ваши данные посредством шифрования.
Я не претендую на то, чтобы вам описать все принципы работы VPN, так как есть масса специальной литературы, да и если честно, я и сам много чего не знаю. Тем не менее, если у вас стоит задача «Сделай!», нужно срочно вливаться в тему.
Давайте рассмотрим задачу из моей личной практики, когда нужно было объединить по VPN два офиса –головной и филиал. Ситуацию еще и осложнял тот факт, что в головном офисе стоял видео-сервер, который должен принимать видео с IP камеры филиала. Вот вам вкратце задача.
Способов решения много. Все зависит от того, что у вас есть под рукой. Вообще, VPN легко построить с помощью железного решения на базе различных роутеров Zyxel. В идеале, может случиться и то, что интернет обоим офисам раздает один провайдер и тогда у вас вообще проблем не возникнет (достаточно просто обратиться к прову). Если фирма богата, то может себе позволить и CISCO. Но обычно все решается программными средствами.
А тут выбор велик – Open VPN, WinRoute (учтите, что он платный), средства операционной системы, программы типа Hamanchi (честно говоря, в редких случаях она может и выручит, но полагаться на нее не рекомендую – бесплатная версия имеет ограничение в 5 хостов и еще один существенный минус заключается в том, что все ваше соединение зависит хоста Hamanchi, что не всегда гуд). В моем случае идеально было бы воспользоваться OpenVPN – бесплатной программой, способной незатейливо создать надежное VPN-соединение. Но мы, как всегда, пойдем по пути наименьшего сопротивления.
У меня в филиале интернет раздает шлюз на базе клиентской Windows. Согласен, не самое лучшее решение, но для тройки клиентских компьютеров хватит с головой. Мне нужно сделать VPN-сервер из этого шлюза. Так как вы читаете эту статью, то наверняка уверен, что являетесь новичком в VPN. Поэтому для вас я привожу самый простой пример, который, в принципе, устраивает и меня.
В Windows семейства NT уже вшиты зачаточные возможности серверов. Поднять VPN-сервер на одной из машин не составит труда. В качестве сервера я буду приводить примеры скриншотов Windows 7, но общие принципы будут теми же самыми, что и для старушки XP.
Учтите, что для соединения двух сетей, нужно чтобы они имели разный диапазон! Например, в головном офисе диапазон может быть 192.168.0.x, а в филиале – 192.168.20.x (или любой диапазон серых ip). Это очень важно, так что будьте внимательны. Теперь, можно приступать к настройке.
Зайдите на сервере VPN в Панель управления -> Центр управления сетями и общим доступом ->изменение параметров адаптера.
Теперь нажмите клавишу Alt, вызвав меню. Там в пункте Файл нужно выбрать «Новое входящее подключение».
Поставьте галочки тем пользователям, которые могут входить в систему по VPN. Я настоятельно рекомендую Добавить нового пользователя, назвать его понятным именем и назначить пароль.
После того, как вы это сделали, нужно в следующем окне выбрать как будут подключаться пользователи. Ставьте галку «Через интернет». Теперь вам остается назначить диапазон адресов виртуальной сети. Причем, можно выбрать сколько всего компьютеров может участвовать в обмене данных. В следующем окне выберите протокол TCP/IP версии 4 нажмите «Свойства»:
У вас появится то, что у меня на скриншоте. Если вы хотите, чтобы клиент получил доступ к локальной сети, в которой находится сервер, просто ставьте галку «Разрешить звонящим доступ к локальной сети». В пункте «Назначение IP адресов» я рекомендую указать адреса вручную по принципу, который я выше описал. В моем примере я дал диапазону всего двадцать пять адресов, хотя мог указать просто и два и 255.
После этого жмем на кнопку «Разрешить доступ».
Система автоматически создаст VPN-сервер, который будет сиротливо ожидать, когда к нему кто-либо присоединится.
Теперь остается дело за малым – настроить VPN-клиента. На клиентской машине также идете в Центр управления сетями и общим доступом и выбираете Настройка нового подключения или сети. Теперь вам нужно будет выбрать пункт «Подключение к рабочему месту»
Жмете на «Использовать мое подключение к Интернету и теперь вас выбросит в окно, где нужно будет ввести адрес нашего интернет-шлюза в филиале. У меня он имеет вид 95.2.x.x
Теперь можно вызывать подключение, вводить то имя пользователя и пароль, который вы ввели на сервере и пытаться подключиться. Если все правильно, то вы подключитесь. В моем случае, я могу уже посылать пинг любому компьютеру филиала и запрашивать камеру. Теперь ее моно легко цеплять к видеосерверу. У вас же может быть что-то другое.
Как вариант, при подключении может выскочить ошибка 800, сигнализируящая о том, что с подключением что-то не то. Это проблема брэндмауэра либо клиента, либо сервера. Конкретно я сказать вам не могу – все определяется экспериментально.
Вот так незатейливо мы создали VPN между двумя офисами. Таким же образом можно объединить и игроков. Однако не стоит забывать, что это будет все-таки не полноценный сервер и лучше использовать более продвинутые средства, о которых я расскажу в следующих частях.
В частности, в части 2 мы с вами рассмотрим настройку OPenVPN под Windows и Linux.
Связываем две локальные сети с помощью Wireguard VPN на выделенном сервере
Эта статья — продолжение Настройка маршрутизации в сети с неподконтрольным роутером. Итак имеем домашнюю локальную сеть, роутер от провайдера без возможности прошивки и почти без возможности настройки. Ставим в локальной сети сервер. Настраиваем на сервере Wireguard VPN и связываем две локальные сети. Другая локальная сеть — маршрутизатор Xiaomi Mi Router 3G с прошивкой Padavan и установленным Entware.
В принципе инструкций по настройке Wireguard — масса. Но меня долго смущал дополнительный частный диапазон адресов для wireguard. Лично я долго не мог понять, да и сейчас не понимаю, зачем нужно каждому wg устройству назначать адрес из частного диапазона. Могу понять зачем это нужно для одного клиента — ему же нужен какой-то адрес. Но зачем это нужно для связывания двух разных сети — непонятно. У специалистов настройка wireguard вообще не вызывает никаких проблем, но я не они. Кстати мне больше всего понравилась инструкция на сайте keenetic — по ней я все и делал. Возможно данная статья кому-то поможет.
- Локальная сеть — 192.168.2.0/24
- Роутер — 192.168.2.1
- Сервер в локальной сети — 192.168.2.4, ethernet интерфейс — enp1s0
- Другая локальная сеть (за xiaomi mi router) — 192.168.3.0/24
- wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) — 10.253.1.0/24
- сервер wireguard address — 10.253.1.2
- android клиент — 10.253.1.10
- xiaomi mi router wireguard address — 10.253.1.3
Dnsmasq
Чтобы все работало в локальной сети необходимо добавить два новых маршрута, которые мы анонсируем через DHCP, чтобы трафик в другую локальную сеть и wireguard device network шел через наш сервер: /etc/dnsmasq.d/dhcp.conf
На клиенте, который использует DHCP для получения IP адреса и конфигурации это должно выглядеть так:
# ip route
default via 192.168.2.1 dev enp3s0 proto dhcp metric 100
10.252.0.0/14 via 192.168.2.4 dev enp3s0 proto dhcp metric 100
192.168.2.0/24 dev enp3s0 proto kernel scope link src 192.168.2.30 metric 100
192.168.3.0/24 via 192.168.2.4 dev enp3s0 proto dhcp metric 100Для Windows клиента таблицу маршрутизации можно посмотреть командой route print.
Видим, что трафик для соседней LAN (192.168.3.0/24) и wg private interace (10.252.0.0/14) маршрутизируется через наш сервер (192.168.2.4). Строго говоря wg private interace у меня 10.253.1.0/24, но подсеть 10.254.0.0/16 используется для других нужд и тоже маршрутизируется через сервер, поэтому я написал одно более общее правило вместо двух.
Wireguard сервер
Ставим на сервер пакет wireguard: sudo apt install wireguard .
Генерируем пару ключей (открытый + закрытый) для сервера:
cd /etc/wireguard
wg genkey > private-key
wg pubkey > public-key < private-keyЗапускаем wireguard sudo systemctl start wg-quick@wg0.service .
Включаем автозапуск для wireguard sudo systemctl enable wg-quick@wg0.service .
В ubuntu все работает — создается интерфейс wg0, создаются маршруты.
Проверить статус можно командой ` wg showconf wg0 `, ` wg show `, маршруты командой ` ip route `.
В настройках роутера пробрасываем wireguard порт до нашего сервера.
Android client
Нет смысла еще раз писать то, что уже неплохо написано до нас. Генерируем ключи на Android клиенте, публичный ключ с клиента добавляем в соответствующую секцию конфигурации wireguard сервера.
Padavan + Entware
Для работы Entware на прошивке Padavan нужна USB флешка. Как ставить entware написано в padavan wiki.
Ставим пакет wireguard-go: ` opkg install wireguard-go `. Теоретически можно использовать утилиту ` wg-quick ` для настройки интерфейса и маршрутизатора, но у меня оно почему-то правильно не заработало. В принципе wg-quick — это простой bash скрипт, можно было и разобраться что именно не работает, но разбираться я не стал.
Итак настраиваем wireguard вручную как написано на официальном сайте. Создаем файл конфигурации /opt/etc/wireguard/wg0.conf. Я закоментировал строчку «Address=. » конфигурации wg0.conf из секции [Interfaces]. Это потому что по какой-то причине ` wg setconf ` ее не принял, ну и ладно, настроим адрес вручную (командой ip address add dev wg0 10.253.1.3/24 ).
wireguard-go wg0
ip address add dev wg0 10.253.1.3/24
wg setconf wg0 /opt/etc/wireguard/wg0.conf
ip link set up dev wg0
ip route add 192.168.2.0/24 dev wg0 src 192.168.3.1
iptables -t filter -A INPUT -i wg0 -j ACCEPT
iptables -t filter -A FORWARD -i wg0 -j ACCEPTМаршрут ` ip route add 10.253.1.0/24 dev wg0 src 10.253.1.3 ` добавился сам, поэтому ручками добавляем только маршрут для 192.168.2.0/24 .
Переопределяем iptables policy по умолчанию для цепочек INPUT, FORWARD таблицы filter — у меня значения по-умолчанию были DROP, с ними маршрутизация из локальной сети 192.168.2.0/24 в 192.168.3.0/24 (в мою локальную сеть) не работала.
Все эти команды для запуска и остановки wireguard сохраняем в /opt/etc/init.d/S50wireguard — теперь должно автоматически запускаться при старте маршрутизатора.
Настройка iptables
После некоторых обновлений конфигурации маршрутизатора (например обновление правил белых/черных списков по mac адресу — web интерфейс маршрутизатора -> Advanced settings -> Firewall -> MAC Filter) маршрутизатор с прошивкой padavan сбрасывает правила iptables. Чтобы все продолжало работать в прошивке есть файлик `/opt/etc/init.d/S10iptables` (softlinkg) -> `/opt/bin/update_iptables.sh`, который запускается после обновления конфигурации. В него заносим все правила iptables — у меня там правила для wireguard и правила, которые я настроил для прозрачного использования tor в локальной сети, который настроил по этой инструкции.
Доступ к роутеру из VPN
Поскольку на неподконтрольном роутере нашей основной сети таблицу маршрутизации мы настроить не можем, то не можем и получить к нему доступ из VPN напрямую. Чтобы получить web доступ к роутеру можно добавить nginx reverse proxy configuration. Можно поставить на любой хост из основной локальной сети — но логично поставить на сервер. Например на порту 8081. Ссылку на файл конфигурации надо добавить в директорию /etc/nginx/sites-enabled — обычно сам файл настроек помещают в /etc/nginx/sites-available/ а в sites-enabled создают символическую ссылку` ln -s /etc/nginx/sites-available/local ./ `.
Перезагружаем конфигурацию nginx на сервере: ` sudo systemctl reload nginx `.