[Эксплуатация и обслуживание] Wireguard+OpenVPN решает проблему стабильности межрегионального VPN-соединения.
[Эксплуатация и обслуживание] Wireguard+OpenVPN решает проблему стабильности межрегионального VPN-соединения.

Для начала нам нужно разобраться с вопросом, в чем разница между Wireguard и OpenVPN?

  1. Wireguardна Протокол на основеUDP, унаследованный от ядра, имеет простой (но безопасный) протокол шифрования, меньшие накладные расходы и более высокую производительность.
  2. OpenVPNна на основе протокола TCP или UDP, шифрование личности осуществляется с помощью SSL/TLS, не так эффективно, как Wireguard, но поддерживает несколько методов управления.

В реальном использовании TCP и UDP также сильно различаются.

  1. TCP: может обеспечить более надежное соединение.,Потому что у него есть механизм подтверждения и повторной передачи.,Способен обрабатывать потерю пакетов и ошибки. Подходит для сценариев с высокими требованиями к целостности и надежности данных.
  2. UDP: UDP может обеспечить более высокую скорость и меньшую задержку, что подходит для чувствительных к задержке ситуаций, таких как приложения реального времени и потоковое видео. Режим UDP также позволяет избежать ограничений контроля перегрузки TCP и подходит для сред с высокой пропускной способностью.

При фактическом использовании UDP может быть ограничен по скорости QOS, но он все равно может хорошо работать в средах VPN с большой задержкой на больших расстояниях и не подвержен частым отключениям TCP.

План реализации

В сценарии практического применения мне нужно получить доступ к локальной сети в месте A из разных мест в месте B. Место A и место B физически далеко друг от друга и имеют плохие условия сети, но для бизнеса в реальном времени не так много требований, и НАТ

Вариант 1

Все используют OpenVPN и протокол UDP для машин, подключенных между A и B, для обеспечения связи. Местоположение B использует протокол TCP для других областей в местоположении B, чтобы обеспечить стабильность соединения. Вариант 1 можно сослаться Используйте OpenVPN в Windows для доступа к ресурсам интрасети компании из удаленных мест (туннельный метод, перенаправление frp на сервер общедоступной сети)

Вариант 2

Используйте Wireguard между A-B Сервер в локации Б использует OpenVPN для использования в других зонах локации Б. Структура сети следующая

Язык кода:javascript
копировать
AИнтранет<--->Aлокальный сервер<- Wireguard-UDP ->Bлокальный сервер<- OpenVPN TCP/UCP ->BПользователи из других регионов

Сравнивая два варианта, Вариант 1 проще, но без Варианта 2 стабильна, и при высокой пропускной способности в AB и AB использование OpenVPN может потреблять много ресурсов, что технически сложно. 2. Чтобы настроить переадресацию, необходимо разделить две VPN. Окончательный выбор Вариант 2 продолжить

Часть Wireguard

Установка скрипта (рекомендуется)

Установите OpenVPN (вроде бы Wireguard тоже можно использовать таким способом, но он сквозной, и настроить переадресацию тоже очень хлопотно, поэтому скриптами пользоваться не рекомендуется)

Язык кода:javascript
копировать
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

После установки мы можем напрямую импортировать его на сервер, а затем выполнить на сервере.

Язык кода:javascript
копировать
\#/etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

Если есть какие-либо проблемы с переадресацией, вы можете добавить ее вручную в разделе «Ручная установка» ниже.

Язык кода:javascript
копировать
PreUp = iptables -A FORWARD -i tun0 -j ACCEPT; iptables -A FORWARD -o tun0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE

Ручная установка

Установите Wireguard и включите пересылку ядра. Если версия ядра Linux выше 5.6 (Ubuntu выше 5.4), Wireguard-dkms может быть унаследован в ядре, и нет необходимости устанавливать его снова.

