Как стать автором
Обновить

Комментарии 8

wireguard решает 99% всех проблем, с которыми вы боролись. wg поддерживает перенос wg-интерфейса в namespace, что позволяет его инжектить в контейнер (по сути, network namespace) без каких-либо выкрутас на хосте.


Внешний трафик (после шифрования) при этом продолжает ходить с интрефейса, в котором wg создавали (т.е. вне контейнера).


Это одна из wg-специфичных фич, за который мы его любим.

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

А во-вторых, когда уже начал и столкнулся с трудностями, первая ссылка по «wireguard container VPS» была:
I've got Wireguard running on my home network and also on my free tier Google Cloud VPS/VM, both via Docker container (using the cmulk/wireguard-docker image — github.com/cmulk/wireguard-docker). I can successfully connect to them from my Windows 10 laptop and Android phone. Now I want to set it up so that my home network and VPS are always connected to each other as if they're local (i.e., site to site VPN). I thought simply adding each as peers in each wg0.conf file and restarting the containers would do the trick, but I was dead wrong. How do I do site to site VPN with Wireguard running in containers?

Решил, что тоже есть особенности, и не стал менять шило на мыло.

Но рано или пооздно wg попробую, безусловно. Похоже, настает его время.
На всякий случай на будущее, в managed kubernetes (если я когда-нибудь соберусь запустить контейнер на, к примеру, AWS Fargate), wg тоже поддерживается (пусть и без ускорения за счет ядра)?

Как не сотрудник службы поддержки AWS, отвечаю: не имею ни малейшего представления.


WG в апстриме linux-5.6, а что там хостеры юзают — это их спрашивать надо.

Можно все-таки уточнить? Он может работать «сам по себе»? Или обязательно нужна поддержка в ядре и всякие разные требования к серверу?

Я взял самый популярный контейнер с докерхаба, по инструкции запустил
docker run -it --rm --cap-add sys_module -v /lib/modules:/lib/modules cmulk/wireguard-docker:buster install-module
Система начала устанавливать адовую кучу пакетов (вообще-то я контейнер использую, чтобы не трогать хостовую ОС, ну да ладно). В результате насыпалось сообщений, которые мне не очень понравились:
E: Unable to locate package linux-headers-4.15.0-99-generic
E: Couldn't find any package by glob 'linux-headers-4.15.0-99-generic'
E: Couldn't find any package by regex 'linux-headers-4.15.0-99-generic'

debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)

Setting up wireguard-dkms (1.0.20200506-1~bpo10+1) …
Loading new wireguard-1.0.20200506 DKMS files...
It is likely that 4.15.0-99-generic belongs to a chroot's host
Building for 4.15.0-99-generic
Module build for kernel 4.15.0-99-generic was skipped since the
kernel headers for this kernel does not seem to be installed.
Processing triggers for libc-bin (2.28-10) ...


Делал это и как обычно, через sudo. И непосредственно из под рута.

#docker run --cap-add net_admin --cap-add sys_module -v /opt/wireguard:/etc/wireguard -p 5555:5555/udp cmulk/wireguard-docker:buster
[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device "wg0"
Adding iptables NAT rule


Стоит разбираться? Или VPS не поддерживает?
Ядро свежее
# uname -s -v -r
Linux 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020

(I've broke my Russian keyboard for now).


You don't need to install kernel modules (or userspace) into containers. WG should be managed outside of containers. Move a wg0 device (or wgX, whatever you'll get after creation of conneciton) into namespace.


Basically, you:


  1. Setup tunnel on host system.
  2. Move wg0 into network namespace.

For old kernels you need dkms. Modern kernels (5.6+) does not need it anymore.

Streisand + wireguard в кач-ве vpn-сервера можно использовать AWS. Дома на сервере в докер-контейнере traefik отвечает за маршрутизацию к внутренним ресурсам.
Пользуюсь уже некоторое время, проблем никаких нет.
У Вас, в статье все несколько усложнено.

«несколько усложнено» — это мягко сказано :)
Это я так шел.
В итоге расценил такое кривым и отказался. В качестве полезного опыта вынес ряд моментов, которые могут оказаться полезными на будущее.

Например, обнаружить, что после iptables -I INPUT -p tcp -m tcp --dport 1883 -j DROP порт остается доступным из Интернета — для меня это серьезно. Не думаю, что прям вот все это знают, один я лажанулся, поэтому и записал.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории