Создание виртуальной локальной сети для игр и не только

Недавний выход baldur’s gate 3 побудил вновь вернуться к забытым технологиям. Версия игры, которую я имею, не умеет в игру по глобальной сети, но вполне способна играть по локальной сети. Отсюда возникла задача: нужно объединить 2 разнесенных компьютера в локальную сеть.

Эта проблема, на мой взгляд, может быть решена двумя способами, в зависимости от возможностей:

  1. У вас нет белого ip адреса, нет сервера. Вам нужны приложения для организации виртуальных локальных сетей.
  2. Либо же вы организуете свой ВПН, который объединит два компьютера в локальную сеть.

LogMeIn Hamachi vs Radmin VPN

LogMeIm Hamachi
Radmin VPN

Программы выглядят крайне схоже. Крайне схоже работают. Поэтому стоит найти отличия:

Hamachi

Плюсы

  • Проприетарная программа
  • Ранее очень популярная
  • Выше стабильность
  • Делает строго только то, для чего вы ее ставите

Недостатки

  • Закрытый код, давно не обновляется
  • Ограничение на 5 компов в комнате
  • Наличие платной подписки
  • Необходимо регистрироваться

Radmin

Плюсы

  • Клиенты с открытым кодом
  • Набирает популярность
  • Большой набор утилит для работы с клиентами
  • Бесплатная
  • Без регистрации
  • Нет ограничений на количество участников

Недостатки

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

И главный аргумент в случае с baldur’s gate 3- стабильность работы сетевого канала. Игра попросту вылетит при поврежденном кадре, может запороть сохранение и тп. Игра в роли сервера будет работать стабильно, клиенты раз в 30 минут и чаще могут вылетать. Поэтому советую выбрать Hamachi.

Поднятие собственного OpenVPN

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

Список необходимого на сервере:

  • Docker compose

Создадим необходимые директории:

mkdir compose
mkdir compose/openvpn
sudo mkdir /etc/openvpn
cd compose/openvpn 
touch docker-compose.yaml

Внесем в docker-compose.yaml нужные данные контейнера и параметров запуска:

version: '2'
services:
  openvpn:
    cap_add:
     - NET_ADMIN
    image: kylemanna/openvpn
    container_name: openvpn
    ports:
     - "1194:1194/udp"
    restart: always
    volumes:
     - /etc/openvpn:/etc/openvpn

Запустим создание конфигурации и ключей:
У нас спросят контрольную фразу (Enter PEM pass phrase) и имя сертификата (Common Name).

docker compose run --rm openvpn ovpn_genconfig -u udp://{vpn_server_address}
docker compose run --rm openvpn ovpn_initpki

Запустим контейнер, проверим что он стартует, флаг -d запускает контейнер отсоединенным- не открывает окно приложения:

docker compose up [-d] 

Остановим контейнер, чтобы отредактировать файл (ctrl+c если был запушен без -d):

docker compose down

Отредактируем файл /etc/openvpn/openvpn.conf, внесем строки.
client-to-client разрешает связь клиентов между собой.
topology subnet включает адресацию по ip и маске сети.

client-to-client
topology subnet

Создадим конфиг клиента (1 пользователь = 1 конфиг клиента):

docker compose run --rm openvpn easyrsa build-client-full {client_name} nopass

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

docker-compose run --rm openvpn ovpn_getclient {client_name} > {client_name}.ovpn  

Логи контейнера доступны:

docker-compose logs -f

Теперь необходимо скачать конфиги клиентов, раздать участникам сети, прокинуть порт 1194 в сеть. Участникам необходимо импортировать в openvpn connect полученный конфиг. IP участника локальной сети будет отображаться как «you private ip».