Язык кода:javascript
копировать
sudo apt-get update
sudo apt-get install wireguard wireguard-dkms wireguard-tools -y
sudo vi /etc/sysctl.conf
#Изменяем net.ipv4.ip_forward=0 на net.ipv4.ip_forward=1
#Или удалите комментарий net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1

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

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

Язык кода:javascript
копировать
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

Заполните файл конфигурации. Порт по умолчанию — 51820. Не забудьте разрешить соответствующий порт в брандмауэре. Поскольку один из нас не может получить доступ к другому абоненту, мы будем использовать порт в общедоступной сети в качестве сервера, а порт после NAT — в качестве сервера. клиент может сервер EndPoint не установлен.

Язык кода:javascript
копировать
sudo vi /etc/wireguard/wg0.conf
#/etc/wireguard/wg0.conf
[Interface]
PrivateKey = <Создается автоматически, не нужно заполнять вручную>
Address = 10.0.0.1/24
#Клиент — это адрес = 10.0.0.2/24
PreUp = iptables -A FORWARD -i tun0 -j ACCEPT; iptables -A FORWARD -o tun0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
#Автоматическая настройка переадресации сетевой карты
ListenPort = 51820

[Peer]
PublicKey = <Заполните открытый ключ узла,илиcat /etc/wireguard/publickey>
AllowedIPs = 10.0.0.2/32,<Сегмент сети для пересылки>
#Клиент — это адрес = 10.0.0.1/32,10.8.0.0/24 (сегмент сети OpenVPN ниже)
Endpoint = <СерверизIPадрес>:51820
#EndpointСервер выше писать не нужно
PersistentKeepalive = 25
#Сохранять отношения сопоставления NAT

Затем включите Wireguard

Язык кода:javascript
копировать
sudo wg-quick up wg0

Раздел OpenV**

Если сеть UDP плохая, рекомендуется перейти на TCP.

Стабильность соединения UDP относительно низкая по сравнению с TCP, но почему Wireguard использует UDP? Потому что по сравнению с плохой стабильностью соединения меня больше волнует, смогу ли я подключиться!

Установка скрипта (рекомендуется)

Установить OpenV** (вроде бы Wireguard тоже можно использовать таким способом, но он сквозной, и настроить переадресацию тоже хлопотно, поэтому скриптами пользоваться не рекомендуется)

Язык кода:javascript
копировать
wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
#wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

Настройте его сразу после загрузки, а затем измените конфигурацию после того, как все будет установлено по умолчанию.

Язык кода:javascript
копировать
vi /etc/openvpn/server/server.conf
#v/etc/openvpn/server/server.conf
push "route 10.0.0.0 255.255.0.0"
push "route <Сегмент сети для пересылки> <Соответствие сегментов сетиизмаска>"
#Просто добавьте два приведенных выше предложения

Недавно созданный файл ov** может заменить удаленное имя на ваше собственное доменное имя, так что вы сможете изменить запись DNS в любое время.

Ручная установка

На самом деле, Wireguard выше — это я в середине блога Ручная. установка, я съел много дерьма, поэтому больше не буду его есть. Поэтому я положил несколько ссылок Конфигурация и использование OpenV** Документация по развертыванию и использованию службы OpenV**. на основе WireGuard и OpenV** Создание гибридной облачной инфраструктуры

Достижения

Успешное подключение и доступ к школьной интрасети через OpenV**.

Мысли

Той ночью я скорректировал код примерно на 5 часов. Поскольку переадресация так и не вступила в силу, я задумался, не следует ли мне использовать комбинацию Wireguard + OpenV**, когда я когда-то хотел переключиться на полную форму OpenV**. Новостей от Tracert нет. Сервер может подключаться по обоим протоколам, что вызывает недоумение. Головная боль (физическая), принять лекарство (быстро заснуть) Проспал где-то до 7 часов. Проснувшись, обнаружил, что висящий в фоне пинг успешно пропинговался, и шлюз нормально отследил. Может быть, вы столкнулись с Linux, который умеет исправлять ошибки?

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода