- Регистрация
- 17 Февраль 2007
- Сообщения
- 677
- Реакции
- 1.022
- Баллы
- 93
- Возраст
- 57
На этом этапе сетевые адаптеры ваших ВМ настроены на NAT хоста. В интернет они выходят, соответственно, через хостовую службу VPN. В этой статье мы расскажем, как создать ВМ маршрутизатора/брандмауэра pfSense, настроить его в качестве VPN-клиента и протестировать на наличие утечек с помощью Wireshark. Рабочая среда Linux будет иметь доступ к интернету через цепочки ВМ-VPN-шлюзов и виртуальных машин Tor-шлюзов.
Обозревать принцип работы виртуального шлюза будем на примере протокола WireGuard, потому что он быстрый и его достаточно просто настраивать в pfSense. VPN на хосте может быть любой удобный, поддерживающий обход блокировок. Или VPN может отсутствовать вовсе, если у вас нет блокировок и вы не стремитесь к повышенной анонимности.
Для начала загрузите pfSense-LiveCD на хост-машину (с использованием прямого VPN-соединения) и извлеките установочный образ (.gz открывается любым стандартным архиватором в Linux).
Создание ВМ pfSense
- Откройте VirtualBox, нажмите “New” дайте название машине. Название может служить маркером: одна называется “pfWork”, другая – “pfLife”, третья – “pfCrypto”. Пока что для теста можете назвать просто “pfSense”
- Выберите распакованный файл .iso. “Type” – выберите “BSD”, “Version” – “FreeBSD” (64-bit)
- Память можете указать 512 MB, процессор оставляем как есть
- Размер диска можете выбрать 2-4 GB, в большом нет смысла
- Нажмите “Finish”
- После зайдите в настройки ВМ, включите PAE/NX (“System” → “Processor”)
- ВМ готова.
Установка ОС
- После запуска и некоторого времени появится окно “Copyright and distribution notice”, нажмите “Enter”
- Выберите “Install (Enter)”
- Выберите “Auto (ZFS)”
- Еще раз выберите “Install”
- Выберите “Stripe”
- В окне “ZFS Configuration” нажмите пробел, затем “Enter”
- В предупреждающем окне нажмите левую стрелку, затем “Enter”
- Дождитесь окончания установки
- В конце мастер установки предложит загрузиться. В этот момент выключите ВМ.
- Зайдите в настройки, далее “Storage”, нажмите на “pfSense-CE-2...iso” и внизу по центру на значок “Remove Attachment”; подтвердите удаление
- Зайдите в “Network” → “Adapter 2”, опцию “Attached to:” поставьте в положение “Internal Network”, затем в строке внизу напишите название новой виртуальной сети, например, “pfSenseTest”
- Запустите ВМ заново, pfSense начнет автоматическую настройку. Дождитесь появления пронумерованных опций. Оставьте ВМ включенной в таком состоянии.
- Зайдите в настройки сети рабочей ВМ и для первого адаптера выберите “Attached to: Internal Network”, а в графе “Name” поставьте название внутренней сети “pfSenseTest”, если выбрали это название ранее.
- Запустите ВМ.
- Зайдите в браузер и напишите http://192.168.1.1. Браузер предупредит о риске, примите риск и продолжите.
- Если все сделано правильно, появится окно логина в панель администратора pfSense. Стандартный логин – “admin”, пароль – “pfSense”.
- Вас встретит окно “pfSense Setup”, нажмите два раза “Next”.
- В окне “General Information” можете оставить все как есть, внимания заслуживает только графа с DNS. Пока что можете оставить все как есть, о тонкой настройке DNS поговорим в другой раз.
- Нажмайте “Next”, пока не дойдете до окна “Set Admin WebGUI Password”. Укажите хороший сложный пароль. Нажмите кнопку “Reload”. Подождите, пока ВМ роутера перезагружается.
- Нажмите “Finish”
- После вылезет окно “Copyright”, нажмите “Accept”, затем “Close”.
Для настройки вам понадобится готовый конфигурационный файл. Его можно получить у провайдера VPN, либо создать самостоятельно на своем сервере с помощью скрипта. Вот необходимые данные (ваши будут отличаться):
Tunnel Addresses: 10.68.140.33/32 и fc00:bbbb:bbbb:bb01::5:8c20/128
Tunnel Private Key: ADRM6pyoYpofcDd0TkX4sb7UkR+Zj4AYeZOE2WWg2tI=
Peer Public Key: EPLh6pVel06dND8cE4Prix9GP4hGLYNhQhn5mSN2yzM=
Peer Endpoint: 86.106.143.236
Peer Port: 51820
Peer WG Address: то же, что и Tunnel Addresses
Peer DNS Server: DNS как в конфиге
Allowed IPs: 0.0.0.0/0 и ::0/0
Обратите внимание, что некоторые строки в конфиге WireGuard называются по-другому.
Конфигурация туннеля
- В верхней панели откройте “VPN” → “WireGuard” → “Tunnels”
- Нажмите “Add Tunnel”
- Заполните строки. “Enable Tunnel” – отметить галочкой; “Description” – “VPN”. “Listen Port” – укажите порт из конфига; “Interface Keys” – введите значение “Private Key” из конфига.
- Нажмите “Save Tunnel”
Конфигурация пира
- “VPN” → “WireGuard” → “Peers”
- Нажмите “Add Peer”
- “Enable Peer” – галочка отмечена
- “Tunnel” – выбрать из списка туннель WireGuard
- “Description” – придумать название сервера
- “Dynamic Endpoint” – снять галочку
- “Endpoint” – IP-адрес из конфига
- “Enpoint Port” – порт из конфига
- “Public Key” – публичный ключ из конфига
- “Pre-Shared Key” – если вы делали конфиг самостоятельно, у вас будет эта опция. Если вы брали конфиг у частного провайдера, этой строки в конфиге может и не быть.
- “Allowed IPs” – 0.0.0.0/0 для IPv4 и ::0/0 для IPv6
- Нажмите “Save Peer”
- Нажмите “Apply Changes”
- Зайдите в “VPN” → “WireGuard” → “Settings” и отметьте галочку “Enable WireGuard”
- Нажмите “Save”
- Нажмите “Apply Changes”
Назначение сетевого интерфейса
- В верхней панели откройте “Interfaces” → “Assignments”
- Нажмите зеленую кнопку “Add” (автоматически будет выбран нужный туннель)
- Нажмите “Save”, интерфейс будет автоматически назван “OPT1”.
- Нажмите на название нового интерфейса слева.
- Отметьте галочку “Enable Interface”
- Поменяйте название на “WG_VPN” (опционально)
- “IPv4 Configuration Type” – “Static IPv4”
- “IPv6 Configuration Type” – “Static IPv6”
- “IPv4 Address” – укажите значение до запятой из строки “Address” в конфиге
- “IPv4 Upstream Gateway” – нажмите “Add a new gateway”; “Gateway Name” – “WG_VPN_v4”, “Gateway IPv4” – то же, что и в “Address”, но без маски (без “/32”)
- “IPv6 Address” – укажите значение после запятой из строки “Address” в конфиге
- Повторите п. 10, используя данные для IPv6
- Нажмите “Save”
- Нажмите “Apply Changes”
- Откройте “System” → “Routing” → “Gateway Groups”
- Нажмите “Add”
- Сконфигурируйте группу. “Group Name” – “Prefer_WireGuard_V4”; “Gateway Priority” “WG_VPN_v4” – поменять с “Never” на “Tier 1”; “WAN_DHCP” – “Tier 2”; “Description” – “Prefer VPN, fail to WAN”.
- Нажмите “Save”
- Нажмите “Apply Changes”
Конфигурация NAT
- Откройте “Firewall” → “NAT” → “Outbound”
- Поставьте режим в “Hybrid Outbound NAT”
- Нажмите “Save”
- Нажмите “Add” со стрелочкой вверх.
- Сконфигурируйте NAT. “Interface” – выбрать интерфейс WireGuard (последний в списке). “Source” – здесь нужно выбрать “Network”, затем сбоку указать подсеть LAN. В Ubuntu 22.04 этот адрес можно узнать в настройках сети, нажав на значок шестеренки около подключения. Во вкладке “Details” будет графа “IPv4 Address” (например, 192.168.1.100)
- Нажмите “Save”
- Нажмите “Apply Changes”
Правила Фаервола
- Откройте “Firewall” → “Rules” → “LAN”
- Нажмите “Add” со стрелочкой вверх
- Сконфигурируйте правило фаервола. “Action” – “Pass”; “Interface” – “LAN”, “Protocol” – “Any”; “Source” – “Single host or alias”, в значении вписать то же, что и в п. 5 предыдущей инструкции (192.168.1.100).
- Нажмите “Display Advanced”
- Найдите внизу “Gateway” и выставите “WG_VPN_v4”
- Нажмите “Save”
- Нажмите “Apply Changes”
DNS
Для дополнительной безопасности нужно добавить DNS-серверы.Это может помочь предотвратить утечку DNS-запросов на другие серверы, не использующие VPN, но может привести к сценарию "курица-или-яйцо", когда DNS-запросы не будут выполняться, если VPN не работает. Подробнее про это поговорим отдельно в другой раз. Пример настройки здесь приводится в теоретических целях.
- Откройте “System” → “General”
- В “DNS Hostname” укажите один из этих резолверов (советуем попробовать конкретно этот), которые поддерживают “DNS over HTTPS (TLS)”/
- В “Gateway” укажите “WG_VPN_v4”
- “DNS Server Override” – снимите галочку
- Поставьте “DNS Resolution Behavior”. Здесь есть три опции. (1) “Use local DNS, fall back to remote DNS Servers” – выберите эту опцию при использовании DNS в режиме переадресации и когда DNS-серверу не требуется “DNS over TLS”. Это наиболее подходящий вариант для данного примера. (2) “Use local DNS, ignore remote DNS Servers” – выберите эту опцию при использовании “DNS over TLS” с DNS-резолвером в режиме переадресации. Это гарантирует, что ни один DNS-запрос не будет отправлен без TLS. (3) “Use remote DNS Servers, ignore local DNS” – используйте эту опцию, если сам фаервол не должен использовать DNS-резолвер, а взаимодействовать с DNS-сервером напрямую без TLS.
- Перейдите в меню “Services” →”DNS Resolver”
- Снимите флажок “Enable DNSSEC Support”
- Установите флажок “Enable Forwarding Mode”.
- Повторите для IPv6, если требуется.
- Нажмите “Save”
- Нажмите “Apply Changes”
Проверка на утечки
Чтобы проверить VPN на утечки, можно воспользоваться встроенным функционалом pfSense. Перейдите в раздел “Diagnostics” → ”Packet Capture”. Интерфейс должен быть указан WAN (em0), в “Max number of packets...” (вторая строка сверху) напишите “0”. Теперь спуститесь вниз и нажмите “Start”. Внизу в окне вы увидите логи, в которых должны всплывать локальные IP-адресы (начинающиеся с “10.0…”) и IP-адрес VPN. Это значит, что ВМ соединяется с интернетом только через VPN.На этом этапе сетевые адаптеры ваших ВМ настроены на NAT хоста. В интернет они выходят, соответственно, через хостовую службу VPN. В этой статье мы расскажем, как создать ВМ маршрутизатора/брандмауэра pfSense, настроить его в качестве VPN-клиента и протестировать на наличие утечек с помощью Wireshark. Рабочая среда Linux будет иметь доступ к интернету через цепочки ВМ-VPN-шлюзов и виртуальных машин Tor-шлюзов.
Обозревать принцип работы виртуального шлюза будем на примере протокола WireGuard, потому что он быстрый и его достаточно просто настраивать в pfSense. VPN на хосте может быть любой удобный, поддерживающий обход блокировок. Или VPN может отсутствовать вовсе, если у вас нет блокировок и вы не стремитесь к повышенной анонимности.
Для начала загрузите pfSense-LiveCD на хост-машину (с использованием прямого VPN-соединения) и извлеките установочный образ (.gz открывается любым стандартным архиватором в Linux).
Создание ВМ pfSense
- Откройте VirtualBox, нажмите “New” дайте название машине. Название может служить маркером: одна называется “pfWork”, другая – “pfLife”, третья – “pfCrypto”. Пока что для теста можете назвать просто “pfSense”
- Выберите распакованный файл .iso. “Type” – выберите “BSD”, “Version” – “FreeBSD” (64-bit)
- Память можете указать 512 MB, процессор оставляем как есть
- Размер диска можете выбрать 2-4 GB, в большом нет смысла
- Нажмите “Finish”
- После зайдите в настройки ВМ, включите PAE/NX (“System” → “Processor”)
- ВМ готова.
Установка ОС
- После запуска и некоторого времени появится окно “Copyright and distribution notice”, нажмите “Enter”
- Выберите “Install (Enter)”
- Выберите “Auto (ZFS)”
- Еще раз выберите “Install”
- Выберите “Stripe”
- В окне “ZFS Configuration” нажмите пробел, затем “Enter”
- В предупреждающем окне нажмите левую стрелку, затем “Enter”
- Дождитесь окончания установки
- В конце мастер установки предложит загрузиться. В этот момент выключите ВМ.
- Зайдите в настройки, далее “Storage”, нажмите на “pfSense-CE-2...iso” и внизу по центру на значок “Remove Attachment”; подтвердите удаление
- Зайдите в “Network” → “Adapter 2”, опцию “Attached to:” поставьте в положение “Internal Network”, затем в строке внизу напишите название новой виртуальной сети, например, “pfSenseTest”
- Запустите ВМ заново, pfSense начнет автоматическую настройку. Дождитесь появления пронумерованных опций. Оставьте ВМ включенной в таком состоянии.
- Зайдите в настройки сети рабочей ВМ и для первого адаптера выберите “Attached to: Internal Network”, а в графе “Name” поставьте название внутренней сети “pfSenseTest”, если выбрали это название ранее.
- Запустите ВМ.
- Зайдите в браузер и напишите http://192.168.1.1. Браузер предупредит о риске, примите риск и продолжите.
- Если все сделано правильно, появится окно логина в панель администратора pfSense. Стандартный логин – “admin”, пароль – “pfSense”.
- Вас встретит окно “pfSense Setup”, нажмите два раза “Next”.
- В окне “General Information” можете оставить все как есть, внимания заслуживает только графа с DNS. Пока что можете оставить все как есть, о тонкой настройке DNS поговорим в другой раз.
- Нажмайте “Next”, пока не дойдете до окна “Set Admin WebGUI Password”. Укажите хороший сложный пароль. Нажмите кнопку “Reload”. Подождите, пока ВМ роутера перезагружается.
- Нажмите “Finish”
- После вылезет окно “Copyright”, нажмите “Accept”, затем “Close”.
Для настройки вам понадобится готовый конфигурационный файл. Его можно получить у провайдера VPN, либо создать самостоятельно на своем сервере с помощью скрипта. Вот необходимые данные (ваши будут отличаться):
Tunnel Addresses: 10.68.140.33/32 и fc00:bbbb:bbbb:bb01::5:8c20/128
Tunnel Private Key: ADRM6pyoYpofcDd0TkX4sb7UkR+Zj4AYeZOE2WWg2tI=
Peer Public Key: EPLh6pVel06dND8cE4Prix9GP4hGLYNhQhn5mSN2yzM=
Peer Endpoint: 86.106.143.236
Peer Port: 51820
Peer WG Address: то же, что и Tunnel Addresses
Peer DNS Server: DNS как в конфиге
Allowed IPs: 0.0.0.0/0 и ::0/0
Обратите внимание, что некоторые строки в конфиге WireGuard называются по-другому.
Конфигурация туннеля
- В верхней панели откройте “VPN” → “WireGuard” → “Tunnels”
- Нажмите “Add Tunnel”
- Заполните строки. “Enable Tunnel” – отметить галочкой; “Description” – “VPN”. “Listen Port” – укажите порт из конфига; “Interface Keys” – введите значение “Private Key” из конфига.
- Нажмите “Save Tunnel”
Конфигурация пира
- “VPN” → “WireGuard” → “Peers”
- Нажмите “Add Peer”
- “Enable Peer” – галочка отмечена
- “Tunnel” – выбрать из списка туннель WireGuard
- “Description” – придумать название сервера
- “Dynamic Endpoint” – снять галочку
- “Endpoint” – IP-адрес из конфига
- “Enpoint Port” – порт из конфига
- “Public Key” – публичный ключ из конфига
- “Pre-Shared Key” – если вы делали конфиг самостоятельно, у вас будет эта опция. Если вы брали конфиг у частного провайдера, этой строки в конфиге может и не быть.
- “Allowed IPs” – 0.0.0.0/0 для IPv4 и ::0/0 для IPv6
- Нажмите “Save Peer”
- Нажмите “Apply Changes”
- Зайдите в “VPN” → “WireGuard” → “Settings” и отметьте галочку “Enable WireGuard”
- Нажмите “Save”
- Нажмите “Apply Changes”
Назначение сетевого интерфейса
- В верхней панели откройте “Interfaces” → “Assignments”
- Нажмите зеленую кнопку “Add” (автоматически будет выбран нужный туннель)
- Нажмите “Save”, интерфейс будет автоматически назван “OPT1”.
- Нажмите на название нового интерфейса слева.
- Отметьте галочку “Enable Interface”
- Поменяйте название на “WG_VPN” (опционально)
- “IPv4 Configuration Type” – “Static IPv4”
- “IPv6 Configuration Type” – “Static IPv6”
- “IPv4 Address” – укажите значение до запятой из строки “Address” в конфиге
- “IPv4 Upstream Gateway” – нажмите “Add a new gateway”; “Gateway Name” – “WG_VPN_v4”, “Gateway IPv4” – то же, что и в “Address”, но без маски (без “/32”)
- “IPv6 Address” – укажите значение после запятой из строки “Address” в конфиге
- Повторите п. 10, используя данные для IPv6
- Нажмите “Save”
- Нажмите “Apply Changes”
- Откройте “System” → “Routing” → “Gateway Groups”
- Нажмите “Add”
- Сконфигурируйте группу. “Group Name” – “Prefer_WireGuard_V4”; “Gateway Priority” “WG_VPN_v4” – поменять с “Never” на “Tier 1”; “WAN_DHCP” – “Tier 2”; “Description” – “Prefer VPN, fail to WAN”.
- Нажмите “Save”
- Нажмите “Apply Changes”
Конфигурация NAT
- Откройте “Firewall” → “NAT” → “Outbound”
- Поставьте режим в “Hybrid Outbound NAT”
- Нажмите “Save”
- Нажмите “Add” со стрелочкой вверх.
- Сконфигурируйте NAT. “Interface” – выбрать интерфейс WireGuard (последний в списке). “Source” – здесь нужно выбрать “Network”, затем сбоку указать подсеть LAN. В Ubuntu 22.04 этот адрес можно узнать в настройках сети, нажав на значок шестеренки около подключения. Во вкладке “Details” будет графа “IPv4 Address” (например, 192.168.1.100)
- Нажмите “Save”
- Нажмите “Apply Changes”
Правила Фаервола
- Откройте “Firewall” → “Rules” → “LAN”
- Нажмите “Add” со стрелочкой вверх
- Сконфигурируйте правило фаервола. “Action” – “Pass”; “Interface” – “LAN”, “Protocol” – “Any”; “Source” – “Single host or alias”, в а значении вписать то же, что и в п. 5 предыдущей инструкции (192.168.1.100).
- Нажмите “Display Advanced”
- Найдите внизу “Gateway” и выставите “WG_VPN_v4”
- Нажмите “Save”
- Нажмите “Apply Changes”
DNS
Для дополнительной безопасности нужно добавить DNS-серверы.Это может помочь предотвратить утечку DNS-запросов на другие серверы, не использующие VPN, но может привести к сценарию "курица-или-яйцо", когда DNS-запросы не будут выполняться, если VPN не работает. Подробнее про это поговорим отдельно в другой раз. Пример настройки здесь приводится в теоретических целах.
- Откройте “System” → “General”
- В “DNS Hostname” укажите один из этих резолверов (советуем попробовать конкретно этот), которые поддерживают “DNS over HTTPS (TLS)”/
- В “Gateway” укажите “WG_VPN_v4”
- “DNS Server Override” – снимите галочку
- Поставьте “DNS Resolution Behavior”. Здесь есть три опции. (1) “Use local DNS, fall back to remote DNS Servers” – выберите эту опцию при использовании DNS в режиме переадресации и когда DNS-серверу не требуется “DNS over TLS”. Это наиболее подходящий вариант для данного примера. (2) “Use local DNS, ignore remote DNS Servers” – выберите эту опцию при использовании “DNS over TLS” с DNS-резолвером в режиме переадресации. Это гарантирует, что ни один DNS-запрос не будет отправлен без TLS. (3) “Use remote DNS Servers, ignore local DNS” – используйте эту опцию, если сам фаервол не должен использовать DNS-резолвер, а взаимодействовать с DNS-сервером напрямую без TLS.
- Перейдите в меню “Services” →”DNS Resolver”
- Снимите флажок “Enable DNSSEC Support”
- Установите флажок “Enable Forwarding Mode”.
- Повторите для IPv6, если требуется.
- Нажмите “Save”
- Нажмите “Apply Changes”
Проверка на утечки
Чтобы проверить VPN на утечки, можно воспользоваться встроенным функционалом pfSense. Перейдите в раздел “Diagnostics” → ”Packet Capture”. Интерфейс должен быть указан WAN (em0), в “Max number of packets...” (вторая строка сверху) напишите “0”. Теперь спуститесь вниз и нажмите “Start”. Внизу в окне вы увидите логи, в которых должны всплывать локальные IP-адресы (начинающиеся с “10.0…”) и IP-адрес VPN. Это значит, что ВМ соединяется с интернетом только через VPN.By Vergil & Pavluu
| часть 1 | часть 2 | часть 3 | часть 4 |
Источник