Как я могу соединить два хоста за CGNAT с помощью WireGuard, используя ненадежный VPS?

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

У меня есть домашняя сеть за CGNAT, и я хотел бы подключиться к ней через wireguard из интернета на своём телефоне, который также находится за CGNAT. Мои интернет-провайдеры не поддерживают IPv6.

Поскольку ни одна из сторон не будет иметь публичный IP-адрес, у меня есть VPS, который имеет публичный IP-адрес.

Я настроил wireguard на сервере и на клиенте.

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

Я думаю, что мне нужно что-то вроде UDP реле, работающего на VPS, которое будет пересылать зашифрованные пакеты wireguard между двумя хостами. Таким образом, соединение между сервером и клиентом остается зашифрованным, и VPS остается ненадежным.

Я думаю, что это должно быть возможно с некоторыми правилами маскировки iptables на VPS. Есть ответ на https://forum.mikrotik.com/viewtopic.php?t=210772 для маршрутизаторов mikrotik, но мне нужно что-то для iptables. Я также не знаю, как wireguard «слушает» эти пакеты. Альтернативой может быть «wireguard в wireguard», но это кажется ненужным.

Кто-нибудь делал что-то подобное?

Спасибо!

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

Чтобы установить соединение между двумя хостами за CGNAT с использованием WireGuard через ненадежный VPS, можно использовать подход с реле передачи UDP. Этот метод позволит установить защищенное соединение между вашей домашней сетью и мобильным устройством, которое также находится за CGNAT, без необходимости запускать WireGuard на VPS.

Шаг 1: Установка WireGuard

Убедитесь, что WireGuard установлен на обоих хостах (вашем домашнем сервере и мобильном устройстве).

Для установки WireGuard на Ubuntu, выполните следующие команды:

sudo apt update
sudo apt install wireguard

Шаг 2: Настройка VPS

  1. Установка необходимых пакетов: Убедитесь, что на вашем VPS установлены необходимые пакеты, такие как iptables и socat.
sudo apt install socat iptables
  1. Настройка socat для релеирования UDP: Используйте socat для создания UDP реле, которое будет слушать на определенном порту на VPS и пересылать пакеты на ваши хосты.

Запустите на VPS следующую команду:

socat UDP4-RECVFROM:51820,fork UDP4-SENDTO:<YOUR_HOME_SERVER_PRIVATE_IP>:51820

Эта команда будет слушать UDP-пакеты на порту 51820 и отправлять их на ваш домашний сервер.

Шаг 3: Настройка WireGuard на домашнем сервере

Настройка конфигурации WireGuard на домашнем сервере (например, /etc/wireguard/wg0.conf):

[Interface]
PrivateKey = <HOME_SERVER_PRIVATE_KEY>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <MOBILE_DEVICE_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32
Endpoint = <YOUR_VPS_PUBLIC_IP>:51820
PersistentKeepalive = 25

Шаг 4: Настройка WireGuard на мобильном устройстве

Конфигурация WireGuard на мобильном устройстве (например, через приложение WireGuard):

[Interface]
PrivateKey = <MOBILE_DEVICE_PRIVATE_KEY>
Address = 10.0.0.2/24

[Peer]
PublicKey = <HOME_SERVER_PUBLIC_KEY>
AllowedIPs = 10.0.0.1/32
Endpoint = <YOUR_VPS_PUBLIC_IP>:51820
PersistentKeepalive = 25

Шаг 5: Настройка iptables на VPS

Используйте iptables, чтобы разрешить передачу пакетов UDP через ваш VPS:

sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables -A FORWARD -p udp --dport 51820 -j ACCEPT

Кроме того, включите пересылку пакетов:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Важно!

  1. Безопасность: Обеспечьте надежный паролем доступ к вашему VPS и следите за его безопасностью, так как он является посредником в этой схеме.
  2. Постоянное использование socat: Вы можете запустить socat в фоновом режиме или использовать systemd, чтобы он автоматически перезапускался при перезагрузке VPS.
  3. Тестирование: Проверьте соединение после настройки. Используйте ping и другие инструменты для диагностики.

Заключение

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

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

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